OWASP Smart Contract Top 10 (2026)

Updated October 27, 2026

The OWASP Smart Contract Top 10 ranks the ten smart contract vulnerabilities that OWASP expects to matter most in the coming year. The 2026 list is forward-looking. OWASP built its ordering from 2025 incident data and a practitioner survey: 122 deduplicated smart contract incidents and about $905.4M in losses where a smart contract was involved (OWASP).

This page takes each item in turn. For each one you get a short explanation, the official OWASP page, a real hack from the Guardix DeFi hacks list where one exists, and a test you can write against your own contracts.

List

2026 list and 2025 numbering

The 2026 edition renumbers most items. Older audit reports, the Guardix Web3 security checklist and the DeFi hacks list use the 2025 numbers, so this table maps one to the other.

2026 list and 2025 numbering
SC01:2026Access Control VulnerabilitiesSC01:2025 Access Control Vulnerabilities
SC02:2026Business Logic VulnerabilitiesSC03:2025 Logic Errors
SC03:2026Price Oracle ManipulationSC02:2025 Price Oracle Manipulation
SC04:2026Flash Loan-Facilitated AttacksSC07:2025 Flash Loan Attacks
SC05:2026Lack of Input ValidationSC04:2025 Lack of Input Validation
SC06:2026Unchecked External CallsSC06:2025 Unchecked External Calls
SC07:2026Arithmetic Errors (Rounding & Precision)Not in the 2025 list
SC08:2026Reentrancy AttacksSC05:2025 Reentrancy
SC09:2026Integer Overflow and UnderflowSC08:2025 Integer Overflow and Underflow
SC10:2026Proxy & Upgradeability VulnerabilitiesNot in the 2025 list

Two 2025 items are not in the 2026 ten: SC09:2025 Insecure Randomness and SC10:2025 Denial Of Service. Denial of service and griefing through gas, loops and state bloat now appears among the 2026 honourable mentions, along with front-running and MEV, governance attacks, and signature-scheme flaws (OWASP).

SC01

SC01: Access control vulnerabilities

Access control fails when a user or role that should not have a privilege can still call the function behind it. OWASP lists missing modifiers or role checks, wrong assumptions about msg.sender through delegate calls or meta-transactions, unprotected initializers, and mistaken trusted addresses. Combined with a logic or upgrade bug, one missing check can hand over the whole protocol.

Official page: SC01:2026 Access Control Vulnerabilities.

Real case. In October 2026 AlpsCon AI Trade Hub lost 152,809 USDC on BNB Chain. Part of the cause was an access gate that trusted the default Hardhat test account, whose private key is public. An older case in the same list is Poly Network, which lost $611M in 2021 when a cross-chain message called a privileged function.

How to test. List every external and public function that changes state or moves funds. Write one test per function that calls it from an unprivileged address and expects a revert. Then call each initializer a second time and confirm it reverts too. The access control section of the checklist has the full list.

SC02

SC02: Business logic vulnerabilities

Business logic bugs are design-level flaws. The code does what it says, but what it says breaks the protocol's economics, for example in lending, AMM, reward or governance logic. OWASP names inconsistent accounting, deposit, withdraw and claim sequences that break invariants, and rewards claimed without a matching stake.

Official page: SC02:2026 Business Logic Vulnerabilities.

Real case. UNCX Vesting V2 lost about $807,609 in October 2026 because its cancel path reused an old share record. In the same month a new deposit at AlpsCon received rewards paid out before it existed. For an older case, see the Euler Finance exploit replay.

How to test. Write the protocol's invariants down, then turn each into an invariant or fuzz test. OWASP gives one example: "Total value withdrawn cannot exceed total deposits + realized yield." Let the fuzzer call deposit, withdraw, claim and cancel in random order and check the invariant after every call. See the business logic section of the checklist.

SC03

SC03: Price oracle manipulation

A contract that reads a price from a source an attacker can move will value assets wrongly. Thin pools, spot prices from pool reserves and short TWAP windows are the usual weak points. The result is often borrowing against inflated collateral or liquidating healthy positions.

Official page: SC03:2026 Price Oracle Manipulation.

Real case. Nostra on Starknet lost about $3.5M in September 2026 after a thin-pool price was blended into its oracle. No flash loan was needed. Moonwell on Base took $1.78M of bad debt in February 2026 because its oracle used the cbETH/ETH ratio, about 1.12, as a USD price.

