Reproduced Exploit

Notional v4 — redeemNative reentrancy freezes yield tokens

redeemNative snapshots balance, swaps via a path including a malicious token that reenters initiateWithdraw (moves N yield tokens and decrements accounting). After return, burn subtracts (M+N) again → N tokens unaccounted/frozen.

Jan 2025Otheruntagged2 min read

Chain

Other

Category

untagged

Date

Jan 2025

Source

AuditVault

EVM Playground

Source-level debugger — step opcodes and Solidity in sync

evm-hack-analyzer

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.

Loading fork state…

Source & credit. Reproduction of a public audit finding curated by AuditVault — the original finding: 63524-redeemnative-reentrancy-enables-permanent-fund-freeze-system. Standalone Foundry PoC and full write-up: 63524-redeemnative-reentrancy-enables-permanent-fund-freeze-system_exp in the evm-hack-registry mirror.


Vulnerability classes: single-function reentrancy · locked-funds · accounting desync

Reproduction: reduced synthetic of AbstractYieldStrategy double-subtract path.

AuditVault taxonomy: severity/high · sector/lending · platform/mixbytes · single-function · locked-funds · reentrancy-guard


Key info#

ImpactHIGH — yield tokens frozen (balance > s_yieldTokenBalance); share price distortion
ProtocolNotional Finance v4 AbstractYieldStrategy
Vulnerable code_burnShares subtracts full pre-reentrancy delta after reentrancy already moved N
Bug classReentrancy during redeem trade
FindingMixBytes · Notional v4 · #63524

TL;DR#

redeemNative snapshots balance, swaps via a path including a malicious token that reenters initiateWithdraw (moves N yield tokens and decrements accounting). After return, burn subtracts (M+N) again → N tokens unaccounted/frozen.

The vulnerable code#

SOLIDITY
s_yieldTokenBalance -= yieldTokensRedeemed; // @> VULN double-count after reentrancy
// FIX: nonReentrant on redeem/initiateWithdraw; restrict UniV2 path length

Diagrams#

sequenceDiagram participant Attacker participant Vault participant MalToken participant Router Attacker->>Vault: redeemNative Vault->>Vault: snapshot yieldTokensBefore Vault->>MalToken: swap path transfer MalToken->>Router: initiateWithdraw reenter Router->>Vault: processWithdraw N tokens Note over Vault: s_yieldTokenBalance minus N MalToken-->>Vault: return Vault->>Vault: subtract full M plus N again Note over Vault: N tokens frozen

Impact#

Permanent freeze of vault yield tokens; collateral health distortion and liquidation risk.

Sources#


Sources & further analysis#

Reproductions & code

Alerts & third-party analyses

  • 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.