Skip to content

Back to the catalog

Rekt - Initia - Rekt
rekt.newsarticle

Rekt - Initia - Rekt

Rekt News post-mortem of the 23 October 2026 Initia exploit. A MoveVM script-caching bug let an attacker credit unbacked WETH, iUSD, AUSD0 and USDC without raising total supply, and bridges paid out about $2.73 million (1.4 million AUSD, 105 ETH, 1.08 million USDC). It includes 0xCanzi's local replay of a stale cached verification, the on-chain laundering timeline, and the Foundation's backing-restoration pledge.

TL;DR Explains how a stale MoveVM script-verification cache let forged balances drain about $2.73 million through LayerZero and Noble/CCTP bridges.
Document

What it is

On 23 October 2026 an attacker exploited a script-caching bug in Initia's Aptos-derived MoveVM. They credited one Initia account with unbacked iUSD, AUSD0, USDC and WETH, then withdrew through bridges. About $2.73 million in real assets left: 1.4 million AUSD and 105 ETH via LayerZero, and roughly 1.08 million USDC via Noble and Circle's CCTP. Initia attributed the cause to script caching that let malicious code bypass security checks. It did not name a file, commit or function.

How it works

The mechanism below is researcher 0xCanzi's local replay, which uses real Move VM code and models rollback locally. The page says it is a possible mechanism, not confirmation of the live attack.

  1. The attacker publishes a Router module whose swap declares a FungibleAsset return but aborts. A script passes the result of swap to the primary fungible store's deposit function. The types line up, so the VM verifies the script and caches the result.
  2. The abort rolls back the Router publication, but the cached verification survives.
  3. The attacker republishes Router at the same address, with swap returning an attacker-built Quote object (currency metadata plus a claimed amount).
  4. The same script reruns. The VM reuses the old verdict, so Quote reaches deposit as if it were a genuine token. Deposit credits the claimed amount.
flowchart TD
    A[Rerun script after Router republished] --> B{Cached verification present?}
    B -->|Yes| C[Quote passes as FungibleAsset, balance credited]
    B -->|No, fresh VM| D[Rejected: TYPE_MISMATCH]

This path adds to a balance without touching total supply, which matches Initia's report that recorded total supplies did not change. No native INIT was minted.

Timeline and losses

  • 14:59:17 to 14:59:30 UTC: four batches forge 3 million iUSD, 2 million AUSD0, 2 million USDC and 200 WETH (about $7.48 million face value, per Bitquery).
  • 15:01:59: 1.4 million AUSD released on Ethereum, swapped to 581.55 ETH at 15:03:23.
  • About 1 million USDC from the Noble reserve swapped to 415.70 ETH at 15:04:59. 105 ETH paid out at 15:06:47.
  • 15:24: last successful withdrawal, 80,000 USDC (about 33.18 ETH).
  • 15:41:30: Initia halts the L1 and rollups. Five seconds later the attacker consolidates 1,135.52 ETH into a fresh wallet.
  • 16:31:59: Agora's batchFreeze lands, but the attacker's AUSD balance was already zero.

The halt came about 14 minutes after Spreek's public alert, and the 28-minute gap before that alert was enough for most of the payout. D2 Finance counts the AUSD adapter at 71% depleted and the native-ETH adapter at 96%. The Noble USDC reserve fell to $63 by 15:37 UTC and ordinary withdrawals began failing.

Preconditions / Affected

Holders of the Initia-side representations (iUSD, AUSD0, USDC, WETH) and the Ethereum and Noble reserves backing them were affected. Bitquery counts $4.55 million in forged face value still on Initia at the halt. Two attempts to swap forged iUSD into AUSD0 failed.

What to do

The page gives one detection idea for Move VM forks: run the same script in a VM that retains its earlier verification result and in a fresh VM, after a rollback and module replacement, and flag any divergence. In the replay, the cached VM accepted the forged object and the fresh VM rejected it.

Caveats

  • The live exploit sequence is unconfirmed, and Initia's public movevm repository listed no security advisories on 28 October.
  • On 28 October the Initia Foundation approved funding to restore 1:1 backing, up to 1.08 million USDC, 105 ETH and 1.4 million AUSD0. This is subject to reconciliation and final transfer approval. No restart date was given, and the plan for the remaining forged balances is unstated.
  • The Code4rena contest in January 2025 and a Zellic report (34 findings, two critical) covered Initia's movevm. The page does not establish whether either tested this interaction.
  • A separate Hexens finding on a stale type-tag cache in Aptos's Move VM is a different mechanism. The page does not claim Initia's fork contained it.
  • On 27 October the consolidation wallet sent 400 ETH to one address, which later made a 100 ETH Tornado Cash deposit.

Organisations named here

  • 0xCanzi
  • Agora
  • AUSD
  • Code4rena
  • D2 Finance
  • forged balances
  • Hexens
  • Spreek
  • Sprunky
  • stale verification cache
  • Zellic
  • Zon

Technologies named here

  • Bitquery
  • Tornado Cash
  • LayerZero
  • Cosmos SDK
  • Ethereum
  • Circle
  • Liquid Network
  • 0xCanzi's local replay
  • 1inch
  • AUSD0, iUSD, WETH and USDC representations on Initia
  • AUSD batchFreeze
  • Circle CCTP (used for USDC exits)
  • Code4rena Initia Move contest (7 to 28 January 2025)
  • D2 Finance
  • Hexens
  • Initia
  • Initia L1 and rollups (halted 23 October at 15:41:30 UTC)
  • Initia movevm repository (no published security advisories as of 28 October)
  • Initia MoveVM (Aptos-derived Move VM, Rust, connected to Cosmos SDK via Go bindings), script caching bug
  • INIT token (native INIT not minted; KuCoin suspended deposits and withdrawals on 24 October; Upbit and Bithumb trading-caution designation on 26 October)
  • LayerZero bridge: Ethereum contract holding AUSD for Initia (0x38b8b7ca28e672018a299b20565aca8cf200c844), 1.4 million AUSD released, about 71% of holdings
  • MoveVM
  • Sprunky
  • Zellic report on Initia

Techniques named here

  • Bridge withdrawal of forged balances
  • Differential testing of cached versus fresh VM
  • MoveVM state spoofing
  • Stale script verification cache exploitation
  • Token swap to ETH and fund consolidation
  • Tornado Cash gas funding