#40731 [BC-Medium] A malicious signer can force a panic in the coordinator by sending `DkgFailure::BadPrivateShares` with an invalid signer ID
Description
Brief/Intro
Vulnerability Details
// in wsts/src/state_machine/coordinator/fire.rs
DkgFailure::BadPrivateShares(bad_shares) => {
// bad_shares is a map of signer_id to BadPrivateShare
for (bad_signer_id, bad_private_share) in bad_shares {
// ... code that attempts verification ...
// This line causes a panic if bad_signer_id doesn't exist in the map
let dkg_public_shares = &self.dkg_public_shares[bad_signer_id]
.comms
.iter()
.cloned()
.collect::<HashMap<u32, PolyCommitment>>();
// This also causes a panic if bad_signer_id doesn't exist
// uses direct access and not .get()
let dkg_private_shares = &self.dkg_private_shares[bad_signer_id];
// ... rest of verification code ...
}
}Proof of Concept
Proof of Concept
Previous#40655 [BC-Medium] Malicious signers can give different votes to other Signers to prevent sBTC withdrawalNext#40770 [BC-Low] Unvalidated withdrawal events allow data manipulation and denial of service in Emily
Was this helpful?