Vulnerability Taxonomy

12 major categories | 40+ sub-types | Mapped to SWC Registry & OWASP Smart Contract Top 10 | 54 sourced claims

Frequency × Impact Matrix

Vulnerability positioning

Position indicates relative frequency of exploitation (x-axis) versus financial impact per incident (y-axis). The top-right quadrant — high frequency and high impact — represents the most dangerous categories.

↑ Financial Impact (per incident)
↕ High Impact / Low Freq
Bridge Exploits
$100M–$625M per incident
~15–20 major incidents total
Architectural root cause
⚠ High Impact / High Freq
Access Control Flash Loan + Oracle
Access Control: $953M in 2024 alone
Flash Loan+Oracle: 50+ incidents, $2B+
Highest risk quadrant
Low Impact / Low Freq
Front-running / MEV
Per-victim losses small
Systemic but diffuse
Private mempools mitigate
↑ High Freq / Low Impact Now
Integer Arithmetic
Historically high frequency
Solidity 0.8.0 (Dec 2020)
largely eliminated this class
Low Frequency →
High Frequency →
← Frequency of Exploitation →

All 12 Vulnerability Categories

Click any row to expand
A Reentrancy SWC-107
Critical Freq: Medium (declining) ~$137M net documented

The foundational Ethereum vulnerability. A contract makes an external call before updating its own state, allowing a malicious contract to call back into the original function and repeat the withdrawal/action before the balance is decremented. First exploited at scale in The DAO (2016, $60M) and reappeared in Cream Finance August 2021 (ERC-777 callback, $25M) and Curve Finance July 2023 (compiler-introduced guard failure, $47–73M).

Sub-types: Classic (single-function), Cross-function (two state-sharing functions), Cross-contract (between separate contracts), Read-only (view functions used in balance calculations). Read-only reentrancy is the hardest variant to detect.

  • Slither — reentrancy-eth, reentrancy-no-eth detectors (high precision)
  • Mythril — symbolic execution finds recursive call paths
  • Echidna — property testing can catch state inconsistencies
  • Read-only reentrancy requires manual review or custom Slither detectors
  • Checks-Effects-Interactions (CEI) pattern — always update state before external calls
  • OpenZeppelin ReentrancyGuard (nonReentrant modifier)
  • Transient storage reentrancy locks (EIP-1153, available Solidity 0.8.24+)
  • Avoid ERC-777 tokens in accounting-sensitive contexts
Key incident: Curve Finance (Jul 2023)

The Curve exploit was caused not by developer error but by a bug in the Vyper compiler that incorrectly implemented reentrancy guards in certain versions. The contracts were written correctly; the compiled bytecode was not. This establishes toolchain trust as a required security surface.

B Integer Arithmetic Errors SWC-101
High Freq: Low (post-Solidity 0.8) ~$50M+ historically

Integer overflow and underflow occur when arithmetic operations produce values outside the valid range of the integer type. Pre-Solidity 0.8.0, all arithmetic silently wrapped around (e.g., uint256(0) - 1 = 2^256 - 1). This enabled attacks like the BeautyChain token exploit and Uranium Finance ($50M, 2021 — a fork that copied an off-by-one in balance comparison).

Solidity 0.8.0 (December 2020) introduced automatic revert on overflow/underflow, eliminating this class for standard arithmetic. Residual risks remain via: unchecked blocks (explicitly opted out), type casting (downcasting from uint256 to uint128 can truncate silently), and precision loss from integer division (rounding down always, accumulates errors).

  • Slither — tautology, dangerous-strict-equalities
  • Mythril — integer overflow detection (pre-0.8 contracts)
  • Aderyn — detects unsafe casting patterns
  • Manual review of all unchecked blocks required
  • Use Solidity 0.8+ (free, automatic protection for standard arithmetic)
  • Document and audit every unchecked block with inline proof
  • Use SafeCast library for type downcasts
  • Test precision loss with edge-case fuzz inputs (Foundry / Echidna)
C Access Control Failures SWC-100/105
Critical Freq: High (growing) $953M in 2024 alone

The highest-dollar-impact category in 2024, accounting for $953.2M in documented losses that year alone. Encompasses missing function modifiers (onlyOwner, onlyRole), unprotected initializer functions (especially in upgradeable/proxy contracts), tx.origin authentication bypass, improper role management, and constructor visibility bugs (historical).

