← All casesConfidential · Anonymized
Case
#019
Web3 · Bridge · Severity: High
Cross-Chain Bridge Message Replay
A bridge message format omitted the source-chain identifier from the signed payload. Valid messages could be replayed on other bridge endpoints belonging to the same bridge instance, causing state desynchronization.
Industry
Web3 · Bridge
Scope
Bridge · Cryptography · Multi-chain
Timeline
R·Q4 → V·Q4 → R·Q4
Closed
Q4
01
Impact
Replay surface
Any signed message replayable across bridge endpoints
State drift
Downstream balances desynchronized on replay
Detection difficulty
On-chain reads look identical to a legitimate transfer
Impact vectors
- ›Message replay across networks
- ›State desynchronization
02
Reproduction
Steps below reproduce the finding against a staging replica. Where the reproduction affected a shared component, coordination was arranged before execution.
- 01Capture a signed bridge message on the source chain.
- 02Submit the identical payload to a different bridge endpoint of the same instance.
- 03Confirm acceptance and observe state divergence on the destination.
03
Vulnerability
struct BridgeMessage {
address recipient;
uint256 amount;
uint256 nonce;
bytes signature; // does not cover srcChainId
}04
Mitigation
Client-side mitigation shipped and validated during the engagement. Reference patch below.
struct BridgeMessage {
bytes4 version; // format discriminant
uint256 srcChainId;
uint256 dstChainId;
address recipient;
uint256 amount;
uint256 nonce;
bytes signature; // covers all fields above
}05
Retest & Verify
- ✓Cross-endpoint replays rejected due to chain-id mismatch in the signed payload.
- ✓Version-discriminant migration deployed without loss of in-flight messages.
- ✓Bridge accounting reconciled post-migration; no residual desynchronization observed.
06
Deliverables
- ▊Technical Report
- ▊Message-format review
- ▊Nonce audit
- ▊Retesting report
07
Sign-off
Handled by
Epulyx
Reviewed by
Nolan
Closed
Case closed after cross-endpoint replay verified closed.