# Lack of authorization in RaptorCast Secondary protocol group messages allows arbitrary node impersonation leading to DoS

RaptorCast Secondary group messages verify signatures but never bind identity fields to the recovered key, letting anyone impersonate validators/fullnodes and DoS block propagation.

- Payout: Contest reward
- Severity: medium
- Program: Monad
- Credited: dontonka
- Disclosed: 2026-02-26
- Write-up quality: 6/10
- Original: https://code4rena.com/reports/2025-09-monad#m-01
- Library page: https://bugbountylibrary.com/r/c4%3A2025-09-monad%3AM-01
- Tags: domain:web3 impact:dos kind:contest platform:code4rena sev:medium tech:rust technique:source-review vuln:access-control vuln:auth-bypass vuln:dos

**Target:** RaptorCast Secondary group management messages (PrepareGroup, PrepareGroupResponse, ConfirmGroup)
**Root cause:** Signature is verified and pubkey recovered, but message identity fields (validator_id, node_id) are never compared to the recovered key, and validator-set membership is unchecked.
**Steps:**
1. Generate attacker keypair.
2. Craft `PrepareGroup{validator_id: victim_pubkey, max_group_size:10, start_round:1000, end_round:1240}`.
3. Sign with attacker key (not victim's) and send to fullnode's node port.
4. Fullnode accepts without identity check and replies to attacker; repeat to exhaust max_num_group (3) and fill pending_confirms.
5. Similarly send `PrepareGroupResponse{node_id: fake_fullnode_pubkey, accept:true}` signed with attacker key to a validator.
6. Send `ConfirmGroup{prepare: PrepareGroup(validator_id=fake), peers:[attacker nodes], name_records:[attacker IPs]}` to poison peer discovery.
**How found:** Code review of raptorcast_secondary client/publisher: noticed two-stage validation where signature recovery exists but identity-field comparison is absent.
**Exploitation:** Attacker connects to the open node port, signs group messages with their own key while claiming victim validator_id/node_id, exhausting group slots, flooding pending_confirms, and injecting malicious peers/name records so fullnodes connect to attacker infrastructure.
**Escalation:** Combining slot exhaustion, pending_confirms flooding, and ConfirmGroup peer poisoning degrades RaptorCast Secondary entirely, forcing fullnodes to fall back to BlockSync.
**Insight:** When a protocol recovers a pubkey from a signature, always grep for whether payload identity fields (validator_id, node_id, peer lists) are compared to that recovered key — signature validity alone is not authentication of claimed identity.
