OAK — OnChain Attack Knowledge

Worked example · 2026-10

Initia — a MoveVM script-caching bug let one transaction credit the attacker with unbacked tokens, and the bridges paid out real assets for them — Initia L1 / Ethereum — 2026-10-23

Loss
~$2.7M per Initia: 105 WETH and ~1.4M AUSD0 bridged out via LayerZero and ~1.08M USDC via Noble/CCTP, swapped to 1,135.52 ETH held at 0x358ef0130f7a5aa516dcd81bdc80b18cde41cac8. Traced by OAK: from 2026-10-27 that wallet sent everything on, and 920 ETH entered Tornado Cash by 2026-10-28 (see Fund flow). The L1 and all rollups were halted at 15:41 UTC.
OAK Techniques observed
OAK-T9.014 (Protocol-Client Consensus Bug — primary, operator-stated. Initia: "an attacker exploited a bug in Initia MoveVM's script caching that allowed malicious code to bypass security checks", spoofing MoveVM state to credit unbacked WETH, iUSD and USDC "without changing the corresponding token's total supply". No INIT was minted. See techniques/T9.014-protocol-client-consensus-bug.md). OAK-T7.001 (Mixer-Routed Hop — preparation was funded from Tornado Cash, per D2 Finance). OAK-T7.003 (Cross-Chain Bridge Laundering — the unbacked balances were bridged out through LayerZero adapters and Circle CCTP and swapped to ETH within minutes). The cash-out ran through bridges working as designed: per D2 Finance, LayerZero DVNs attested burns that really happened, and an OFT adapter cannot tell whether burned tokens were ever backed.
Attribution
pseudonymous; prep funded from Tornado Cash ~6.5 h before (D2 Finance).
Key teaching point
A chain's bridge lockboxes underwrite its VM. As with Liquid in September, a mint bug on the source side was paid at par on Ethereum within minutes; the deepest exit liquidity was the bridge. Per-route rate limits are the control that bounds it.

Summary

At 14:59 UTC on 2026-10-23 one signed transaction produced the unbacked balances; ~$2.65M was back on Ethereum within 7 m 21 s. Initia promised a patch, audit and post-mortem.

Timeline (UTC)

Read it as three stages. Get in: a MoveVM caching bug. Prepare: Tornado funding and test transfers. Take: unbacked balances created on Initia, then bridged out at par. Times are from D2 Finance's decoding unless marked.

