Skip to content
Quantix Security Labs
Technical analysis

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.

Illustration: two chains joined by a bridge with validator sets at each end; a forged message crosses and the destination vault releases its assets.
Contents
  1. Why bridges concentrate risk
  2. A reference model of a bridge
  3. Failure class 1: the keys
  4. Failure class 2: verification code
  5. Failure class 3: configuration and upgrades
  6. Failure class 4: message handling
  7. Five incidents side by side
  8. Containment: limiting what one failure can take
  9. Conclusions
  10. Recommendations
  11. 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

Where a lock-and-mint bridge can failA user deposits into a bridge escrow on the source chain, which emits a message. Off-chain validators or relayers attest to the message using signatures, a light client or a proof. On the destination chain a verifier checks the attestation, and a handler decodes the message and mints or releases the asset. Five numbered failure points: deposit spoofing, key compromise, verification bypass, a misconfigured trusted root, and replay or handler errors.Source chainOff-chain verificationDestination chainUserdeposits tokensBridge escrowlocks tokensemits a message1Validators, relayersobserve the source chainattest to messagesAttestationthreshold signatures,light client or ZK proof2Message verifierchecks signatures orthe proof against a rootMessage handlerdecodes and executesAssetminted or released3451Deposit or event spoofing on the source chain2Validator or signer key compromise (Ronin, Harmony Horizon)3Signature or proof verification bypass (Wormhole, BSC Token Hub)4Trusted root misconfigured during an upgrade (Nomad)5Message replay, decoding or handler logic errors
A generic lock-and-mint bridge. Numbered points mark where the public incidents discussed below failed.

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

IncidentDateFailure classWhat failedControl that would have limited it
WormholeFeb 2022Verification codeSignature verification relied on an account whose address was not checkedAccount address checks; mint rate limits
RoninMar 2022Keys5 of 9 keys held or reachable by one organisation; stale allowlistIndependent signers; access reviews; outflow monitoring
Harmony HorizonJun 2022Keys2 of 5 threshold; two keys obtainedHigher threshold; isolated key storage
NomadAug 2022ConfigurationZero hash accepted as a trusted root after an upgradeInitialisation review; invariant tests on the verifier
BSC Token HubOct 2022Verification codeProof verifier ignored a node attribute when recomputing the rootProof verifier fuzzing; release rate limits
Public bridge incidents grouped by failure class, summarised from the sources in the bibliography

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.

ReleaseLimiter.sol (illustrative)solidity
// 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

  1. Distribute signing across independent organisations and infrastructure, and review allowlists and delegations on a schedule.
  2. Treat verifier initialisation and upgrades as security-critical changes with their own review and tests.
  3. Add per-asset outflow limits and delayed release for large transfers.

Operators

  1. Run an independent watcher that matches every destination message to a source event, and alert on mismatches within minutes.
  2. Monitor escrow balances against outstanding wrapped supply.

Reviewers and integrators

  1. Fuzz proof and signature verifiers with malformed inputs, not only valid ones.
  2. 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.

  1. 1Community Alert: Ronin Validators Compromised(opens in a new tab)Ronin (Sky Mavis), March 2022
  2. 2Wormhole Incident Report 02/02/22(opens in a new tab)Wormhole
  3. 3Nomad Bridge Hack: Root Cause Analysis(opens in a new tab)Nomad
  4. 4Hack Analysis: Binance Bridge, October 2022(opens in a new tab)Immunefi
  5. 5Explained: The Harmony Horizon Bridge Hack(opens in a new tab)Halborn
  6. 6Introduction to blockchain bridges(opens in a new tab)ethereum.org

Applied on this site

Assessments, case studies and tools that apply this publication.

Want this question asked of your code?

Quantix reviewers apply the same reasoning to production systems. Share what you are building and when it ships.