Reproduced Exploit
Statusl: Attacker recovers their full staked principal via the paused-revert catch path while the S
Chain
Other
Category
untagged
Date
Jan 1970
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: 65325-malicious-actors-can-get-free-rewards-if-contract-gets-pause. Standalone Foundry PoC and full write-up: 65325-malicious-actors-can-get-free-rewards-if-contract-gets-pause_exp in the
evm-hack-registrymirror.
Vulnerability classes: vuln/theft · vuln/reward-accounting
Reproduction: a faithful minimal reproduction of the vulnerable finding — the vulnerable function is reproduced verbatim (marked
@>) with faithful minimal doubles; local deploy, no fork.
Root cause#
Attacker recovers their full staked principal via the paused-revert catch path while the StakeManager still counts the phantom stake, letting them drain 50 reward tokens from the pool for free at honest stakers' expense.
revert StakeVault__FailedToLeave();
}
}
} catch { // @> try/catch swallows StakeManager.leave() revert: vault returns staked tokens while the manager keeps counting the stake
if (lockUntil <= block.timestamp) {
depositedBalance = 0;
Why it's exploitable here#
Attacker recovers their full staked principal via the paused-revert catch path while the StakeManager still counts the phantom stake, letting them drain 50 reward tokens from the pool for free at honest stakers' expense.
Attack path#
Marked-line walkthrough (Playground)#
The EVM Playground pins each step to the exact executed source line in 0xbd4fd5a3ce…:
- L158 — Owner stakes and locks tokens: Setup:
stake()locks the owner's tokens and registers the position with the StakeManager. - L166 — Exit path returns principal: Setup:
leave()is the exit that tries to unstake from the manager and send principal to a destination. - L176 — Catch swallows paused revert: Root cause: on a paused-manager revert this
catchreturns principal but leaves the phantom stake the manager still counts, so the attacker keeps free rewards. - L177 — Require lock period expired: Only proceeds to return funds once the lock has elapsed (
lockUntil <= block.timestamp). - L180 — Verify principal transfer: Checks the principal transfer to the destination actually succeeded.
- L203 — Declare NotOwner error: Setup: declares the
StakeVault__NotOwnercustom error. - L207 — Owner-only access guard: Setup: restricts vault actions to the owner via a
msg.sender != ownercheck.
PoC#
Registry (Foundry, local deploy — verbatim vulnerable source + harm-asserting test + negative control):
cd 65325-malicious-actors-can-get-free-rewards-if-contract-gets-pause_exp
forge test -vvv
The browser Playground replays the same synthetic opcode-for-opcode and measures the harm: Attacker recovers their full staked principal via the paused-revert catch path while the StakeManager still counts the phantom stake, lettin. Both gates are green (registry forge test PASS + Playground _verify-poc VERDICT: PASS).
Sources & further analysis#
Reproductions & code
- Standalone PoC + full trace: 65325-malicious-actors-can-get-free-rewards-if-contract-gets-pause_exp (evm-hack-registry mirror).
- AuditVault finding: 65325-malicious-actors-can-get-free-rewards-if-contract-gets-pause.
- Upstream DeFiHackLabs PoC directory: src/test.
Alerts & third-party analyses
- DeFiHackLabs incident explorer: search "Statusl: Attacker recovers their full staked principal via the paused-revert catch path while the S".
- Web3Sec X hacked database: search.
- Rekt leaderboard: search.
- Solodit incident search: search.
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.