Reproduced Exploit
Stake.Link reSDL bridge — stale approval steals returned lock
handleOutgoingRESDL removes the lock owner but does not delete its transfer approval. When the same ID returns to a victim, the stale approved account transfers the lock away.
Chain
Other
Category
access-control
Date
Dec 2023
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: 29738-a-user-can-steal-an-already-transfered-and-bridged-resdl-loc. Standalone Foundry PoC and full write-up: 29738-a-user-can-steal-an-already-transfered-and-bridged-resdl-loc_exp in the
evm-hack-registrymirror.
Vulnerability classes: vuln/access-control/missing-check · vuln/bridge/missing-validation
Key info#
| Field | Value |
|---|---|
| Loss | Bridged reSDL lock is stolen from its recipient |
| Chain | Local synthetic |
TL;DR#
handleOutgoingRESDL removes the lock owner but does not delete its transfer approval. When the same ID returns to a victim, the stale approved account transfers the lock away.
The vulnerable code#
delete ownerOf[id]; /* FIX: delete tokenApprovals[id]; */ // @> VULN: bridge departure deletes owner but preserves stale transfer approval.
Attack walkthrough#
The seller pre-approves an alternate account, bridges the lock to a victim, and the alternate account calls transferFrom after the lock returns. The local PoC asserts that the attacker is final owner.
Diagrams#
Remediation#
Delete tokenApprovals[lockId] when outgoing bridging burns or removes lock ownership.
Sources#
Sources & further analysis#
Reproductions & code
- Standalone PoC + full trace: 29738-a-user-can-steal-an-already-transfered-and-bridged-resdl-loc_exp (evm-hack-registry mirror).
- AuditVault finding: 29738-a-user-can-steal-an-already-transfered-and-bridged-resdl-loc.
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.