#41202 [BC-Insight] A malicious signer can force a failure of the signature round by providing a key ID they don't own

Submitted on Mar 12th 2025 at 11:36:50 UTC by @christ0s for Attackathon | Stacks II

  • Report ID: #41202

  • Report Type: Blockchain/DLT

  • Report severity: Insight

  • Target: https://github.com/stacks-network/sbtc/blob/immunefi_attackaton_1.0/Cargo.toml#L31

  • Impacts:

    • Network not being able to confirm new transactions (total network shutdown)

Description

Brief/Intro

A malicious signer can disrupt transaction signing by submitting signature shares claiming key IDs they don't actually own. The FIRE coordinator in the WSTS library lacks key ID validation in the gather_sig_shares function, accepting signature shares for ANY KEY ID without verification, while properly validating key IDs during nonce collection.

This inconsistency allows an attacker to submit signature shares for keys belonging to other signers, causing signature aggregation to fail with crypttographical errors and preventing the creation of valid Bitcoin transactions.

Vulnerability Details

The root cause is an inconsistency in validation between two functions in the FIRE coordinator's implementation:

  1. The gather_nonces function properly validates key IDs:

  1. However, the gather_sig_shares function has no equivalent validation

This validation gap allows a malicious signer to:

  • Claim ownership of key IDs belonging to other signers

  • Submit signature shares with incorrect cryptographic material for those keys

  • Cause signature aggregation to fail when the coordinator attempts to combine the signatures

Proof of Concept

Add the following code to transaction_signer.rs to demonstrate the attack:

and run the test: RUST_BACKTRACE=FULL cargo test --package signer --test integration -- transaction_coordinator::sign_bitcoin_transaction_multiple_locking_keys --exact --show-output --nocapture

Was this helpful?