Notable cases: Parity Wallet #1 (2017, $30M — initWallet() publicly callable), Poly Network (2021, $611M — privilege escalation across chain-specific contract roles). Private key compromise (Ronin $625M, Harmony $100M, Bybit $1.4B) is access control failure at the operational/key-management layer, not the code layer.

  • Slither — missing-zero-check, unprotected-upgrade, suicidal
  • Aderyn — unprotected functions, missing access modifiers
  • Mythril — symbolic execution reaches privileged functions
  • Manual review essential for role management design
  • OpenZeppelin Ownable / AccessControl for all admin functions
  • Multisig (Gnosis Safe) for all privileged operations
  • Never use tx.origin for authentication
  • Initialize all proxy contracts in the same transaction as deployment
  • Hardware wallet + independent calldata verification for signers
Operational vs. Code Access Control

Code-level access control tools (Slither, audits) detect missing function modifiers effectively. They cannot detect that a valid key holder's private key was stolen by social engineering, malware, or supply chain attack. Multisig, hardware wallets, and independent transaction verification are the only mitigations for operational access control failures — which now account for the majority of total loss value.

D Oracle Price Manipulation OWASP SC06
Critical Freq: High (declining) $800M–$1.2B cumulative

DeFi protocols must know the price of assets to function. When that price is sourced from a manipulable on-chain mechanism — particularly a Uniswap v2 spot price readable in the same transaction — attackers can use flash loans to transiently inflate or deflate the price, then exploit the mispriced protocol before restoring the price and repaying the loan.

40+ oracle manipulation incidents occurred in 2022 alone, causing $403M+ in losses. Major cases: bZx (2020, $954K — first demonstration), Harvest Finance (2020, $34M), Cream Finance October 2021 ($130M, yUSD price pump), Mango Markets (2022, $117M — self-pump without flash loan), Alpha Finance (2021, $37.5M).

  • Audit review of price source implementation
  • Slither — custom queries for getReserves() patterns
  • Echidna — invariant that price cannot jump X% in one tx
  • Hard to detect automatically; requires economic modeling
  • Never use DEX spot price as primary oracle
  • Chainlink decentralized oracle with staleness check (updatedAt within 1 hour)
  • Uniswap v3 TWAP minimum 30-minute window on >$50M liquidity pool
  • Circuit breaker: pause if oracles diverge >3%
  • MakerDAO Oracle Security Module (1-hour delay)
E Business Logic Errors OWASP SC07
High Freq: High (dominant 2023+) ~25% of 2024 losses

Business logic bugs do not have a syntactic footprint that automated tools can detect without formal specifications. The code is valid Solidity; it simply does not implement the intended protocol behavior. Subcategories: incorrect accounting, off-by-one errors, reward calculation errors, fee-on-transfer token assumptions (protocol assumes tokens transfer 1:1 but they have built-in fees), and rebasing token accounting errors.

Euler Finance's donateToReserves() — the function that enabled the $197M exploit — was correct Solidity. Its exploitation required understanding its economic interaction with the liquidation mechanism. Pickle Finance (2020, $19M) was exploited via a fake "jar" contract exploiting missing input validation on the controller.

  • Formal verification (Certora Prover) — most effective
  • Echidna / Foundry invariant tests — catches violations of protocol invariants
  • Domain-expert manual audit — business logic context required
  • Automated tools largely ineffective without specifications
  • Write protocol invariants before code; test them with fuzzers
  • Certora formal verification for core accounting primitives
  • Token compatibility: explicitly test fee-on-transfer and rebasing tokens
  • Competitive audit (Code4rena, Sherlock) finds edge cases manual audits miss
F Flash Loan Attacks OWASP SC09
Critical Freq: High (50+ documented) $2B+ cumulative (as amplifier)

Flash loans allow borrowing unlimited capital within a single Ethereum transaction with zero collateral, as long as the loan is repaid before the transaction ends. They do not create vulnerabilities; they amplify pre-existing economic design flaws. Every flash loan attack has a root vulnerability (spot price oracle, governance voting, accounting error) that would exist even without flash loans — just requiring more capital to exploit.

Flash loans are net positive for the ecosystem: they enable efficient arbitrage, liquidations, and debt refinancing. The attack enablement is a secondary effect of democratizing large capital access. Removing flash loans would not remove vulnerabilities — it would require attackers to have real capital.

  • No automated detection of flash-loan-exploitable designs
  • Economic modeling required to identify exploitable price windows
  • Echidna can test: "can a single address move price X% in one tx?"
  • Protocol economic design review by DeFi specialists
  • Primary: fix the root vulnerability (oracle, governance, accounting)
  • TWAP oracles defeat same-block price manipulation
  • ERC20Votes snapshot defeats flash-loan governance attacks
  • 48–72 hour governance timelocks make flash loan governance impractical
  • Reentrancy guards prevent recursive flash loan callback exploits
G Front-Running & MEV SWC-114
Medium Freq: Very High (ongoing) Small per-victim; large aggregate

