Base vault drain: $6M in wstETH, gas from Tornado Cash — and 1,000 wstETH stuck in a seven-day bridge window

PublicAML · On-chain investigation · 4 October 2026

On the morning of 4 October a vault on Base lost 1,783 wstETH, about $6 million, after a fresh contract was put on its whitelist and allowed to take the vault’s Aave position. The vault’s owners are unknown. We followed the money the same day. The attacker paid for gas with ether withdrawn from Tornado Cash two and a half hours before the drain. The wstETH is now on its way to Ethereum through the Lido bridge — and that bridge makes it wait: 1,001 wstETH cannot be spent on Ethereum until about 11 October. Another 782 wstETH is still on Base.

1,783.067 wstETH

taken from the vault, ≈ $6M

1,001 wstETH

in the 7-day withdrawal window to Ethereum

782.067 wstETH

still on Base, on one address

06:43 UTC

gas withdrawn from Tornado Cash, 2.5 h before

What happened

The vault, 0xD1895f2019c2152FC2b9022D57f19198c4CFCABC, held a leveraged wstETH position on Aave. It is run by a Safe, 0x6b27512a5943Ed327f6cb6C3EC1f0398229f42C4, that needs three of seven signatures; nobody has said whose they are. The vault lets whitelisted contracts move its Aave receipt tokens.

At 08:52 and 08:53 UTC the Safe sent two transactions to the vault that changed that whitelist — according to ExVul, first removing and then re-adding the attacker’s contract, 0xcdFE91301356da873562EF513828a60dba1F569d. We checked both: each carries three valid owner signatures. In other words, the change went through the vault’s own approval process. Whether three owners’ keys were stolen or something else happened, the chain does not say.

Two minutes later the contract began pulling the vault’s aBaswstETH — a 1-token test at 08:55, then 100, 500, 500, 500 and 182.067 between 09:08 and 09:12. Each batch was passed straight to the wallet that deployed the contract, 0x0B5126e1bc27C0de77e02e97945760A674EdB034, which at 09:23 redeemed all 1,783.067 aBaswstETH on Aave for wstETH in one transaction.

When (UTC, 2026)FromToAmountTx
4 Oct 06:430x12D66f…16B8Fc0x707877…3366EF0.098 ETH (Tornado Cash)
Ethereum: Tornado Cash 0.1 ETH pool pays a fresh address
0x0b5224…45c434
4 Oct 06:460x707877…3366EF0x3154Cf…0F2C350.05 ETH → Base
bridged to the attacker wallet on Base
0x6eecb6…df6045
4 Oct 08:100x0B5126…EdB0340xcdFE91…1F569dcontract set up
attacker contract initialised
0x122dc2…269ce5
4 Oct 08:530x6b2751…9f42C40xD1895f…CFCABCwhitelist (3 of 7)
Safe re-adds the contract to the whitelist, 3 valid signatures
0xed265f…bf2810
4 Oct 08:55–09:120xD1895f…CFCABC0xcdFE91…1F569d1,783.067 aBaswstETH
last of six pulls (1, 100, 500, 500, 500, 182.067)
0xf1c944…a9cd7e
4 Oct 09:230x0B5126…EdB0340xA238Dd…98d1c5→ 1,783.067 wstETH
all aBaswstETH redeemed on Aave for wstETH
0x557bfd…67ee8c
4 Oct 10:470x0B5126…EdB0340xC73448…297f8D1,782.067 wstETH
to the bridging address (1 wstETH test sent at 09:24)
0x20fb64…6be145
4 Oct 12:100xC73448…297f8D0xac9D11…4287AB1,000 wstETH → Ethereum
Lido wstETH bridge: withdrawal to Ethereum started
0x7b8560…723e14
4 Oct 13:440xC73448…297f8D0x490480…74E97eproved on Ethereum
withdrawal proved on Ethereum; claimable after ~7 days
0xc53a6c…539024

The gas came from Tornado Cash

The attacker wallet on Base was empty until 06:49 UTC, when 0.05 ETH arrived through Base’s own bridge from Ethereum. The sender on Ethereum, 0x707877cE44282896E417EbBDc5e7d4620A3366EF, had been created minutes earlier: at 06:43 it received 0.098 ETH withdrawn from Tornado Cash’s 0.1 ETH pool, and at 06:46 it bridged 0.05 ETH of it to the attacker wallet on Base.

So the attack was prepared at least two and a half hours before the first token moved, and its fuel was laundered first. That rules out an accident or a signer acting on impulse: someone set this up.

Seven days on the bridge

At 10:47 the attacker wallet sent 1,782.067 wstETH to a new address, 0xC73448432a05deeA5Ea18a07D3b5d9ccf6297f8D (after a 1 wstETH test an hour earlier). That address chose the slowest exit available: Lido’s official wstETH bridge from Base to Ethereum. It withdrew 1 wstETH at 09:27 and 1,000 wstETH at 12:10, both to its own address on Ethereum, and it paid for Ethereum gas through Gas.zip.

A withdrawal from Base to Ethereum is not instant. It has to be proved on Ethereum and then wait out a challenge period of about seven days before the coins can be claimed. The attacker proved both withdrawals on Ethereum, at 10:43 and 13:44 UTC on 4 October. Until about 11 October, those 1,001 wstETH exist on neither chain in spendable form. When the window closes they will appear at the same address on Ethereum.

The remaining 782.067 wstETH is still on Base at 0xC73448432a05deeA5Ea18a07D3b5d9ccf6297f8D, as of 4 October 16:00 UTC — most likely waiting for the same route.

wstETH cannot be frozen by its issuer. What the seven days do give is time: for the vault’s owners to come forward, for Base and its security council to look at the withdrawals, and for every exchange to recognise the address before the coins arrive.

What this page does not say

It does not say who controls any address, and it does not say any signer of the Safe is responsible. That the whitelist change carried three valid signatures is a fact on chain; how those signatures came to be made is not. The incident itself was first reported by Blockaid, PeckShield, CertiK and ExVul; the gas source, the bridge withdrawals and the balances are our own reading on 4 October 2026.

Check an address yourself

Free, no sign-up. Paste any address to see whether it is linked to this or any other incident:

Sources: Base and Ethereum chain data via Blockscout, read on 4 October 2026; Blockaid, PeckShield, CertiK and ExVul for first reports and the whitelist sequence; Bitcoin.com News and The Crypto Times for the vault and Safe addresses. This is an information resource about transactions between addresses, not financial or legal advice, and it names no individual as responsible for anything.