Illustrated Guide

The Wormhole Bridge Hack: $325M Minted From Thin Air

In early 2022, the most valuable line of code in Solana was a signature check inside the Wormhole bridge. On February 2 it failed silently: an attacker convinced the bridge that a deposit had happened when none had, and minted 120,000 wETH — $325 million — out of thin air. This guide walks the whole story in frames: how the bridge's trust model worked, exactly which check was broken, the exploit replayed line by line in code, and the bailout that made every user whole.

10 minutes • 15 illustrated steps • Signature-check anatomy, on-chain evidence & the Foundry rebuild

Editorial Research & Chronological Archive

Independently synthesized and cross-verified by The Blockchain History Editorial Board using primary whitepapers, historical archives, and on-chain records.

Fact-checked Archive

What was the Wormhole bridge hack?

The Wormhole bridge hack was an exploit on February 2, 2022 in which an attacker forged a guardian-signature approval on Wormhole's Solana contract and minted 120,000 wrapped ETH (wETH) — about $325 million — without depositing anything. Wormhole is the bridge that moves ETH between Ethereum and Solana: real ETH gets locked on Ethereum, and wETH is minted on Solana, backed 1:1, once 13 of the bridge's 19 off-chain 'guardians' sign a proof of the deposit. A signature-verification flaw — the code checked signatures against a list the caller could spoof, via a deprecated Solana system function — let the attacker fabricate that proof out of thin air. They bridged 93,750 wETH back to Ethereum, draining real ETH from Wormhole's vault. Within about 24 hours, Jump Trading — the firm behind Wormhole — injected 120,000 ETH to re-back all wETH, making users whole in what became DeFi's largest self-funded bailout. In 2023, following a UK court order, most of the stolen ETH itself was recovered from the hacker.

Key Takeaways

  • Wormhole was the bridge between Ethereum and Solana: lock real ETH on one side, mint wrapped ETH (wETH) on the other, redeemable 1:1. By early 2022 more than 100,000 ether — roughly a quarter of a billion dollars — sat behind its contracts, and Solana DeFi used wETH as if it were the real thing.
  • Its entire security model was one check: 19 off-chain 'guardians' sign deposit proofs called VAAs, and the bridge mints when it sees 13 of their signatures. As the rebuild in this guide puts it, the signature check in step 3 is the entire security of the bridge.
  • On February 2, 2022, the check failed silently: the Solana-side code verified signatures against a caller-spoofable input — a deprecated Solana system function — so the attacker fabricated a guardian approval backed by 0.1 ETH and minted 120,000 wETH, about $325 million, from nothing.
  • The attacker (wallet 0x629e…796b, labeled 'Wormhole Network: Exploiter' on Etherscan, first funded via Tornado Cash) bridged 93,750 wETH back to Ethereum to drain real ETH from Wormhole's vault, per Elliptic; the suddenly-unbacked wETH across Solana DeFi triggered liquidation fears and SOL fell about 13.5%.
  • A $10 million on-chain whitehat bounty went unanswered; within about 24 hours Jump Trading injected 120,000 ETH to re-back all wETH 1:1 — DeFi's largest self-funded rescue — saving every user but raising an uncomfortable question about who bails out the next bridge.
  • In February 2023 a UK High Court order let the Oasis protocol alter its own contracts, and Jump counter-exploited the hacker's positions to recover the ~120,000 ETH — about $140 million by then. The code fix itself was one line: verify signatures against the guardian list the contract stores, never the one the caller supplies.

The Bridge That Held Solana's Ether