Ethereum's transparent mempool allows searchers (bots) to observe pending transactions and insert their own transactions ahead (front-running), behind (back-running), or around (sandwich attacks) the target. Maximal Extractable Value (MEV) is the total value extractable by reordering, inserting, or censoring transactions within blocks.

MEV is not always malicious: arbitrage MEV tightens price spreads. But sandwich attacks directly harm users by inflating the price of an asset the victim is buying, executing the buy, then selling back — all within a single block. Per-victim losses are small but aggregate to millions per day.

  • Slither — tx-origin, front-running patterns
  • MEV-aware protocol review (manual)
  • Simulate sandwich attacks against protocol actions
  • Private mempool (Flashbots Protect, MEV Blocker) — >80% sandwich prevention
  • Tight slippage tolerance on swaps
  • CoW Protocol batch auctions (single clearing price eliminates sandwiching)
  • Commit-reveal schemes for sensitive operations
  • TWAMM for large orders (spread across many blocks)
H External Call Risks SWC-104/112
High Freq: Medium Varies widely

Any call from one contract to another is an external call that may fail, behave unexpectedly, or introduce reentrancy. Key sub-types: unchecked return values (ignoring failed transfer() calls), calls to arbitrary user-supplied contract addresses, delegatecall misuse (executing code in the context of the calling contract, which can corrupt storage), and gas griefing (forcing a call to consume more gas than budgeted, causing downstream failures).

  • Slither — unchecked-send, arbitrary-send, controlled-delegatecall
  • Mythril — detects delegatecall to user-controlled addresses
  • Manual review of all delegatecall usage
  • Always check return values of low-level calls
  • Never delegatecall to user-supplied addresses
  • Use call instead of transfer/send (gas-safe)
  • Limit external call targets to whitelisted, audited contracts
I Token Standard Violations ERC-20/777
High Freq: Medium ~$25M+ (Cream Aug 2021)

Many ERC-20 tokens deviate from the standard in ways that break protocol accounting assumptions. "Weird ERC-20" tokens include: fee-on-transfer tokens (protocol receives less than it sent), rebasing tokens (balance changes without transfer events), missing return values, and ERC-777 tokens (include transfer hooks that re-enter calling contracts — exploited in Cream Finance August 2021).

  • Audit review: test protocol against fee-on-transfer tokens
  • Slither — incorrect-equality for balance assumptions
  • Foundry fork tests with real mainnet token contracts
  • Use balance-before/after pattern for token transfers
  • Avoid ERC-777 in lending/vault contexts or apply reentrancy guard
  • Token whitelist with explicit compatibility testing
  • Reference: d-xo/weird-erc20
J Proxy & Upgrade Vulnerabilities SWC-112
Critical Freq: Medium (growing) Catastrophic when exploited

