Reproduced Exploit
Burve — Reserve share overflows due to strict reward calculation
1. ReserveLib.deposit mints shares as amount * shares / balance. 2. Dust residuals leave balance tiny while amount > 0 still mints. 3. Repeated inflation drives shares near type(uint256).max. 4. Next deposit panics on shares += minted → permanent DoS of trim paths.
Chain
Other
Category
untagged
Date
Apr 2025
Source
AuditVault
EVM Playground
Source-level debugger — step opcodes and Solidity in sync
The attack is replayed in an in-browser EVM preloaded with the exact dumped fork state. The execution tree shows every call; step by Solidity line or by opcode across all depths — source, Stack, Memory, Storage, Balances (native / ERC-20 / NFT), Transient storage and Return value stay in sync. Click a tree node, opcode, or source line to jump. No backend, no live RPC.
Source & credit. Reproduction of a public audit finding curated by AuditVault — the original finding: 56958-h-9-reserve-share-overflows-due-to-too-strict-reward-calcula. Standalone Foundry PoC and full write-up: 56958-h-9-reserve-share-overflows-due-to-too-strict-reward-calcula_exp in the
evm-hack-registrymirror.
Vulnerability classes: integer-bounds · underflow · reward-calculation · fix-arithmetic
Reproduction: self-contained Foundry PoC, offline, forge-std only. Full trace: output.txt.
Key info#
| Impact | HIGH — reserve share counter overflows → trim/deposit DoS |
| Protocol | Burve ReserveLib |
| Vulnerable code | shares = (amount * reserve.shares[idx]) / balance with no floors |
| Bug class | Share inflation / overflow from dust deposits |
| Finding | Sherlock 2025-04-burve · #56958 · H-9 · TessKimy |
| Report | sherlock-audit/2025-04-burve-judging |
| Fix | itos-finance/Burve#78 |
| Compiler | ^0.8.24 (PoC) |
TL;DR#
ReserveLib.depositmints shares asamount * shares / balance.- Dust residuals leave
balancetiny whileamount > 0still mints. - Repeated inflation drives
sharesneartype(uint256).max. - Next deposit panics on
shares += minted→ permanent DoS of trim paths.
The vulnerable code#
shares = (balance == 0)
? amount * SHARE_RESOLUTION
: (amount * reserve.shares[idx]) / balance; // @> VULN
reserve.shares[idx] += shares;
Fix: minimum balance/amount before minting reserve shares.
Diagrams#
Impact#
Total share overflow corrupts reserve accounting; functions that deposit to reserve revert forever.
Sources#
- AuditVault finding #56958
- Sherlock issue #452
- Source:
sherlock-audit/2025-04-burve@44cba36Reserve.sol
Sources & further analysis#
Reproductions & code
- Standalone PoC + full trace: 56958-h-9-reserve-share-overflows-due-to-too-strict-reward-calcula_exp (evm-hack-registry mirror).
- AuditVault finding: 56958-h-9-reserve-share-overflows-due-to-too-strict-reward-calcula.
Alerts & third-party analyses
These dashboards index community alerts tweets, post-mortems, and independent write-ups. Reach them through the protocol name above to cross-check this reproduction against other analyses.