Before anything was stolen, understand what Wormhole promised — and why the whole Solana economy was leaning on one signature check.

  1. 1

    Solana's lifeline to Ethereum

    Wormhole was the pipe between two of crypto's biggest worlds. Deposit real ETH into its contract on Ethereum, and the bridge mints you wrapped ETH (wETH) on Solana, one to one — burn the wETH and you get the ETH back. By early 2022 that promise had made Wormhole Solana's most important bridge: more than 100,000 ether, roughly a quarter of a billion dollars, sat behind its contracts, and Solana DeFi priced its lending markets and liquidity pools in wETH as if it were the real thing. Every loan collateralized with wETH was, indirectly, collateralized by a single promise: no wETH gets minted unless the bridge sees a deposit it can truly verify.

    Presentation slide listing how the Wormhole bridge links Ethereum and Solana by locking real ETH on one side and minting wrapped ETH on the other
    The whole product in four bullets — and the last one is where it broke.
  2. 2

    19 watchers, 13 signatures, one guarantee

    How does the far side know a deposit really happened? It trusts Guardians — 19 off-chain watchers that observe each Ethereum deposit and sign a message attesting to it, called a VAA (Verified Action Approval). Hand the Solana-side bridge a VAA carrying 13 of the 19 signatures, and it mints your wrapped ether, no further questions. The video's diagram draws the whole religion in one line: the signature check in step 3 is the entire security of the bridge. No signatures, no mint; enough signatures, unconditional mint. Everything that follows — the theft, the fix, this whole page — flows from a single question the bridge had to answer correctly every single time: who decides what counts as a real signature?

    Flow diagram of the Wormhole trust model showing an ETH deposit on Ethereum, 19 guardians signing a VAA with 13 required, and the bridge minting wETH
    One diagram, one warning label: the check in step 3 is the entire security.

The Broken Check

The cryptography never failed. The bridge just asked the wrong question — and answered it with data the attacker controlled.

  1. 3

    The bug: it checked the wrong thing

    To be safe, the bridge must verify every signature against its own fixed list of real Guardians — a list no caller can touch. Wormhole's Solana program trusted an input the caller could control instead. The real-world version was a deprecated Solana built-in: the bridge used load_instruction_at, a function that reads another account's instructions without checking where that account comes from. Solana had replaced it with a checked version right before Wormhole deployed, but the bridge shipped with the old one. So the attacker stood up their own account imitating the system account, used it to feed the verification routine a forged signature set, and the bridge — believing it was reading Solana itself — accepted the result. The check passed, and it minted 120,000 wETH, unbacked.

    Slide titled The bug it checked the WRONG thing explaining how Wormhole's check trusted a spoofable input and minted 120,000 wETH unbacked
    Four bullets, one habit: trusting whatever the caller handed over.
  2. 4

    The trap inside the verification code

    The video's rebuild makes the flaw legible in a few lines. A guardian hashes the withdrawal details — who gets paid, how much, a nonce — into a digest and signs it with a 65-byte signature. The bridge calls recover(digest, sig), which returns the address that produced the signature. Crucially, recover never fails: it always returns some valid address. So the only real question is whether that address belongs to a guardian — and the vulnerable code answers it against claimedGuardians, a list handed in by whoever calls the function. The frame marks the exact line: require(_in(claimedGuardians, signer)) — the caller's set. The caller supplied both the signatures and the list they were judged against.

    Solidity code of the vulnerable Wormhole bridge showing require(_in(claimedGuardians, signer)) marked as the caller's set inside the receiveAndMint function
    The comment on line 33 says it plainly: the list comes from the caller, and is never checked against the real one.

The Heist, On Chain

February 2, 2022: the mint that should have been impossible, the cash-out that drained the vault, and the day Solana found out what its collateral was made of.

  1. 5

    The address Etherscan labels 'Wormhole Network: Exploiter'

    On February 2, 2022, the attacker ran the trick for real: a forged deposit attestation — signatures produced by an attacker-created account the bridge mistook for a Solana system account, holding all of 0.1 ETH of collateral — and the contract minted 120,000 wETH, about $325 million at the prices of the day. Etherscan now labels the attacker's address, 0x629e…796b, 'Wormhole Network: Exploiter' under a red warning banner, and shows the wallet was first funded from Tornado Cash. No deposit ever happened on Ethereum. The bridge was simply convinced that one had — because the attacker, not the Guardians, got to define what counted as proof.

    Etherscan page for attacker address 0x629e labeled Wormhole Network Exploiter under a red exploit warning banner with its transaction list below
    Black and white, right on the address page: the red banner names the crime.
  2. 6

    The whole con, on one recap card

    Fake IOUs are only worth what you can swap them for, and the attacker cashed out fast. Per blockchain-analytics firm Elliptic, 93,750 of the 120,000 minted wETH were bridged back to Ethereum in three transactions, redeeming real ether straight out of Wormhole's vault, while most of the rest — around another 36,000 worth — was swapped into USDC and SOL. The damage radiated outward instantly: all the wETH sitting in Solana's lending markets was suddenly an IOU for ether that didn't exist — the 'domino effect of now uncollateralized loans against Wormhole ETH,' as Paradigm's Georgios Konstantopoulos put it — and SOL fell about 13.5% in a day. The recap card in the frame compresses the con into three lines: mint on guardian signatures, trust the caller's set, mint 120,000 wETH from nothing.

    Recap slide summarizing the Wormhole hack: the bridge minted wrapped tokens on guardian signatures, trusted a caller-supplied set, and the attacker minted 120,000 wETH from nothing
    The heist in three bullets — the fourth bullet is the one nobody read closely enough.

