Reproduced Exploit
InfiniFi — Referencing the gateway balance in `increaseUnwindingEpochs` can DoS the function
1. LockedPositionTokens are transferable until used to vote. 2. Bob transfers his position tokens to the gateway. 3. Alice deposits her own shares and approves only her amount, then calls increaseUnwindingEpochs. 4. Controller reads balanceOf(gateway) (= Alice+Bob) and tries to burnFrom more than A…
Chain
Other
Category
untagged
Date
Mar 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: 55052-referencing-the-gateway-balance-in-lockingcontrollerincrease. Standalone Foundry PoC and full write-up: 55052-referencing-the-gateway-balance-in-lockingcontrollerincrease_exp in the
evm-hack-registrymirror.
Vulnerability classes: dos-resistance · dos/lockup · impact/dos/permanent
Reproduction: self-contained Foundry PoC with only
forge-std— no fork. output.txt · test/55052-…_exp.sol.
AuditVault taxonomy: lang/solidity · platform/spearbit · severity/high · genome: dos-resistance · dos/lockup · impact/dos/permanent
Key info#
| Impact | HIGH — blind transfers of locked-position tokens to the gateway DoS increaseUnwindingEpochs for everyone |
| Protocol | InfiniFi Contracts — LockingController.increaseUnwindingEpochs |
| Vulnerable code | Uses gateway's full balanceOf instead of the caller's share amount |
| Bug class | Wrong balance reference / transferable intermediate token |
| Finding | Spearbit — InfiniFi, March 2025 · #55052 · reporter R0bert |
| Report | InfiniFi-Spearbit-Security-Review-March-2025.pdf |
| Source | AuditVault |
| Fix | commit 708f8bf — pass balanceOf(msg.sender) from the gateway |
| Compiler | ^0.8.24 (PoC) |
TL;DR#
- LockedPositionTokens are transferable until used to vote.
- Bob transfers his position tokens to the gateway.
- Alice deposits her own shares and approves only her amount, then calls
increaseUnwindingEpochs. - Controller reads
balanceOf(gateway)(= Alice+Bob) and tries toburnFrommore than Alice approved → revert. Alice is DoSed.
Diagrams#
Impact#
Denial of service on epoch increases for all users while any third-party tokens sit on the gateway.
Sources#
- AuditVault #55052
- Spearbit InfiniFi March 2025
- Reduced LockingController.increaseUnwindingEpochs from the finding (fixed in 708f8bf)
Sources & further analysis#
Reproductions & code
- Standalone PoC + full trace: 55052-referencing-the-gateway-balance-in-lockingcontrollerincrease_exp (evm-hack-registry mirror).
- AuditVault finding: 55052-referencing-the-gateway-balance-in-lockingcontrollerincrease.
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.