Integer overflow, underflow and rounding bugs in disclosed reports

Solidity 0.8 removed the easy overflows. Precision loss, unchecked blocks and casting errors kept the class alive.

Reports indexed
54
Total paid
$180k
Critical
0
Largest payout
$180k

Built-in overflow checks retired the classic `balance -= amount` underflow, and the class immediately reappeared in three new forms. Explicit `unchecked` blocks added for gas savings reintroduce the original bug with none of the original excuse. Downcasts from `uint256` to `uint128` or `uint64` silently truncate. And on non-EVM chains, Rust release builds wrap on overflow unless the arithmetic is explicitly checked.

The higher-value findings in this class are rounding rather than wrapping. Integer division truncates toward zero, and a protocol that rounds in the user's favour on deposit and again on withdrawal leaks value on every cycle. Share-price vaults are the classic target: the first depositor inflates the share price so that later deposits round down to zero shares.

These bugs are quiet. They rarely revert, they rarely trip monitoring, and they are usually found by writing the invariant down and testing it at the boundaries.

What reviewers look for

  • `unchecked` blocks around arithmetic that depends on user input
  • Downcasts to smaller integer widths without a bound check
  • Division performed before multiplication in a fee or share calculation
  • Empty-vault share price paths and first-depositor inflation
  • Rust arithmetic without `checked_*` / `saturating_*` in release builds

Curated highlights

The largest disclosed payouts in this group, with our own summary of each. Every report links back to the original disclosure.

highInteger overflow/underflowMove$180k

Unchecked arithmetic in Move coin split enables balance underflow

A custom coin-splitting helper in a Move-based decentralized exchange implemented unsafe u128 downcasting that bypassed native Move checked arithmetic. Combined with a stale balance check preceding an internal callback, an attacker could request a swap amount exceeding their actual balance. The resulting u128 subtraction underflow truncated upon downcasting into a valid u64 value, crediting the attacker with an artificially inflated balance that could subsequently be drained from the exchange.

Move DEXhatsSep 27, 2023Open
mediumInteger overflow/underflowEVM-Solidity$0

Putty: Options with a small strike price will round down to 0 and can prevent assets to be withdrawn

The Putty protocol contains a vulnerability where certain ERC-20 tokens, which revert on zero-value transfers, can cause a Denial-of-Service during asset withdrawals. The issue occurs because the protocol's fee calculation uses integer division, which can round down to zero for small strike prices and low fee rates. When the contract attempts to transfer this zero-value fee to the protocol's treasury, the transaction reverts, permanently locking the user's assets within the vault.

Puttycode4renaAug 7, 2026Open
mediumInteger overflow/underflowEVM-Solidity$0

PoolTogether: Loss of precision leads to under-collateralized

PoolTogether's vault implementation incorrectly triggers an under-collateralized state due to rounding errors during yield vault interactions. When checking the solvency of the underlying assets, the protocol treats a 1 wei discrepancy—common in standard share-based accounting—as a genuine loss of capital. This flaw bricked the deposit functionality for users, effectively forcing the vault into a permanent withdrawal-only state despite no actual asset loss.

PoolTogethercode4renaAug 7, 2026Open
mediumInteger overflow/underflowEVM-Solidity$0

Putty: Put options are free of any fees

The Putty protocol contains a logic error where put options bypass the required fee collection mechanism upon exercise. While call options correctly deduct a designated fee, the logic for put options transfers the full strike amount to the exerciser without any fee deduction. This failure results in consistent revenue leakage for the protocol, as put options are currently processed free of charge.

Puttycode4renaAug 7, 2026Open
mediumInteger overflow/underflowEVM-Solidity$0

PoolTogether: Silent overflow could alter computation when calculating the `vaultPortion` in the `PrizePool` contract

The PrizePool contract in the PoolTogether V5 protocol contains an unsafe type conversion flaw that can lead to silent integer overflows. During the calculation of a vault's portion of prizes, contribution metrics returned as uint256 are cast to int256 without bound checks. If these contributions are sufficiently large, the overflow results in mathematically incorrect reward distribution, negatively impacting the prize yields for specific draws.

PoolTogethercode4renaAug 7, 2026Open
highInteger overflow/underflowEVM-Solidity$0

The Wildcat Protocol: User could withdraw more than supposed to, forcing last user withdraw to fail

In The Wildcat Protocol, withdrawal requests are batched and executed based on proportional interest scaling. When a market is closed, withdrawal requests within an active batch can be executed before all lenders have added their requests. A early withdrawer can execute at an outdated rate, while subsequent micro-withdrawals further alter precision and lower the batch rate, leaving insufficient unclaimed balance for remaining lenders. Consequently, the final user attempting to process their withdrawal experiences a transaction revert and permanent loss/locking of funds.

The Wildcat Protocolcode4renaOct 24, 2024Open

All reports in this group

Chains where this class shows up

Related vulnerability category pages