Rebuilding the $325M Bug in Foundry

The only way to really understand this exploit is to run it. A minimal bridge, three acts, and a terminal that prints the whole crime.

  1. 7

    A tiny bridge, three acts

    The only way to really understand this bug is to watch it run. The video rebuilds a minimal version of the bridge in Foundry, the standard Ethereum development toolkit — a tiny contract that mints on 'guardian' signatures — and stages the exploit as three acts. Act one, the honest case: real guardians sign a genuine deposit and the mint works. Act two, the attack: the attacker signs with their own keys, calls them guardians, and mints a fortune from nothing. Act three, the fix: check against the real guardian set and the attack dies. Those same three acts played out on mainnet in February 2022 — with $325 million of real money standing in for the test ether.

    Slide outlining a Foundry rebuild of the Wormhole bridge in three acts: an honest mint, the attacker minting 120,000 from nothing, and the real-guardian-set fix
    The playbook for the next five frames: honest, attack, fix.
  2. 8

    Read the test before you run the attack

    Before running anything, the video reads the test — because the test file is the whole story in comments and asserts. Act one deploys the bridge with the real guardian set, has two of three guardians sign a legitimate 10-token deposit, and asserts the user actually receives their 10. Act two's comment is the exploit in one breath: signatures verified against the caller's set — the attacker passes their own keys in as 'guardians' and mints 120,000 wETH out of thin air; no deposit, and no bug in the signatures themselves, which are perfectly valid — just not from the real guardians. Act three points the same forged signatures at the fixed bridge and expects a revert: 'not a guardian.'

    Foundry test contract code showing ACT 1 honest deposit, ACT 2 attack passing the attacker's own keys as guardians, and ACT 3 expecting a not a guardian revert
    Three acts, written as comments before a single test runs.
  3. 9

    Act 1: the honest mint passes

    First, prove the bridge works when nobody cheats. The test builds a genuine 10 wETH withdrawal, hashes it into a digest, signs it with the real guardians' keys, and passes the signatures in alongside the real guardian list. The bridge verifies each signature against that list, counts them against its quorum, and mints exactly 10. The terminal prints the result: [PASS] test_1_honest — 'user minted (honest): 10.000…' — one passed, zero failed. This green baseline is what makes the next frame damning: in the attack, nothing about the cryptography changes. Same curve, same recover, same bridge. Only the list changes.

    Terminal output of forge test passing test_1_honest with the line user minted (honest): 10.000000000000000000 and a green suite result
    Green, as designed. Remember this output — the attack will look almost identical.
  4. 10

    Act 2: 120,000 wETH from nothing

    Now the attack — and notice how little changes. Same bridge, same digest, same function. The only difference: the signatures come from the attacker's own two keys, and the guardian list passed in contains those same two addresses. Every check still passes, because every signature is technically valid — recover returns the attacker's addresses, and they match the attacker's list. The terminal delivers the punchline: [PASS] test_2_attack — 'attacker MINTED (no deposit): 120000.000…' — suite green, 120,000 wrapped ether conjured out of thin air. That is the $325 million bug reproduced in milliseconds: the bridge had no way to tell the real Guardians from the ones the caller invented, because it never asked.

    Forge terminal output reading attacker MINTED (no deposit): 120000.000000000000000000 after the reproduced Wormhole bridge attack passes test_2_attack
    [PASS]. That's the problem — the forged mint passes every check that exists.

Act 3: The Fix, the Bailout, the Reckoning

