#38270 [BC-Medium] A signer can send a large number of junk `WstsNetMessage::NonceRequest` through P
Description
Brief/Intro
Vulnerability Details
WstsNetMessage::NonceRequest(request) => {
tracing::info!("handling NonceRequest");
if !chain_tip_report.sender_is_coordinator {
tracing::warn!("received coordinator message from non-coordinator signer");
return Ok(());
}
let db = self.context.get_storage();
let sig_hash = &request.message;
let validation_outcome = Self::validate_bitcoin_sign_request(&db, sig_hash).await;
let validation_status = match &validation_outcome {
Ok(()) => "success",
Err(Error::SigHashConversion(_)) => "improper-sighash",
Err(Error::UnknownSigHash(_)) => "unknown-sighash",
Err(Error::InvalidSigHash(_)) => "invalid-sighash",
Err(_) => "unexpected-failure",
};
metrics::counter!(
Metrics::SignRequestsTotal,
"blockchain" => BITCOIN_BLOCKCHAIN,
"kind" => "sweep",
"status" => validation_status,
)
.increment(1);
if !self.wsts_state_machines.contains_key(&msg.txid) {
let (maybe_aggregate_key, _) = self
.get_signer_set_and_aggregate_key(bitcoin_chain_tip)
.await?;
let state_machine = SignerStateMachine::load(
&db,
maybe_aggregate_key.ok_or(Error::NoDkgShares)?,
self.threshold,
self.signer_private_key,
)
.await?;
self.wsts_state_machines.insert(msg.txid, state_machine);
}
self.relay_message(msg.txid, &msg.inner, bitcoin_chain_tip)
.await?;
}Impact Details
References
Proof of Concept
Proof of Concept
Previous#38690 [BC-Insight] A malicious coordinator can run multiple DKG coordination in parallel and manipuNext#38223 [BC-Insight] Attackers can disrupt the tag order of gossip messages to bypass signature verif
Last updated
Was this helpful?