vielite's blog

Potential Identity Misbinding in RaptorCast Secondary Client Implementation

April 5, 2026
3 min read
Table of Contents
potential-identity-misbinding-in-raptorcast

Summary

The RaptorCast secondary client trusts validator_id embedded inside PrepareGroup and ConfirmGroup messages instead of binding those values to the sender identity already recovered from the authenticated UDP packet.

That creates an identity-misbinding issue: a message can be signed by one node while claiming to be from another validator inside its payload.

Root Cause

The primary instance verifies the UDP message and learns the true sender, but the forwarding path to the secondary instance loses that authenticated identity. The secondary client then uses the embedded validator_id when:

  • deciding where to send responses
  • accepting group-confirmation data
  • constructing the client-side group state
2025-09-monad/bft/monad-raptorcast/src/raptorcast_secondary/client.rs
if accept {
self.pending_confirms
.entry(invite_msg.start_round)
.or_default()
.insert(invite_msg.validator_id, invite_msg.clone());
}
2025-09-monad/bft/monad-raptorcast/src/raptorcast_secondary/client.rs
let maybe_entry = invites.get(&confirm_msg.prepare.validator_id);
let Some(old_invite) = maybe_entry else {
return;
};
if old_invite != &confirm_msg.prepare {
return;
}
let group = GroupAsClient::new_fullnode_group(
confirm_msg.peers,
&self.client_node_id,
confirm_msg.prepare.validator_id,
round_span,
);

Impact

An attacker can impersonate another validator in group-formation traffic and cause a full node to accept group membership that was not authorized by the real validator. That undermines the integrity of group formation and can misroute subsequent traffic.

Recommendation

Preserve the authenticated sender identity when handing messages to the secondary instance, then reject any message whose claimed validator does not match the verified sender. A stronger variant is to sign the group message payload itself and validate that signature against the claimed validator.