One line of code kills the attack. Then a $10M bounty goes unanswered, Jump Trading writes the biggest check in DeFi history — and the ledger settles up two years later.

  1. 11

    Act 3: the one-word fix

    The fix is small enough to fit in a comment block, and the frame shows it side by side. Before (vulnerable): receiveAndMint took a claimedGuardians parameter — the list from the caller — and required each signer to be in it. After (fixed): the parameter is gone entirely; the function checks _in(guardians, signer), where guardians is the list the contract stored once at deployment and no caller can change. Same signatures, same recover, same quorum — the only change is who owns the list the signatures are measured against. As the video puts it: any time a contract checks trust against data the caller supplies, that's not security. It's a suggestion.

    BridgeFixed.sol code comment showing the only change from the vulnerable Wormhole bridge: the claimedGuardians parameter removed and the contract's own guardian list used
    THE ONLY CHANGE, says the comment — four lines that would have saved $325 million.
  2. 12

    The fix test: expect 'not a guardian'

    The fix gets its own test, and it does everything the attack did: same attacker, same self-made key set, same demand for 120,000 wrapped ether — all pointed at the fixed bridge. The difference is the expectation. This test wraps the call in vm.expectRevert(bytes("not a guardian")), telling Foundry that the correct outcome is rejection, then asserts the attacker's balance is still zero. If the signature check is pinned to the real, stored guardian set, the identical attack cannot mint so much as one wei. One moved word — claimedGuardians becomes guardians — and an entire class of exploit goes from 'prints money' to 'reverts.'

    Solidity test code for act 3 of the Wormhole rebuild using vm.expectRevert bytes not a guardian and asserting the attacker balance stays zero
    The attack, rewritten as an expectation of failure.
  3. 13

    The attack, rerun: revert, zero balance

    Run it and watch the same heist die. The identical forged signatures that minted a fortune a moment ago now bounce off the fixed bridge, and the terminal shows it: [PASS] test_3_fixed — 'attacker minted (fixed): 0.000000000000000000' — one passed, zero failed. The attack that conjured $325 million on mainnet in February 2022 has been reduced to a revert reason and a zero balance. That is the whole defense in one screenshot: pin the trusted set inside the contract, never accept it from the caller, and remember that a perfectly valid signature from the wrong signer is still an attack.

    Terminal proof that the fixed Wormhole bridge rejects the forged mint, showing PASS test_3_fixed and attacker minted (fixed): 0.000000000000000000
    Same attacker, same signatures — now a 0.000 balance and a green check.
  4. 14

    The $10M offer, and the check that made it whole

    The code was broken, but the ending wasn't — because someone decided to pay. Wormhole first tried diplomacy, broadcasting an on-chain message to the exploiter offering a $10 million whitehat bounty for the return of the minted wETH. No reply came. Within about 24 hours the hole was filled anyway: Jump Trading, the trading giant that had incubated Wormhole, injected 120,000 ETH so every wETH was backed 1:1 again — the largest self-funded rescue in DeFi history. Bankless, recording that week, cheered for the users being made whole and worried aloud about the precedent: a happy ending nobody should bank on, because there isn't always a Jump. The lesson card in the frame is the code version of the same story — verify against the right list, or someone richer than you pays for the wrong one.

    The lesson slide from the Wormhole hack breakdown: signature checks are only as good as what you check against, and a valid signature from the wrong signer is still an attack
    The lesson card from the rebuild — Wormhole learned it the expensive way, and Jump picked up the bill.
  5. 15

    Seven weeks later: Ronin, the mirror image

    The outro card promises 'Next: another hack, rebuilt' — and the next one was already scheduled. On March 23, 2022, seven weeks after Wormhole, attackers took the Ronin Bridge for $615 million, then the largest DeFi theft on record. The two hacks are mirror images. Wormhole died of a code flaw: nobody's key was stolen — the signatures were simply checked against the wrong list. Ronin died of social engineering: the code was fine, but the attackers befriended their way to 5 of 9 validator keys, and the threshold did the rest. Same wound both times — a bridge's trust assumptions, broken from a different side. The era after Wormhole brought mandatory audits, bug bounties, rate limits and redesigned proof systems, and the rule from the rebuild still sorts the survivors: pin the trusted set, and never let the caller tell you who the trusted are.

    Closing slide of the Wormhole hack teardown reading Next: another hack, rebuilt with the tagline Real theft. Real code. Real on-chain.
    "Next: another hack." Six weeks later it arrived, wearing Ronin's name.

