
Case study of the 2022 Nomad Bridge exploit: initialization bug draining ~$190M
Five-phase Solidity audit workflow covering recon, static analysis, manual review, verification, and reporting.
Impact-versus-likelihood rubric to classify Solidity findings from informational through critical severity.
Cross-chain bridge security guidance for message verification, replay prevention, and validator risk.
SmartBugs curated dataset — 143 annotated vulnerable Solidity contracts organized by DASP vulnerability category
Fee-on-transfer and deflationary token integration pitfalls that break protocol accounting.
- Contract performs integer arithmetic (division, fee calculations, reward distributions)
- Contract verifies ECDSA signatures for authorization
- Contract is intended for deployment on an EVM-compatible chain other than Ethereum mainnet (zkSync Era, Arbitrum, Optimism, Polygon, BNB Chain, etc.)
- Contract declares state variables, local variables, function parameters, or imports that are never referenced
Case study of the 2023 Euler Finance exploit: donation attack draining ~$197M
Case study of the 2017 Parity Multisig Freeze: delegatecall + self-destruct exploit freezing ~$150M
Case study of the 2023 Level Finance exploit: referral code reentrancy draining ~$1.1M
Case study of the 2022 Mango Markets exploit: oracle price manipulation draining ~$114M
Case study of the 2022 Rari Fuse exploit: reentrancy in Compound fork draining ~$80M
Cyfrin best-practice checklist focused on proxy, upgradeability, and versioning concerns
Cyfrin DeFi checklist covering attacker mindset and protocol-level DeFi primitives
Case study of the 2021 Poly Network exploit: cross-chain relay manipulation draining ~$600M
Cyfrin DeFi checklist covering integrations, token standards, and ecosystem-specific risks
Cyfrin best-practice checklist focused on runtime heuristics, cross-chain concerns, and timelock controls
Case study of the 2022 Ronin Bridge exploit: compromised validator keys draining ~$625M
Comprehensive Solidity audit checklist spanning access control, reentrancy, oracles, and integrations.
AMM and DEX security patterns covering pricing, LP accounting, MEV, and swap invariants.
Reference guide to major DeFi exploits and reproducible Foundry workflows from DeFiHackLabs
Staking security guidance for reward accounting, lock periods, timing attacks, and withdrawals.
Security review framework for lending and borrowing systems including liquidations and accounting.
Governance security patterns for voting, timelocks, proposal execution, and quorum safety.
- Contract has a dynamic array in storage
Cyfrin audit checklist — gas optimization and efficiency items for Solidity smart contracts
Flash-loan attack mechanics, exploit archetypes, and mitigations for capital-amplified threats.
- Deployable contract uses a floating or range pragma (e.g., `pragma solidity ^0.8.0`, `pragma solidity >=0.8.0`)
Governance vulnerabilities including flash-loan voting, timelock bypass, quorum manipulation, and unprotected proposals
- Contract relays or forwards calls on behalf of users (meta-transactions, multisig execution, relayer patterns)
Front-running and MEV vulnerabilities including missing slippage protection, deadline manipulation, predictable randomness, and commit-reveal weaknesses
- Contract uses multiple inheritance (`is ContractA, ContractB, ...`)
- `msg.value` is referenced inside a loop (`for`, `while`) or in a function called multiple times within a single external call
Protocol parameters are accepted without min/max constraints, allowing invalid or unsafe runtime states.
- Contract claims to implement a standard (ERC20, ERC721, ERC1155, etc.) but deviates from the specification
Proxy pattern vulnerabilities including storage collision, uninitialized proxy, and function selector clash
Reentrancy attack patterns, real incidents, and defensive coding checks for Solidity protocols.
Contract uses ECDSA signatures for authorization or deduplication
- Contract makes a low-level `.call()` to an untrusted or user-specified address
- Contract uses `ecrecover` directly (not via OpenZeppelin's ECDSA library)
Contract uses low-level calls: .call(), .send(), or .delegatecall()
- Contract uses ECDSA signatures for authorization, authentication, or message verification
Non-standard ERC20 behaviors, integration pitfalls, and token-handling safeguards.
Critical addresses are set to address(0), causing hard reverts, fund loss paths, or permanently broken flows.
- Contract uses `.call()`, `.delegatecall()`, `.staticcall()`, or `.send()` for external interactions
Specialist profile for line-by-line assumption extraction without relying on named bug classes.
Specialist profile for extracting conservation laws and state couplings, then searching for violating paths.
Specialist profile for rounding, scale, decimal, downcast, and arithmetic accounting edge cases.
Specialist profile for mechanically applying the attack-vector deck and classifying vectors as skip, drop, or investigate.
Specialist profile for stale reads, parameter divergence, branch ordering, callbacks, and cross-transaction interleavings.
Specialist profile for libraries, helpers, base contracts, adapters, encoders, wrappers, and integration glue.
Specialist profile for roles, modifiers, initialization, upgrade authority, and guard consistency review.
Specialist profile for external dependencies, token behavior, incentives, oracle assumptions, and value-flow attacks.
ERC-4626 integrations are exploited by manipulating share price or conversion state to mint, borrow, or redeem at distorted rates.
Oracle manipulation techniques, case studies, and secure pricing integration controls for DeFi.
Case study of the 2022 Beanstalk exploit: flash loan + governance manipulation draining ~$182M
Case study of the 2016 DAO hack: reentrancy exploit draining ~$60M
- Contract uses `assert()` statements
Cross-chain bridge vulnerabilities including missing chain ID validation, cross-chain replay attacks, unverified bridge messages, and hardcoded bridge addresses
Contract uses tx.origin for authorization or access control checks (e.g., require(tx.origin == owner))
- Functions or state variables are declared without an explicit visibility specifier
- Contract iterates over a dynamic array or mapping whose size can grow unboundedly
- Contract uses `abi.encodePacked()` to encode data before hashing (typically with `keccak256`)
Denial-of-service attacks through unexpected reverts in external calls
- Solidity version <0.4.22 where constructors are named functions matching the contract name
Case study of the 2021 Cream Finance exploit: flash loan + oracle manipulation draining ~$130M
Case study of the 2020 Harvest Finance exploit: flash loan + price manipulation draining ~$34M
Access-control exploit patterns and secure authorization approaches for privileged Solidity functions.
- Contract is compiled with a Solidity version significantly behind the latest stable release
Integer overflow and underflow vulnerabilities in Solidity contracts
Case study of the 2022 Wormhole Bridge exploit: missing signature validation draining ~$320M
Reusable smart contract audit report structure with severity IDs, finding sections, and appendices.
Case study of the 2023 Curve reentrancy exploit: Vyper compiler bug draining ~$70M
Case study of the 2020 bZx exploits: oracle manipulation via flash loans draining ~$1M
- Contract uses `extcodesize` or `address.code.length` to check whether an address is an EOA vs. a contract
Contract uses delegatecall with potentially untrusted callee
Protocol logic bug patterns, exploit examples, and invariant-driven review strategies.
- Contract uses loops with boundary conditions, comparison operators at thresholds, or array index calculations
Gas optimization patterns including unbounded loops, storage writes in loops, external calls in loops, and unchecked array growth
Asset/share systems drift out of sync across views, transfers, or reward logic, enabling value leakage, bypasses, or protocol lockups.
- Contract inherits from one or more parent contracts
Changing live protocol parameters without synchronizing accrued state creates hindsight effects, unfair allocations, or broken invariants.
- Solidity version <0.5.0
Unsafe ERC20 transfer and approve calls that silently fail on non-standard tokens.
- Contract uses Solidity functions, keywords, or language features that have been deprecated or removed
- Sensitive data (passwords, secrets, private keys, game answers) is stored in contract storage
- Contract generates "random" values using on-chain data: `block.timestamp`, `blockhash`, `block.difficulty` / `block.prevrandao`, `block.number`, or combinations thereof
Compact catalogue of concrete Solidity vulnerability vectors with detection cues and false-positive guards.