When What happened OAK
Before 2026-10-23 (undisclosed) A bug in Initia MoveVM's script caching lets malicious code bypass security checks (Initia). Since when is not published. T9.014
2026-10-23 08:27 0.0979 ETH from Tornado Cash's 0.1 ETH pool funds the attacker's preparation (traced by OAK). T7.001 (funding)
2026-10-23 from 13:14 Dust sends through Axelar's AxelarHandler. —
2026-10-23 14:37 A 0.006 ETH deposit into the same ETH adapter the attacker empties 29 minutes later. —
2026-10-23 14:59:26 One signed transaction, the attacker's own key calling one Move function (135,888 gas), credits unbacked WETH, iUSD and USDC and 2,000,000 AUSD (D2's figure) without changing token total supply (Initia). No INIT is minted. T9.014
153 s later A valid LayerZero message releases 1.4M real AUSD from the Ethereum adapter. LayerZero DVNs attest burns that really happened, and the adapter cannot tell whether burned tokens were backed. T7.003
within 7 m 21 s of the mint Three exits into one Ethereum address: 1.4M AUSD (71% of the adapter's balance), 105 ETH from the native-ETH adapter (96%), and 1.08M USDC minted via Circle CCTP. About $2.65M is back on Ethereum. T7.003
within about 3 minutes of landing Every stablecoin is swapped to ETH via 1inch and 0x (AUSD in 84 seconds). All 1,135.52 ETH (about $2.73M) ends in a fresh wallet. —
2026-10-23 15:41:30 Initia halts the L1 and all rollups. The halt is announced at 16:00 UTC. response
2026-10-24 08:46 Initia says funds sit unmoved in the wallet below, a patch and audit are expected in a few days, recovery is under way with security partners, and a full post-mortem will follow. Funds not moved as of this statement. response
2026-10-27 13:06 to 2026-10-28 15:46 The holding wallet sends all 1,135.52 ETH on: 400 ETH to one split wallet and 735.52 ETH to another. 920 ETH goes into Tornado Cash through the router, and about 215 ETH is peeled into ten wallets and on to collectors (traced by OAK). T7.001

Key addresses:

Fund flow

Ethereum leg traced by OAK with tools/explorer.py (Blockscout, keyless) on 2026-10-30, with a trace window of about five days after the exploit (to 2026-10-28, extended to 2026-10-29 for the last Tornado deposits). The Initia L1 and Noble legs are not supported by the tool, so those edges are relayed from the cited sources and drawn dashed. Counterfeit-token transfers were excluded: from minutes after the exploit, address-poisoning bots sent the exit address and the holding wallet fake "ETH" Transfer events from lookalike addresses with the same first four and last four characters (for example 0x358e8903fef95f152ad008528645759deaf5cac8, 0x3587a7e43037f3efc6b4183405f2a5a39941cac8, 0x358e99deaf8cc36cff2df3ce1635b5b84bd4cac8 and 0x358ec5bded6bf6b801ac466ed2cf27e283b0cac8 imitating the real holding wallet 0x358ef0130f7a5aa516dcd81bdc80b18cde41cac8). The tool reported more than 70 skipped unverified token transfers on the two wallets. The first-hop wallet 0x6b1175612794568d56d72afaa098402afc0299a4 was also imitated by many lookalikes sharing its first four and last four characters; only the real one received native ETH signed by the holding wallet.

All transfers as a table (41)
Time (UTC)FromToAmountOAKTxBasis
2026-10-23T08:26:59ZTornado Cash 0.1 ETH pool
0x12d66f87a04a9e220743712ce6d9bb1b5616b8fc
Exit receiver
0xdd922c841d85e12dac2dc2eef5a5e29cfff6edfa
0.0979 ETHT7.0010x3fb58feaaff3abdc5d55e3c6128ea03b6527665d702c983630f7f1d2f26c4d49traced by OAK
2026-10-23T14:59:26ZInitia L1 (MoveVM)Exit receiver
0xdd922c841d85e12dac2dc2eef5a5e29cfff6edfa
unbacked WETH, iUSD, USDC and 2,000,000 AUSD credited on Initia (supply unchanged)T9.014per d2initia2026
2026-10-23T14:59:26ZInitia L1 (MoveVM)LayerZero AUSD adapter
0x38b8b7ca28e672018a299b20565aca8cf200c844
AUSD bridged out via LayerZeroT7.003per d2initia2026
2026-10-23T14:59:26ZInitia L1 (MoveVM)WETH contract (ETH adapter release)
0x66a503a1060ab3f2b1aaabed613fe30babbc1bde
WETH bridged out via LayerZeroT7.003per d2initia2026
2026-10-23T14:59:26ZInitia L1 (MoveVM)Noble (USDC to CCTP)USDC bridged to NobleT7.003per d2initia2026
2026-10-23T15:02:00ZNoble (USDC to CCTP)Circle CCTP MessageTransmitter
0x0a992d191deec32afe36203ad87d7d289a738f81
USDC burned for CCTPT7.003per d2initia2026
2026-10-23T15:01:59ZLayerZero AUSD adapter
0x38b8b7ca28e672018a299b20565aca8cf200c844
Exit receiver
0xdd922c841d85e12dac2dc2eef5a5e29cfff6edfa
1,400,000 AUSDT7.0030x034c1076a08091b3221ef1e7bbcfb47dfeda93a6e460888f2d1bc124be17f3b6traced by OAK
2026-10-23T15:02:35ZCircle CCTP MessageTransmitter
0x0a992d191deec32afe36203ad87d7d289a738f81
Exit receiver
0xdd922c841d85e12dac2dc2eef5a5e29cfff6edfa
1,079,999.7398 USDC (×2)T7.0030xb18614bda3d693d557feee0f44813445b084098c1f497a4097d4297e82b089d3traced by OAK
2026-10-23T15:06:47ZWETH contract (ETH adapter release)
0x66a503a1060ab3f2b1aaabed613fe30babbc1bde
Exit receiver
0xdd922c841d85e12dac2dc2eef5a5e29cfff6edfa
105 ETHT7.0030x5cd422fd8166abf5d8632e9919bfedf6e26f5b77cf732cc797d863450887d7e9traced by OAK
2026-10-23T14:37:35ZExit receiver
0xdd922c841d85e12dac2dc2eef5a5e29cfff6edfa
WETH contract (ETH adapter release)
0x66a503a1060ab3f2b1aaabed613fe30babbc1bde
0.006 ETH0xe99b14e1ae9872d971a3984a6ab57d037bd7b5632a09d5e28a85d25420e96372traced by OAK
2026-10-23T15:03:23ZExit receiver
0xdd922c841d85e12dac2dc2eef5a5e29cfff6edfa
1inch v6 router and 0x Settler1,400,000 AUSD0xeb5e85e76f00a7a84dfe4d2d6aab146a769785b3d80307c67dde14c79f36c5aetraced by OAK
2026-10-23T15:04:59ZExit receiver
0xdd922c841d85e12dac2dc2eef5a5e29cfff6edfa
1inch v6 router and 0x Settler1,079,999.7398 USDC (×2)0x6981eed05757cfbce5ac7818449b28132dcb400361029ed3452037936c66c3b0traced by OAK
2026-10-23T15:03:23Z1inch v6 router and 0x SettlerExit receiver
0xdd922c841d85e12dac2dc2eef5a5e29cfff6edfa
1,030.4424 ETH (×3)0xeb5e85e76f00a7a84dfe4d2d6aab146a769785b3d80307c67dde14c79f36c5aetraced by OAK
2026-10-23T15:41:35ZExit receiver
0xdd922c841d85e12dac2dc2eef5a5e29cfff6edfa
Holding wallet (1,135.52 ETH)
0x358ef0130f7a5aa516dcd81bdc80b18cde41cac8
1,135.5246 ETH0x60f15b7e96111f11af54a2a0c9adc2ff33fef6b6a3c1a3b073a55c1421043e06traced by OAK
2026-10-27T13:06:11ZHolding wallet (1,135.52 ETH)
0x358ef0130f7a5aa516dcd81bdc80b18cde41cac8
Split wallet A (400 ETH)
0xa764b87fcb14bc850b68dfe41720cba3b24a89c0
400 ETH (×2)0xf35dcdd4c23816adcd5e1fb6578a75c2d43b4816bf78203b6721cfb59b9cc7f1traced by OAK
2026-10-28T13:37:59ZHolding wallet (1,135.52 ETH)
0x358ef0130f7a5aa516dcd81bdc80b18cde41cac8
Mixer-feeder B (735.52 ETH)
0x6b1175612794568d56d72afaa098402afc0299a4
735.5247 ETH (×4)0xb0723493669e7e0458dd446465927090ada5f4caa0a9f0bc6ec7ec5fdc6522dftraced by OAK
2026-10-27T13:07:59ZSplit wallet A (400 ETH)
0xa764b87fcb14bc850b68dfe41720cba3b24a89c0
Peel 10 ETH
0x239bcdfb0d18485d5c2dd4c12ad4d76ac4fc5b9f
10 ETH0xc8521e99a77ae96b97cbf9e700b93b13ba35877f3b32fc6ff807ed03c073779atraced by OAK
2026-10-27T14:10:35ZSplit wallet A (400 ETH)
0xa764b87fcb14bc850b68dfe41720cba3b24a89c0
Peel 10 ETH
0xd1e4b7a61f7174fe6dd2fe58a199f8cf92308a1b
10 ETH0x9c11d8b843435b7402c2807a5bf2866911aedd3c8431f2319a46d73ddf955156traced by OAK
2026-10-27T14:18:23ZSplit wallet A (400 ETH)
0xa764b87fcb14bc850b68dfe41720cba3b24a89c0
Peel 20 ETH
0xe869c927b2ff49727caf6e6eb4b47a6de2bef81f
20 ETH0x1cb38e7f23ba8127cdb3f70f15d963137e037e2efa0d9f132d6d5d9590b55a13traced by OAK
2026-10-27T15:05:35ZSplit wallet A (400 ETH)
0xa764b87fcb14bc850b68dfe41720cba3b24a89c0
Peel 50 ETH
0x86ebfdeddf391077338a98b5c478e1751496de86
50 ETH0x3cef7bd3a435761e15dbcc8ba4de7e9690833cfca70b849afde304b001c29dactraced by OAK
2026-10-27T15:58:47ZSplit wallet A (400 ETH)
0xa764b87fcb14bc850b68dfe41720cba3b24a89c0
Peel 50 ETH
0xaa45822a0c2b743a7b6520c91079d7fa7cd7a86b
50 ETH0xd46ae44b687a582d7aa4dc314c6307873f04794100a773f41552722d66374484traced by OAK
2026-10-27T16:02:23ZSplit wallet A (400 ETH)
0xa764b87fcb14bc850b68dfe41720cba3b24a89c0
Peel 59 ETH
0x3ac7794ee10d95a814a8ff92dda1a3d05429a2a8
59 ETH0xa0dfb0b76b36ac9b2301a60c49094c24d66ace0b5001492df644ab5eb1d6dc02traced by OAK
2026-10-27T18:25:47ZSplit wallet A (400 ETH)
0xa764b87fcb14bc850b68dfe41720cba3b24a89c0
Mixer-feeder C
0xdb3055a681a860955a6a49617062e7653f14966a
100.998 ETH (×2)0x5c90665a1922296b4e6dc9ecfd8df58016670d9e108fd1a749edd3a23120c2d6traced by OAK
2026-10-28T10:08:11ZSplit wallet A (400 ETH)
0xa764b87fcb14bc850b68dfe41720cba3b24a89c0
Tornado Cash Router (100 ETH and 10 ETH pools)
0xd90e2f925da726b50c4ed8d0fb90ad053324f31b
100 ETHT7.0010xabfc46076fd45942b5b1ca8a2aa6bb6eb0073d81c239ec166fe5e62940632a95traced by OAK
2026-10-28T13:18:23ZMixer-feeder C
0xdb3055a681a860955a6a49617062e7653f14966a
Tornado Cash Router (100 ETH and 10 ETH pools)
0xd90e2f925da726b50c4ed8d0fb90ad053324f31b
100 ETHT7.0010xe1c270f65982654d369005cb3fe38a5f47270c99829431aad4e6f7c6f3fda823traced by OAK
2026-10-28T13:27:35ZMixer-feeder C
0xdb3055a681a860955a6a49617062e7653f14966a
Mixer-feeder B (735.52 ETH)
0x6b1175612794568d56d72afaa098402afc0299a4
0.996 ETH0xc797cb66715f7eb78cf7ae34cdd35b2238c89a7b0ce68c6ed89af0da9dfcc121traced by OAK
2026-10-28T13:41:23ZMixer-feeder B (735.52 ETH)
0x6b1175612794568d56d72afaa098402afc0299a4
Tornado Cash Router (100 ETH and 10 ETH pools)
0xd90e2f925da726b50c4ed8d0fb90ad053324f31b
720 ETH (×9)T7.0010xfcbbc1a5d4dcbe717c1ff9fbe4343b27481000c76e4695c41e78311e4c9e4402traced by OAK
2026-10-28T15:17:11ZMixer-feeder B (735.52 ETH)
0x6b1175612794568d56d72afaa098402afc0299a4
Peel 0.4 ETH
0xafcff40ccb43cff52428c3668d3642d704610a27
0.4 ETH0x8536e0e66790cc2105f7a9b9f5f81e0a914a0de3471978a3fa79cdb529008e71traced by OAK
2026-10-28T15:23:35ZMixer-feeder B (735.52 ETH)
0x6b1175612794568d56d72afaa098402afc0299a4
Peel 4 ETH
0x81a4c429e08ddfbb9391be400c27b51af7d797b1
4 ETH0x4820495b37836c074748cf27e03ae62c5f2cfbcc0eacf50beae1b9b0af5314fbtraced by OAK
2026-10-28T15:34:47ZMixer-feeder B (735.52 ETH)
0x6b1175612794568d56d72afaa098402afc0299a4
Peel 6 ETH
0x7bb5002e8437d5b960538685affc3e8b8f2cfe8e
6 ETH0x59af97dc9adb74d43ee70c1cbb73cc328ea1bbd7dc0747e7b3c4296c4c4b75aftraced by OAK
2026-10-28T15:45:47ZMixer-feeder B (735.52 ETH)
0x6b1175612794568d56d72afaa098402afc0299a4
Peel 6.11 ETH
0x239d3eceb5b11e01a0ecf952c5abfa2155c1588b
6.1096 ETH0xdbe99a95446490a268835e0575a423f8e073aa765f05093536d1735394d1d764traced by OAK
2026-10-27T13:08:35ZPeel 10 ETH
0x239bcdfb0d18485d5c2dd4c12ad4d76ac4fc5b9f
Collector 1 (10 ETH, forwarded on)
0xcebf738348372f6d918584090c0ae74fe4c8fca3
10 ETH0xe6d183fa66665540a1bce2a944d0f75574669ae369c78ea53485ad5ac1053582traced by OAK
2026-10-27T14:11:11ZPeel 10 ETH
0xd1e4b7a61f7174fe6dd2fe58a199f8cf92308a1b
Collector 2 (about 110 ETH, fans out)
0xf374966fe9bc01204a6e3c9c91a381c2942d407b
10 ETH0xfef95c9716610c3fc388f2b0d4c2bcf5761f4eb456249692458ead4591fa3543traced by OAK
2026-10-27T14:18:47ZPeel 20 ETH
0xe869c927b2ff49727caf6e6eb4b47a6de2bef81f
Collector 3 (20 ETH)
0x0a0b5a470a19342c7746d476f50fb8c09a8a1e56
20 ETH0x27816298307d9489068f4e177c7679bbb215305608bc18e1ba65f4f37ea1e545traced by OAK
2026-10-27T15:06:11ZPeel 50 ETH
0x86ebfdeddf391077338a98b5c478e1751496de86
Collector 2 (about 110 ETH, fans out)
0xf374966fe9bc01204a6e3c9c91a381c2942d407b
50 ETH0x9c8e16abb57a1393a59be27d5dec38cefb8dbe17d59481fe1c3a75480f9ee4bftraced by OAK
2026-10-27T15:59:23ZPeel 50 ETH
0xaa45822a0c2b743a7b6520c91079d7fa7cd7a86b
Collector 2 (about 110 ETH, fans out)
0xf374966fe9bc01204a6e3c9c91a381c2942d407b
50 ETH0xe4ab8cef724aa018072f934566eae44070cfd29589a1275fe8f63f0dea8d4aa5traced by OAK
2026-10-27T16:02:59ZPeel 59 ETH
0x3ac7794ee10d95a814a8ff92dda1a3d05429a2a8
Collector 4 (59 ETH)
0x0d15b57a5ba0a31a4774c03ddfacf79b289db9ce
59 ETH0x49c0ff9751766e9267c612d1dd34efe7b581fa001dcb58d0ccf0ac39ca47fcf4traced by OAK
2026-10-28T15:17:47ZPeel 0.4 ETH
0xafcff40ccb43cff52428c3668d3642d704610a27
Collector 5 (about 16.5 ETH)
0x3c58043e2cdda4e3a0372e776bb464b40548b402
0.4 ETH0x38534dd4d3b87c8c6f4b46ac4023c242933856c09e82aae1ff111963386b6b42traced by OAK
2026-10-28T15:24:11ZPeel 4 ETH
0x81a4c429e08ddfbb9391be400c27b51af7d797b1
Collector 5 (about 16.5 ETH)
0x3c58043e2cdda4e3a0372e776bb464b40548b402
4 ETH0xf051b809d1463164f6fb2b5636486c1aa8e0795569047705b9b10bbbba3423cbtraced by OAK
2026-10-28T15:35:35ZPeel 6 ETH
0x7bb5002e8437d5b960538685affc3e8b8f2cfe8e
Collector 5 (about 16.5 ETH)
0x3c58043e2cdda4e3a0372e776bb464b40548b402
6 ETH0x9342f08bf2691e01ad95f05f72ccafb43c7679b79712a8689e7e575139b0b048traced by OAK
2026-10-28T15:46:23ZPeel 6.11 ETH
0x239d3eceb5b11e01a0ecf952c5abfa2155c1588b
Collector 5 (about 16.5 ETH)
0x3c58043e2cdda4e3a0372e776bb464b40548b402
6.1095 ETH0x80f65f8a4cb7600978857c63cd7953cecc061f7f2ae71785215f66960ec69f27traced by OAK

What the trace adds beyond the sources:

  • The exit address is 0xdd922c841d85e12dac2dc2eef5a5e29cfff6edfa (D2 published it only shortened). It matches D2's decoding on every figure: the LayerZero AUSD release at 15:01:59 is 153 s after the 14:59:26 mint, the AUSD swap at 15:03:23 is 84 s later, and the last exit (105 ETH, 15:06:47) is exactly 7 m 21 s after the mint.
  • Preparation funding. The Tornado Cash withdrawal into it at 08:26:59 UTC was 0.0979495 ETH (the 0.1 ETH pool, net of a relayer fee), not a full 0.1 ETH. The 0.006 ETH "deposit into the ETH adapter" at 14:37:35 went to the WETH contract 0x66a503a1060ab3f2b1aaabed613fe30babbc1bde, the same contract that paid out the 105 ETH.
  • USDC came in two CCTP mints, not one: 999,999.892101 USDC at 15:02:35 and 79,999.847658 USDC at 15:25:11 (total 1,079,999.739759, the "1.08M"). The second was swapped at 15:26:47 for 33.18 ETH through the 0x Settler; the other swaps went through the 1inch v6 router. The three swaps returned 1,030.44 ETH, plus 105 ETH from WETH and the 0.0979 ETH Tornado funding, minus gas, gives the 1,135.52459058 ETH sent to the holding wallet at 15:41:35.
  • The holding wallet did not stay put. Initia said on 2026-10-24 that funds sat unmoved; that was true then. From 2026-10-27 13:06 UTC the wallet sent out its whole balance as native ETH: 400 ETH to 0xa764b87fcb14bc850b68dfe41720cba3b24a89c0 in two sends, and 735.52466511 ETH to 0x6b1175612794568d56d72afaa098402afc0299a4 in four sends on 2026-10-28 (the small difference from 1,135.52459058 is poisoning dust of 0.0001 ETH it received).
  • Tornado Cash again. 920 ETH went into Tornado Cash (100 ETH and 10 ETH pool deposits through the router) between 2026-10-28 10:08 and 15:13 UTC: 100 from the first split wallet, 100 from a gas-and-mixer wallet, and 720 (nine deposits) from the second. This is the same service that funded the preparation (T7.001).
  • Peel chain. About 215 ETH was split into 10 fresh wallets in amounts of 0.4 to 59 ETH, each of which forwarded its whole balance to a collector wallet within about a minute. These collectors are not traced further here.

Limits:

  • The Initia L1 and Noble legs are not supported by the tool; those edges are relayed from [d2initia2026] and carry no tx. The Initia-side attacker address is not published.
  • The five collectors (the last five intermediary nodes before the Tornado node) were not followed. 0xf374966fe9bc01204a6e3c9c91a381c2942d407b fans out to many wallets and 0xcebf738348372f6d918584090c0ae74fe4c8fca3 forwards to a wallet labelled "Sweeper" by the explorer; both are outside the trace window.
  • Explorer labels are hints, not attribution.

Root-cause evidence

Public references

Techniques demonstrated (3)