How to test. Write a test that trades a large amount in the pool your price comes from, then reads your price. If it moved, an attacker can move it. Feed an old timestamp to the price feed and confirm the call reverts. The flash loan attack page has a vulnerable lender, a fixed version and a Foundry test that drains the first and shows the second rejects the attack.

SC04

SC04: Flash loan-facilitated attacks

A flash loan lends any amount without collateral, as long as it is repaid in the same transaction. The loan is not the bug. It is a multiplier that turns a small flaw in pricing, accounting or rounding into a large loss, because an attacker can use huge capital for one block at almost no cost.

Official page: SC04:2026 Flash Loan-Facilitated Attacks.

Real case. Makina lost $4.13M in January 2026 when a flash loan moved the Curve pool states its share price depended on. BiFi had 165,575 USDT drained in October 2026. Its interest formula multiplied idle blocks by a rate that a 40.5M USDT flash loan pushed up.

How to test. Simulate a flash-loan-sized trade before your function runs, inside one transaction, and assert the caller cannot end with a profit. OWASP also recommends fuzzing for profitable multi-call sequences. The flash loan attack page shows the attack step by step, and the checklist has a section on flash loans and same-block manipulation.

SC05

SC05: Lack of input validation

The contract accepts values it should reject, from users, admins or cross-chain messages. OWASP lists fees above 100%, zero amounts, max uint values, malformed addresses, and signed payloads without a nonce, expiry or chain ID check. In 2025 it often appeared as a contributing factor rather than the only cause (OWASP).

Official page: SC05:2026 Lack of Input Validation.

Real case. Dango lost $1.9M in April 2026, most of it later recovered, because its contracts did not check that donation amounts were positive.

How to test. Call every external function with edge values: zero, the type's maximum, address(0), mismatched array lengths and out-of-range fees. Every call that should fail must revert. For signed messages, replay a valid signature with changed fields and on another chain ID. See the checklist sections on input validation and signatures.

SC06

SC06: Unchecked external calls

An external call can fail, revert or call back into your contract. If the contract ignores a false return value or does not plan for a callback, its state ends up wrong. OWASP notes this is rarely the only root cause, but it often enables reentrancy, logic exploits and accounting errors.

Official page: SC06:2026 Unchecked External Calls.

Real case. The DeFi hacks list has no 2026 entry where an unchecked call was the main cause.

How to test. Search the code for low-level call, delegatecall and token transfers, and check that each return value is handled. Then point the contract at a mock that reverts, a mock that returns false, and an ERC-20 that returns nothing. The contract should revert or recover cleanly in each case. See the external calls section of the checklist.

SC07

SC07: Arithmetic errors (rounding and precision)

This item covers math that does not overflow but still gives the wrong answer: rounding bias, precision loss over several steps, and formulas that break at zero total supply, at the first deposit or at extreme ratios. It matters most in share, interest and AMM calculations. OWASP keeps overflow and underflow as a separate item, SC09.

Official page: SC07:2026 Arithmetic Errors (Rounding & Precision).

Real case. The DeFi hacks list has no entry caused mainly by a rounding or precision error.

How to test. Fuzz deposits and withdrawals of tiny amounts and at extreme ratios, starting from an empty vault. Assert that a deposit followed by a withdrawal never returns more than went in. OWASP asks teams to prove that repeated interactions cannot create free value. The checklist covers rounding direction under business logic.

SC08

SC08: Reentrancy attacks

Reentrancy happens when a contract makes an external call before it updates its own state, and the callee calls back in while the old state is still visible. The classic case is a withdrawal that sends funds before setting the balance to zero. Variants include cross-function, read-only and token-callback reentrancy.

Official page: SC08:2026 Reentrancy Attacks.

Real case. Solv lost $2.73M (38 SolvBTC) in March 2026. A token callback fired during mint, before the books were balanced. 135 BRO went in and 567 million came out, looped 22 times.

How to test. Write a malicious contract that calls back into your contract from every hook it can reach: receive, ERC-721 and ERC-1155 receive hooks, and token callbacks. The reentrancy page has a vulnerable vault, fixed versions and a Foundry test that drains the vulnerable one. See also the reentrancy section of the checklist.

SC09

SC09: Integer overflow and underflow