Proxy patterns (transparent proxy, UUPS, Diamond) allow upgradeable contracts but introduce storage collision risks (if proxy and implementation use overlapping storage slots, one can overwrite the other's critical variables), uninitialized proxy contracts (open to hostile initialization), and malicious upgrade risk (admin can push any new implementation).

The Parity Wallet frozen funds ($150M, 2017) demonstrate storage + initialization failure on a library used via delegatecall. EIP-1967 pseudo-random storage slots largely resolve storage collision for standard proxy patterns but require careful implementation.

  • Slither — uninitialized-local, unprotected-upgrade
  • OpenZeppelin Upgrades Plugin — detects storage layout violations
  • Manual review of storage slot assignments vs. EIP-1967
  • Use OpenZeppelin UUPS or Transparent Proxy patterns (audited)
  • Initialize implementation contracts in the deployment transaction
  • Timelock on all upgrade transactions (minimum 48 hours)
  • Multi-sig control of upgrade authority
  • EIP-1967 storage slots for implementation address
K Governance & DAO Attacks OWASP SC09
Critical Freq: Low–Medium $182M (Beanstalk)

Governance attacks exploit the mechanisms by which DAOs make decisions. Flash loan governance attacks (Beanstalk, $182M) manufacture voting supermajorities within a single transaction using borrowed tokens. Slow-accumulation attacks (Build Finance, 2022) acquire governance tokens over time at market prices, then vote to extract treasury value. Social engineering attacks (Tornado Cash, 2023) submit malicious proposals that appear legitimate to voters.

  • Audit review of governance token voting power accounting
  • Check: can voting power be acquired and used within one transaction?
  • Simulate flash loan governance attacks against the protocol
  • Monitor for anomalous governance token accumulation
  • ERC20Votes snapshot: measure voting power at proposal creation block, not execution
  • 48–72 hour timelock between proposal passing and execution
  • High quorum requirements (>10% of circulating supply)
  • Remove emergencyCommit-style fast-path execution
  • Community proposal review process before voting
L Bridge & Cross-Chain Vulnerabilities OWASP SC05
Critical Freq: Low–Medium $2.3B+ documented

Cross-chain bridges are the single highest-value exploit category in blockchain history. Every bridge must solve the oracle problem: how does Chain B verify that an event occurred on Chain A? Solutions range from trusted multisig (fast but dangerous) to ZK proofs (secure but expensive). Multisig bridges — used by Ronin ($625M), Harmony ($100M), and early Wormhole — concentrate massive value behind small numbers of private keys, creating catastrophic-scale single points of failure.

Nomad's $190M exploit demonstrates initialization bug risk: a routine upgrade introduced a zero-hash sentinel value as a "valid root," making any transaction passable without proof. Once discovered, hundreds of actors copied the exploit simultaneously, draining the bridge in hours.

  • Audit of signature verification logic (Wormhole used deprecated Solana sysvar)
  • Review of initialization / upgrade paths for sentinel value bugs
  • Validator key management security review (operational, not code)
  • Bridge architecture review: trust model documentation required
  • ZK proof-based bridges eliminate trusted validator set (long-term solution)
  • Minimum 8-of-15 multisig with geographically/organizationally diverse signers
  • 24-hour timelock on withdrawals exceeding threshold
  • Audit all upgrade transactions separately from initial code audit
  • Monitor for anomalous withdrawal patterns (circuit breaker)
Long-Term Solution: ZK Bridges

ZK-proof-based bridges verify cross-chain events using cryptographic proofs of the source chain's consensus. No trusted validators, no key management, no social engineering surface. Security reduces to ZK proof system soundness and verifier contract correctness. As of 2026, ZK bridges are operational but not yet deployed at the scale of hacked multisig bridges. Trajectory: dominant architecture within 3–5 years as proof generation costs decline.

Solidity Security Improvement Timeline

Which version fixed which vulnerability class
0.4.x (early) — 2015–2017
Initial releases
No overflow protection. Function visibility optional (defaults public). Constructor named as contract function.
0.4.22 — April 2018
Security fix
constructor keyword introduced — eliminates SWC-118 constructor naming bugs. Protocols misnamed their constructor as a regular function, allowing anyone to re-initialize the contract and claim ownership.
0.5.0 — November 2018
Major safety release
Function visibility required (eliminates SWC-100 accidental public exposure). Explicit calldata/memory required. msg.value in non-payable functions disallowed.
0.6.0 — January 2020
Inheritance clarity
virtual and override keywords — clearer inheritance, reduces unintended function overriding. receive() and fallback() split into explicit functions.
0.8.0 — December 2020 ★ Watershed
Most important security release
Automatic revert on integer overflow/underflow — eliminates SWC-101 for all standard arithmetic. unchecked keyword for explicit opt-out. Effectively ended integer overflow as a primary attack class.
0.8.4 — April 2021
Gas optimization
Custom errors — cheaper than string revert messages; enables structured error handling.
0.8.16 — August 2022
Bugfix
ABI re-encoding fix for zeroing of dynamic tuple components — prevents subtle data corruption in complex calldata.
0.8.24 — January 2024
Cancun/Dencun support
Transient storage (tstore/tload, EIP-1153) — enables gas-efficient reentrancy locks that auto-clear per transaction. Potential to simplify ReentrancyGuard.
EIP-6780 — Dencun (March 2024)
EVM-level change
SELFDESTRUCT now only works in the same transaction as contract creation — effectively eliminates SWC-106 unprotected self-destruct on deployed contracts. Parity Wallet-style attacks become impossible for new contracts.
Vulnerability Classes Fixed vs. Remaining
Vulnerability Status Fixed In
Constructor naming bug (SWC-118)Fixed0.4.22
Accidental public functions (SWC-100)Fixed0.5.0
Integer overflow/underflow (SWC-101)Largely fixed0.8.0
SELFDESTRUCT on deployed contractsFixedEIP-6780
Overflow in unchecked blocksResidual riskManual review
Type casting overflowResidual riskSafeCast lib
Reentrancy (all variants)UnaddressedCEI + guards
Access control failuresUnaddressedOZ patterns
Oracle manipulationUnaddressedChainlink/TWAP
Flash loan economic attacksUnaddressedProtocol design
Bridge / cross-chainUnaddressedZK bridges (emerging)
Logic errorsUnaddressedFormal verification
Proxy storage collisionPartially mitigatedEIP-1967

Solidity has fixed syntactically detectable vulnerability classes. Economic, architectural, and operational vulnerability classes require tooling, process, and protocol design solutions — the language cannot enforce these.