ByAUJay
blockchain protocol security audit: Red-Teaming Bridges, Relayers, and Light Clients
Description: A hands-on, 2025-ready playbook for decision‑makers on how to red‑team cross‑chain bridges, relayers, and light clients—using real incident patterns, emerging standards like ERC‑7683, Ethereum sync‑committee light clients, IBC rate‑limit middleware, CCIP risk controls, and practical attack simulations you can run before launch.
Why this matters now
Cross‑chain failures remain the industry’s biggest single point of catastrophic loss. In just the last cycle, we’ve seen:
- Proof/verification bugs that allowed forged withdrawals (BNB Chain Token Hub, Oct 2022). (nansen.ai)
- “Copy‑paste” mass looting from a misconfigured validation root (Nomad, Aug 2022). (siliconangle.com)
- Private‑key/multisig compromises draining locks (Orbit Chain/Orbit Bridge, Dec 31, 2023–Jan 1, 2024). (coindesk.com)
Even in 2024, bridge compromises continued to feature prominently in total hack losses, with private key compromise the dominant root cause. (reuters.com)
This post is the field guide our security team at 7Block Labs uses when we red‑team cross‑chain stacks. It is intentionally opinionated and concrete: precise attack paths to replicate, configuration checks to automate, and the 2025‑era controls we expect to see before we’ll sign off on production.
Threat model refresh: what actually breaks
- Proof/verification bugs on destination
- Forged Merkle or signature proofs accepted by the bridge/light client smart contracts. Case in point: BNB Chain Token Hub accepted a forged low‑level proof and minted 2M BNB; the attacker brute‑forced sequencing until a forged package stuck. (nansen.ai)
- Wormhole’s 2022 theft exploited insufficient account validation on Solana, enabling spoofed guardian signatures and unauthorized wETH minting. (protos.com)
- Initialization and upgrade hazards
- Nomad’s “zero root” initialization bug autovalidated messages; attackers simply replicated a working tx and changed the recipient. (itpro.com)
- Key management and relayer/validator compromise
- Orbit’s 7‑of‑10 multisig takeover is the cleanest 2024 example; no code bug needed. Similar patterns hit Ronin and Harmony earlier cycles. (coindesk.com)
- Consensus/finality misalignment
- Using optimistic or unf inalized headers for high‑value state transitions; failing to distinguish Ethereum light client “optimistic” vs “finality” updates in post‑Altair designs. (ethereum.github.io)
- Cross‑chain accounting drift
- Bridges not enforcing end‑to‑end invariants between source locks/burns and destination mints/releases—missed by contract‑local tests, caught by cross‑chain accounting. (arxiv.org)
- IBC proof‑system edge cases
- 2022 advisories around ICS‑23 soundness/non‑existence proofs demanded patches and clarified proof semantics; ecosystems that adopted rate‑limit middleware added a coarse “breaker” for value flows. (forum.cosmos.network)
Red‑teaming checklist: what we actually do (and you can too)
- Proof forgery and header handling
- Forge historical‑height packages: attempt to deliver a message with a stale block height but valid encoding; validate sequence enforcement and “height monotonicity” checks block it (BNB Token Hub pattern). (nansen.ai)
- Alternate between optimistic and finalized Ethereum light client updates; confirm business‑critical paths only accept finalized headers or enforce risk‑adjusted limits when consuming “optimistic” updates. (ethereum.github.io)
- For IBC stacks, fuzz ICS‑23 existence and non‑existence proofs across store prefixes and path derivations (ICS‑24). Verify client rejects mismatched multistore paths and malformed spec objects. (docs.cosmos.network)
- Initialization and upgrade gates
- Spin testnets from a pre‑upgrade snapshot; attempt a migration that temporarily sets a permissive root or bypass flag. Ensure two‑man rule + timelock + post‑deployment invariant checks detect and block (Nomad lesson). (itpro.com)
- Require “two‑step” withdrawals for OP Stack bridges (prove then finalize) and verify the on‑L1 proof window is enforced (7‑day default). (optimism.io)
- Multisig/MPC hardening drills
- Simulate signer churn: rotate 1/3 of signers via HSMs and measure time‑to‑recover while maintaining threshold. Benchmark signing under degraded quorum.
- Validate emergency circuit breakers: manually “curse”/pause cross‑chain messaging and uncurse with documented operator runbooks (Chainlink CCIP RMN cursing mechanism). (docs.chain.link)
- Run tabletop “7‑of‑10 stolen” scenarios: can you freeze pools and arrest settlement within minutes? Orbit showed why. (coindesk.com)
- Finality windows and censorship resistance
- For Ethereum light‑client consumers, require finalized checkpoints for mints/releases; document exceptions with explicit value caps and notify risk. Rehearse sync‑committee edge cases; track EIP‑7657 proposals for slashing malicious sync‑committee messages. (ethereum.github.io)
- For optimistic bridges, confirm challenge windows ≥ 7 days with challenger redundancy; shorter windows materially raise risk. (github.com)
- Cross‑chain accounting invariants
- Enforce “inflow == outflow” invariants across chains in realtime monitors; flag any delta beyond fees/slippage and auto‑trip a rate‑limit or pause. This alone would have caught multiple historical incidents. (arxiv.org)
- Rate limiting and circuit breakers (Cosmos IBC)
- Wrap ICS‑20 with rate‑limit middleware; set daily net flow thresholds per channel/denom (e.g., 5–10% of supply), with whitelist bypass for governance‑approved ops. Test timeouts/rollback accounting. (ibc.cosmos.network)
- Replay and domain separation
- Enforce EIP‑155 chainId on every signed message and EIP‑712 domain separation where applicable; fail tests on zero/incorrect chainId. (eip.info)
Emerging controls you should adopt in 2025
- Ethereum sync‑committee light clients for bridges
- Use beacon‑chain light client “finality updates” as your security root, not just block depth heuristics. Sync committees rotate every ~27 hours (8,192 slots) and sign headers with aggregated BLS; applications can subscribe to finality/optimistic updates at the P2P level. (ethereum.org)
- Practical tip: expose a policy toggle to restrict high‑value paths to finalized updates only; allow optimistic only for low‑value idempotent messages (e.g., governance reads). (ethereum.github.io)
- ZK light‑client verification to reduce trust in committees and multisigs
- Systems like Telepathy run a zkSNARK‑verified Ethereum light client on destination chains; messages are accepted only if a succinct proof verifies the sync‑committee signed the header. This reduces reliance on permissioned validators/guardians. (docs.telepathy.xyz)
- Adoption is moving from pilots to production integrations (e.g., Gnosis bridge hardening; Wormhole collaborating on an Ethereum ZK light client). Ensure your architecture can plug a ZK LC as a drop‑in verifier. (outposts.io)
- ERC‑7683 cross‑chain intents to standardize relayer flows
- ERC‑7683 defines common order structs and settlement interfaces so “fillers/relayers” can share infrastructure—reducing bespoke, insecure relayer logic. If you run an intent‑based bridge or cross‑chain DEX, align to 7683 to inherit maturing filler networks and monitoring. (eips.ethereum.org)
- CCIP defense‑in‑depth patterns
- Chainlink’s CCIP ships a Risk Management Network (RMN) running independent client code and an on‑chain “curse” to halt message processing on anomalies; map equivalent controls in your architecture (separate codebases, kill switches, phased rollouts with explicit “blessed” roots). (docs.chain.link)
- IBC rate‑limit middleware as a standard breaker
- If you run Cosmos SDK or IBC‑connected chains, load the rate‑limit middleware around ICS‑20 to bound daily net flows; use governor‑controlled thresholds per channel/denom to localize the blast radius of any single exploit. (ibc.cosmos.network)
Case studies to weaponize your tests
-
BNB Chain Token Hub (Oct 2022): Exploiters forged cross‑chain messages accepted by a proof‑verification library; sequence enforcement initially thwarted some attempts (“sequence not in order”), but two forged 1M BNB mints landed. Your test: attempt height/sequence skew replays; assert full Merkle‑to‑root verification against trusted headers. (nansen.ai)
-
Nomad (Aug 2022): A routine upgrade left the “trusted root” effectively 0x00, autoproving messages. Your test: fuzz upgrade/migration with uninitialized/zeroed fields; enforce defense‑in‑depth: timelocks, smoke tests on canary contracts, and post‑deploy invariants that fail open only to “paused” states. (itpro.com)
-
Wormhole (Feb 2022): Lack of strict account checks permitted spoofed guardian signature verification on Solana; test for strict account list validation and explicit system account checks wherever applicable. (protos.com)
-
Orbit Bridge (Dec 31, 2023–Jan 1, 2024): Seven of ten signers compromised; the attacker simply authorized withdrawals. Your test: validate multisig provenance (HSMs, air‑gapped initialization), continuous key rotation, signer geographic and org diversity, and automated rate‑limited outflow. (coindesk.com)
Practical test recipes and configurations
- Finality gating (Ethereum)
- Contract policy: require LightClientFinalityUpdate receipts before mint/release; otherwise cap transfers to a small, configurable daily limit and route via a pending queue until finality. Reference Altair light‑client update types and their gossip topics when building indexers. (ethereum.github.io)
- IBC proof fuzzing
- Generate ICS‑23 proofs for existence and non‑existence across multiple store prefixes; mutate length/prefix fields and validate rejection. Patch levels post‑2022 advisories should detect forged absence proofs; automate as a CI job. (forum.cosmos.network)
- Rate‑limit middleware defaults (Cosmos)
- As a starting policy: 24‑hour windows; 5–10% threshold per channel/denom; whitelist governance addresses; confirm state rollbacks adjust counters correctly on timeout. Keep limits transparent in on‑chain params. (pkg.go.dev)
- OP‑Stack two‑step withdrawals
- Require “prove” on L1 within an hour of eligibility; enforce 7‑day challenge delay before finalize; notify users that both proof and finalization incur L1 gas. Test that the challenge path is operational by injecting a known‑bad state root on a local devnet and observing the challenger response. (docs.optimism.io)
- Replay protection
- Reject any signed cross‑chain message lacking chainId or with a mismatched domain per EIP‑155/EIP‑712; regression‑test against chain forks in staging. (eip.info)
Monitoring that actually catches cross‑chain exploits
-
End‑to‑end accounting SLOs
- Alert when net minted on destination minus net locked/burned on source exceeds configured bounds. Research shows such invariants detect every known attack in reviewed datasets. (arxiv.org)
-
Relayer and light‑client liveness
- For IBC, Hermes exposes Prometheus metrics; set SLOs for client update lag and packet backlog, and alerts on misbehaviour submissions. (github.com)
-
Circuit breakers and kill switches
- Implement automatic “pause” on invariant breach; for CCIP‑style systems, automate RMN‑triggered cursing. (docs.chain.link)
-
Defender‑grade watchtowers
- Use OpenZeppelin Defender Monitors/Sentinels to watch for unusual outflows, role changes, or pauser invocations, with escalation to workflows executing risk‑off actions. (docs.openzeppelin.com)
Governance and upgrade hygiene
-
Security councils with timelocks
- Adopt well‑documented emergency vs. non‑emergency powers, with >7‑day exit windows for non‑emergency upgrades (e.g., Arbitrum’s 9‑of‑12 council + timelock). (docs.arbitrum.foundation)
-
Challenge windows ≥ 7 days
- Industry practice for OP rollups is 7 days; shorter periods materially raise risk that fraud can avoid detection during censorship. (docs.optimism.io)
-
Staged rollouts of risk‑critical components
- CCIP’s phased deployments mark merkle roots as “blessed” until the independent RMN is online; emulate this pattern and clearly document service responsibility. (docs.chain.link)
Build with the right primitives
-
Prefer proofs over parties: A ZK or Tendermint‑style light client reduces dependence on small validator sets. If you must rely on relayers/guardians, diversify implementations/clients and add slashing or economic stake for misbehavior where possible. (ibc.cosmos.network)
-
Standardize relayer interfaces: ERC‑7683 reduces bespoke filler networks and enables shared monitoring across ecosystems. (eips.ethereum.org)
-
Add coarse safety valves: Rate‑limit middleware on IBC; role‑segregated pausers/cursors on EVM; explicit “value caps” for non‑final messages. (ibc.cosmos.network)
What a 7Block Labs red‑team engagement looks like
-
Architecture teardown
- Map trust boundaries (keys, committees, proofs). Identify where “finality” is inferred vs. verified. Align bridge class with risk frameworks and DA/exit‑window assumptions. (crosschainriskframework.github.io)
-
Exploit simulation battery
- Proof forgery, stale‑height replays, zero‑root initialization, signer churn and quorum outage, censorship during challenge windows, and end‑to‑end accounting drift.
-
Adversarial operations drills
- Keys in HSMs/KMS with rotation; geo/org diversity; documented recovery for lost keys; simulated compromise with timed “halts.”
-
Monitoring deliverables
- Cross‑chain invariant monitors, Hermes/relayer liveness dashboards, light‑client sync lag alarms, and auto‑pause runbooks.
-
“No‑go” criteria
- No finality gating for high‑value mints/releases; no replay/domain separation; single‑client relayer reliance without RMN‑like diversity; no rate‑limits on value flow.
Quick win checklist for decision‑makers
- Enforce finality for high‑value actions; cap value for optimistic paths. (ethereum.github.io)
- Integrate ZK light clients (where available) or Tendermint IBC light clients; plan migration paths away from permissioned multisigs. (ibc.cosmos.network)
- Standardize relayer flows to ERC‑7683; avoid custom fillers. (eips.ethereum.org)
- Add rate‑limit middleware (Cosmos) or equivalent circuit‑breaker logic (EVM/CCIP). (ibc.cosmos.network)
- Instrument end‑to‑end accounting; trip automatic pauses on drift. (arxiv.org)
- Keep 7‑day challenge windows and documented, tested challenger roles. (docs.optimism.io)
- Enforce EIP‑155/EIP‑712 replay/domain separation everywhere. (eip.info)
Closing thought
Cross‑chain is where your system’s weakest assumption gets compounded. Red‑team it like your solvency depends on it—because it does. With finalized headers (not just depth), standardized intent/relayer flows, ZK‑verified light clients, and coarse circuit breakers, you can build cross‑chain systems that degrade safely under attack instead of failing catastrophically.
If you want a battle‑tested audit plan tailored to your stack, our protocol security team at 7Block Labs can help you run these drills before your users do.
References and further reading
- BNB Chain Token Hub exploit analyses. (nansen.ai)
- Nomad exploit post‑mortems and explainers. (itpro.com)
- Orbit Chain/Orbit Bridge key compromise coverage. (coindesk.com)
- Ethereum light client sync protocol and updates. (ethereum.github.io)
- Ethereum.org light client explainer (sync committees). (ethereum.org)
- EIP‑7657 sync‑committee slashings (draft). (eips.ethereum.org)
- Telepathy zk light client docs and integrations. (docs.telepathy.xyz)
- Wormhole–Succinct ZK light client collaboration. (wormhole.foundation)
- ERC‑7683 Cross‑Chain Intents standard. (eips.ethereum.org)
- CCIP Risk Management Network and cursing. (docs.chain.link)
- IBC ICS‑23 proofs and rate‑limit middleware. (docs.cosmos.network)
- Accounting‑based bridge defenses. (arxiv.org)
- OP Stack standard bridge and two‑step withdrawals. (docs.optimism.io)
- Replay protection (EIP‑155) and domain separation (EIP‑712). (eip.info)
Like what you're reading? Let's build together.
Get a free 30‑minute consultation with our engineering team.

