#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:
The
gather_noncesfunction properly validates key IDs:
However, the
gather_sig_sharesfunction 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?