Frequently Asked Questions

What was the Wormhole bridge hack?

A February 2, 2022 exploit in which an attacker forged a guardian-signature approval on Wormhole's Solana contract and minted 120,000 wrapped ETH (wETH) — about $325 million — without any deposit. Wormhole is the bridge between Ethereum and Solana: ETH is locked on Ethereum, and wETH is minted on Solana once 13 of 19 off-chain 'guardians' sign a proof. Because the signature check could be spoofed, the attacker minted fake wETH, then bridged 93,750 of it back to Ethereum to drain real ETH from Wormhole's vault. Jump Trading re-backed the bridge within about 24 hours, so wETH users were made whole.

What vulnerability did the Wormhole attacker exploit?

A signature-verification flaw, not broken cryptography. The Solana-side contract relied on load_instruction_at, a deprecated Solana system function that reads another account's instructions without verifying where the account comes from — Solana had shipped a checked replacement right before Wormhole deployed. The attacker created their own account imitating the system account and used it to feed the bridge a forged signature set. In code terms, the bridge verified signatures against a caller-supplied list instead of its own fixed guardian set — so signatures from the attacker's keys passed as if they came from the 19 real Guardians, of which 13 signatures were needed per approval.

Who hacked the Wormhole bridge?

Nobody knows. The attacker's Ethereum wallet, 0x629e7Da2…796b71A, is labeled 'Wormhole Network: Exploiter' on Etherscan and was first funded from Tornado Cash, but no individual or group has ever been credibly identified, and no arrest has been announced. That anonymity shaped the aftermath: Wormhole's $10 million on-chain whitehat bounty for the funds' return went unanswered, and the attacker's wallets were tracked in public for years while the stolen ETH sat largely still.

Did Wormhole get its money back?

In an unusual twist, mostly yes — twice. First, users were made whole within about 24 hours when Jump Trading injected 120,000 ETH to re-back all wETH 1:1; depositors never lost a cent. Second, in February 2023 a UK High Court order allowed the Oasis protocol to alter its own smart contracts, letting Jump counter-exploit the hacker's leveraged stETH positions and recover the ~120,000 stolen ETH — worth about $140 million by then, thanks to the 2023 rally. The recovered funds were reportedly handed to UK authorities. The original attacker has never been publicly identified.

Why did Jump Trading cover Wormhole's loss?

Jump wasn't a bystander — the trading firm had incubated Wormhole (acquiring bridge developer Certus One in 2020), so the bridge's solvency was effectively its own liability. Letting 120,000 unbacked wETH poison Solana's DeFi markets would have destroyed the protocol, hurt users who trusted it, and torched Jump's position and reputation in one afternoon. Paying was the cheapest exit from a cascade of liquidations. The move worked, but it became a cautionary tale: as Bankless put it that week, a happy ending funded by a deep-pocketed parent sets a precedent no decentralized system should promise — there isn't always a Jump.

Are cross-chain bridges safe after Wormhole?

Better, not safe. Wormhole proved bridges can die of code (a forged signature check); Ronin proved, seven weeks later, they can die of keys (5 of 9 validators socially engineered). Since 2022 the industry has leaned on mandatory audits, large bug bounties, withdrawal rate limits, and more decentralized guardian sets — and Wormhole itself kept operating and grew into one of the most-used bridge protocols. But a bridge is still a promise that two chains can agree on one truth, and someone controls that agreement. The durable lesson from the rebuild: verify against a trusted set the contract itself stores, never one the caller supplies — and treat any bridge deposit as a bet on whoever holds the keys.

Continue the Story

References

Extended Multimedia Reference

Visual sequences and chronologies in this guide cross-reference video documentation “The $325M Wormhole Hack: What Went Wrong and How to Prevent It” by 0xUnstuck.

Educational Archive & Risk Disclaimer

This illustrated guide is maintained strictly for educational, research, and historical documentation purposes. None of the materials constitute investment, financial, legal, or trading advice. Historical crisis and market events are documented from public archives. Digital assets involve significant risks.