Need Help Securing Your Smart Contracts?
Get expert guidance on smart contract security and vulnerability prevention.
Curated List
Quick Take
The biggest smart contract exploits include Ronin Bridge ($625M — validator centralization), Poly Network ($611M — cross-chain message verification), Wormhole ($320M — Solana account ownership verification), Nomad Bridge ($190M — upgrade bug with zero root), Beanstalk ($182M — flash loan governance attack), Euler Finance ($197M — donation attack), and The DAO ($60M — reentrancy). Key lessons: multi-sig decentralization, cross-chain cryptographic verification, post-upgrade invariant tests, historical balance snapshots, CEI pattern, and multi-source oracles.
#1 — Ronin Bridge ($625M, March 2022)
Vulnerability: Insufficient validator decentralization. Sky Mavis controlled 4 of 9 validators; attacker compromised 5 total.
Lesson: No single entity should control >30% of validators. Temporary access grants need automated revocation.
#2 — Poly Network ($611M, August 2021 — recovered)
Vulnerability: Cross-chain message verification bypass. Attacker forged messages from one chain to another, claiming admin privileges.
Lesson: Cross-chain message origin must be cryptographically verified, not just checked against a privileged address.
#3 — FTX ($8B+, November 2022 — not a smart contract exploit)
Not technically a smart contract exploit — fraud. Customer funds used by affiliated trading firm. No smart contract vulnerability.
Lesson: Cryptographic proof of reserves (Merkle proof) is the only technical verification that customer funds are not misappropriated.
#4 — Wormhole ($320M, February 2022)
Vulnerability: Solana-specific: failed to verify account ownership before accepting a signature as valid. Attacker created a fake system account.
Lesson: Solana's account model requires explicit owner verification — every account's program owner must be checked. EVM engineers moving to Solana must learn these platform-specific requirements.
#5 — Nomad Bridge ($190M, August 2022)
Vulnerability: Upgrade bug: trusted root initialized to zero bytes. Any message valid against zero root = all messages valid.
Lesson: Post-upgrade invariant tests are mandatory. Zero-value inputs must be explicitly rejected. Never assume values are set correctly after an upgrade.
#6 — Beanstalk ($182M, April 2022)
Vulnerability: Flash loan governance attack + no timelock. Attacker borrowed $1B in governance tokens, passed malicious proposal in same block, drained treasury.
Lesson: EIP-712 historical balance snapshot for voting (prevents flash loan acquisition). 48-hour minimum timelock on all governance execution.
#7 — Mango Markets ($114M, October 2022 — Solana)
Vulnerability: Price oracle manipulation. Attacker manipulated MNGO spot price on Mango's internal market, used inflated MNGO as collateral to drain treasury.
Lesson: Do not use your own protocol's internal spot price as a collateral oracle. Chainlink TWAP for any collateral price.
#8 — Euler Finance ($197M, March 2023 — recovered)
Vulnerability: Donation attack exploiting a missing check. Attacker could donate tokens to create a special debt state not anticipated by the health factor check.
Lesson: Formal specification of all state invariants + fuzz testing against those invariants. The vulnerability was a logical edge case not covered by standard tests.
#9 — Compound Oracle Hack ($85M, November 2020)
Vulnerability: DAI price oracle on Coinbase Pro spike (DAI temporarily priced at $1.34 due to liquidity crunch). Compound used Coinbase Pro as an oracle source. Attackers liquidated positions that were 'undercollateralized' at the inflated DAI price.
Lesson: Multi-source oracle with deviation check. Never use a single exchange spot price as an oracle. TWAP provides manipulation resistance.
#10 — The DAO ($60M, June 2016 — ETH genesis of reentrancy awareness)
Vulnerability: Reentrancy. The DAO sent ETH before updating the sender's balance — attacker's contract repeatedly re-entered the withdraw function before balance reached zero.
Lesson: Checks-Effects-Interactions pattern. Update all state before external calls. ReentrancyGuard on all withdrawal functions. This 2016 exploit defined the security pattern that all subsequent contracts have followed.