Anatomy of cross-chain bridge exploits
Bridges concentrate value behind a verification step that most users never see. A taxonomy of how that step has failed in public incidents, from key compromise to forged proofs, and what each failure implies for design.
- Written by
- Quantix Research, Cross-Chain Security
- Published
- Reading time
- 6 minutes
- Category
- Incident Analysis
Technical analysis. Built from the public sources in the bibliography. Incident details are as reported there; no new discovery is claimed.

Contents
- Why bridges concentrate risk
- A reference model of a bridge
- Failure class 1: the keys
- Failure class 2: verification code
- Failure class 3: configuration and upgrades
- Failure class 4: message handling
- Five incidents side by side
- Containment: limiting what one failure can take
- Conclusions
- Recommendations
- Bibliography
A cross-chain bridge has to convince one blockchain that something happened on another. Neither chain can observe the other directly, so every bridge relies on a verification step: a set of signers, a light client, an optimistic challenge period or a cryptographic proof. Whatever value the bridge holds is protected by that step and by the code around it.
Bridge incidents have been among the largest losses in the industry. This analysis groups well-documented public incidents by which part of the verification path failed, using the projects’ own reports and published technical analyses, and draws out what each failure class implies for design and review. The incident details below are summaries of those sources, which are listed in the bibliography.
Why bridges concentrate risk
In the common lock-and-mint design, assets deposited on a source chain are held in escrow, and a wrapped representation is minted on the destination chain. The escrow accumulates the value of every outstanding wrapped token, so a single flaw can release all of it. Wrapped tokens are also used as collateral elsewhere, which spreads the consequences of a bridge failure to protocols that never interacted with the bridge directly.
The ethereum.org overview of bridges describes the basic trade-off: trusted bridges depend on an external set of operators, while trust-minimised bridges depend on the correctness of on-chain verification of the other chain’s consensus. Each moves the risk rather than removing it.
A reference model of a bridge
The model has five stages: a deposit on the source chain, observation and attestation off-chain, verification of the attestation on the destination chain, decoding and execution of the message, and release of the asset. Failure can occur at any of them. The four failure classes below cover the incidents we examine; they are not an exhaustive taxonomy.
Failure class 1: the keys
When verification consists of checking that a threshold of known signers approved a message, the bridge is exactly as secure as the keys. Two incidents illustrate how that threshold has been met by an attacker.
Ronin (March 2022). According to Ronin’s community alert, the bridge required five of nine validator signatures. The attacker obtained five validator private keys: four belonging to Sky Mavis and one to the Axie DAO validator. The Axie DAO had allowlisted Sky Mavis to sign on its behalf in November 2021; the arrangement was discontinued in December 2021 but the access was never revoked. The withdrawals were valid by the bridge’s rules, and the breach was discovered six days later. The threshold was subsequently raised to eight of nine.
Harmony Horizon (June 2022). Published analyses report that the bridge’s multisig required only two of five signatures, and that the attacker obtained and decrypted two keys despite passphrase and key-management protections. The project later raised the threshold to four of five.
The common lessons are about independence. A threshold of five of nine provides little protection if one organisation can produce five signatures, and a threshold of two of five is low however the keys are held.
Failure class 2: verification code
When the keys are sound, the code that checks their signatures, or checks a proof, becomes the target.
Wormhole (February 2022). Wormhole’s incident report describes how the attacker bypassed guardian signature verification in the Solana program: its verify_signatures function did not assert that the account supplied as the instructions sysvar really was that sysvar, so the attacker passed a crafted look-alike. With verification bypassed, the attacker had the program accept a message authorising the mint of 120,000 wrapped ether on Solana without a corresponding deposit. The failure is an instance of a Solana-specific class, missing account address checks, discussed in our Solana primer.
BSC Token Hub (October 2022). Technical analyses of the incident describe a flaw in the IAVL Merkle proof verification used by the bridge between BNB Beacon Chain and BNB Smart Chain: the verifier did not include one attribute of a path node when recomputing the root, so a proof could be modified to carry a forged payload and still verify against a legitimate root. The attacker, who first registered as a relayer, used forged proofs to have the bridge release two million BNB.
Verification code is cryptographic plumbing written in an ordinary programming language, and it fails in ordinary ways: an unchecked account, an ignored field, a library function used outside its assumptions.
Failure class 3: configuration and upgrades
Nomad (August 2022). Nomad’s root cause analysis attributes the incident to an implementation bug that caused the Replica contract to fail to authenticate messages properly. The widely reported mechanism is that an upgrade initialised the contract so that the zero hash was treated as a trusted root; because messages that had never been proven also mapped to the zero value, any message passed the check. Once the first exploit transaction was public, many other addresses copied it with their own recipient.
The lesson is that verification is not only code but state. A correct verifier initialised with the wrong trusted root, validator set or threshold is an incorrect verifier. Upgrades and initialisation transactions deserve the same review as the contracts they configure.
Failure class 4: message handling
After verification, a handler decodes the message and acts on it. Errors here include accepting the same message twice, failing to bind a message to the destination chain or contract, decoding fields ambiguously, and letting a message call arbitrary targets with the bridge’s privileges. These failures do not require breaking the verification layer at all. Replay and domain binding are covered in detail in signature replay across EVM chains, and the cross-chain message replay case study walks through a worked example.
Five incidents side by side
| Incident | Date | Failure class | What failed | Control that would have limited it |
|---|---|---|---|---|
| Wormhole | Feb 2022 | Verification code | Signature verification relied on an account whose address was not checked | Account address checks; mint rate limits |
| Ronin | Mar 2022 | Keys | 5 of 9 keys held or reachable by one organisation; stale allowlist | Independent signers; access reviews; outflow monitoring |
| Harmony Horizon | Jun 2022 | Keys | 2 of 5 threshold; two keys obtained | Higher threshold; isolated key storage |
| Nomad | Aug 2022 | Configuration | Zero hash accepted as a trusted root after an upgrade | Initialisation review; invariant tests on the verifier |
| BSC Token Hub | Oct 2022 | Verification code | Proof verifier ignored a node attribute when recomputing the root | Proof verifier fuzzing; release rate limits |
One control appears in every row: limiting how much can leave the bridge in a given period. It does not prevent any of the failures, but it caps the damage of all of them.
Containment: limiting what one failure can take
Because every verification design has failed somewhere, mature bridges add defences that assume verification might be wrong. Rate limits bound outflow per asset and per window. Large transfers can be delayed and held for review. Independent watchers can compare messages on the destination chain with events on the source chain and pause the bridge if a message has no matching deposit. Each of these turns a total loss into a partial one, and gives a human time to act.
// Illustrative outflow limiter for the release side of a bridge.// A failure upstream (keys, verification, configuration) can still release funds,// but only up to a bounded amount per window, which buys time to respond.contract ReleaseLimiter { uint256 public immutable capacity; // max tokens released per window uint256 public immutable refillPerSec; // capacity / window length uint256 public available; uint64 public lastUpdate; function _consume(uint256 amount) internal { uint256 elapsed = block.timestamp - lastUpdate; available = Math.min(capacity, available + elapsed * refillPerSec); lastUpdate = uint64(block.timestamp); if (amount > available) revert RateLimited(amount, available); // queue for review instead available -= amount; }}Conclusions
The public record shows bridges failing at every stage of the verification path: the signer keys, the code that checks signatures and proofs, the configuration that tells that code what to trust, and the handlers that act on verified messages. No verification design is immune, and each one shifts risk to a different component.
The consistent lesson is defence in depth around verification: independent signers, reviewed configuration, fuzzed verifiers, strict message binding, and outflow controls that assume all of the above might fail.
Recommendations
Bridge designers
- Distribute signing across independent organisations and infrastructure, and review allowlists and delegations on a schedule.
- Treat verifier initialisation and upgrades as security-critical changes with their own review and tests.
- Add per-asset outflow limits and delayed release for large transfers.
Operators
- Run an independent watcher that matches every destination message to a source event, and alert on mismatches within minutes.
- Monitor escrow balances against outstanding wrapped supply.
Reviewers and integrators
- Fuzz proof and signature verifiers with malformed inputs, not only valid ones.
- Before accepting wrapped assets as collateral, ask what limits the loss if the bridge fails.
The Arbalest Bridge and Axeline Bridge research assessments apply these questions to two bridge designs modelled by Quantix researchers.
Bibliography
Primary sources: standards, official documentation, incident reports and papers.
- 1Community Alert: Ronin Validators Compromised(opens in a new tab)Ronin (Sky Mavis), March 2022
- 2Wormhole Incident Report 02/02/22(opens in a new tab)Wormhole
- 3Nomad Bridge Hack: Root Cause Analysis(opens in a new tab)Nomad
- 4Hack Analysis: Binance Bridge, October 2022(opens in a new tab)Immunefi
- 5Explained: The Harmony Horizon Bridge Hack(opens in a new tab)Halborn
- 6Introduction to blockchain bridges(opens in a new tab)ethereum.org
Applied on this site
Assessments, case studies and tools that apply this publication.