An integer that goes past its maximum or below zero wraps around. Solidity 0.8 and later revert on overflow by default, so the risk now sits in unchecked blocks, inline assembly, contracts compiled with older versions, and chains with different integer rules (OWASP).

Official page: SC09:2026 Integer Overflow and Underflow.

Real case. Truebit lost $26.2M (8,535 ETH) in January 2026 to an unchecked integer overflow in a contract about five years old. The attacker minted over 240M TRU. OWASP's own SC09 example is Cetus on Sui, which lost $223M in May 2025 when an overflow check missed a path.

How to test. Search for unchecked, assembly and casts that shrink a number, such as uint128(x). Fuzz each of those paths with values near the type's limits. Find every deployed contract on a compiler older than 0.8 and give it its own review. See the arithmetic section of the checklist.

SC10

SC10: Proxy and upgradeability vulnerabilities

Upgradeable contracts add new ways to fail: an upgrade function anyone can call, an initializer that runs twice, an implementation contract left uninitialized, and storage slots that collide between versions. OWASP notes the overlap with SC01 but lists these separately because one bad upgrade affects the whole system.

Official page: SC10:2026 Proxy & Upgradeability Vulnerabilities.

Real case. Nomad Bridge lost $190M in August 2022. After a routine upgrade, its Replica contract was initialized with the zero root marked as trusted, so forged messages passed as valid (rekt).

How to test. From a random address, call initialize on the proxy and on the implementation contract, and expect both to revert. Call the upgrade function from a non-admin and expect a revert. Before each upgrade, compare storage layouts between the old and new versions, for example with forge inspect <Contract> storageLayout. See the upgrades and deployment section of the checklist.

SWC

SWC Registry and the OWASP Top 10

The SWC Registry is an older catalogue of smart contract weaknesses with numbered entries, such as SWC-107 Reentrancy and SWC-101 Integer Overflow and Underflow. Many audit reports and tools still cite SWC IDs.

The registry itself says its content "is no longer actively maintained" and "has not been thoroughly updated since 2020" (swcregistry.io). It points readers to the EEA EthTrust Security Levels and the OWASP Smart Contract Security Verification Standard for current guidance. Use SWC IDs to read older reports, and use the OWASP list for current priorities.

Check

How to check your code against the Top 10

Start with the tests above. They cover the patterns a scanner can find and the logic bugs it usually misses. The smart contract scanner comparison explains what pattern-based tools such as Slither and Mythril find and where they stop.

Guardix lists these risk classes on its pricing page: reentrancy, oracle and price manipulation, access control and privilege escalation, accounting and invariant drift, and unchecked external calls and return values. A pre-audit covers known vulnerability classes, logic bugs, and access-control and accounting issues. It costs $200 per audit for one repository at one commit and takes 2 to 10 hours, depending on code size. A pre-audit does not replace a manual audit. For questions, write to guardix@dome.net.

FAQ

FAQ

What is the OWASP Smart Contract Top 10?
A ranked list of the ten smart contract vulnerabilities OWASP expects to matter most in the coming year. The 2026 edition is based on 2025 incident data, 122 deduplicated incidents with about $905.4M in losses, and a practitioner survey.
What changed between the 2025 and 2026 lists?
Most items moved. Business logic rose from SC03 to SC02, oracle manipulation dropped from SC02 to SC03, and reentrancy moved from SC05 to SC08. Arithmetic errors (SC07) and proxy and upgradeability vulnerabilities (SC10) are new. Insecure randomness and denial of service left the ten.
What is the most common smart contract vulnerability?
OWASP ranks access control first, as SC01 in both the 2025 and 2026 lists. The ranking reflects OWASP's incident data and survey, not a simple count of bugs.
Is the SWC Registry still maintained?
No. The registry says its content is no longer actively maintained and has not been thoroughly updated since 2020. It points to the EEA EthTrust Security Levels and the OWASP SCSVS instead.
Does the OWASP Top 10 cover private key and multisig attacks?
No. The Top 10 covers smart contract code. OWASP keeps off-chain threats such as multisig hijacking, supply chain attacks, phishing and exchange breaches in a separate Alternate Top 15.
Can a scanner find all ten?
No. Pattern-based scanners catch direct cases such as some unchecked calls and simple reentrancy. Business logic, oracle and flash loan bugs depend on how the protocol works, so they need invariant tests, a one-transaction attack test or a manual review.

All vulnerability guides.