Neutron: two wallets cast 98% of the votes that handed Astroport and Drop to their attacker
PublicAML · On-chain investigation · 24 September 2026
On 22 September 2026 a Neutron governance proposal titled "AIATO: AI Agent Takeover" passed, gave its author admin rights over ten Astroport and Drop contracts, and those contracts were emptied within half an hour — about $9.4 million, by GoPlus’s count. It has been told as a vote nobody noticed. The chain says something narrower: 98% of the YES power came from two wallets, and both are tied to the attacker by his own transactions. One staked 31.62 million NTRN eleven minutes before the vote closed; the other was paid 1,000 USDC by the attacker three hours after the drain. The stolen dollars reached Ethereum within the hour, alongside ETH withdrawn from KuCoin and Bybit, and 794 ETH of it has not moved since.
98%
of the YES power on proposal #9 from two attacker-linked wallets
31.62M NTRN
staked 11 minutes before the vote closed — still bonded
1.18M USDC
out through Noble and Circle to one Ethereum address
794 ETH
sitting on 0xEF6c…5D54, untouched as of 24 Sep
What happened
Neutron runs on-chain governance: a proposal that passes executes its messages with the chain’s own authority. On 12 September neutron1dd25c4sshelrpfs0433apg24c5phrhk8l6n605 submitted proposal #7, whose messages made him the admin of ten contracts belonging to Astroport, a DEX, and Drop, a liquid-staking protocol. He withdrew it on 19 September and at once resubmitted the same messages as proposal #9, "AIATO: AI Agent Takeover. Phase 1: Agent Admin Registration". It passed at 02:24 UTC on 22 September. At 01:18 he had already uploaded his own contract code; from 02:38 he migrated all ten contracts to it one by one and called withdraw_all on each. Neutron stopped producing blocks at 07:43 UTC and has not produced one since.
The vote was his
Proposal #9 passed with 37.31 million NTRN voting YES against 8.26 million NO and veto. Two wallets supplied 36.71 million of the YES.
neutron1ekgfga6vv4zdrrjn3dux6f62fuzektfndgaehm staked 31,620,000 NTRN at 02:13:10 UTC, eleven minutes before voting closed — the last-minute stake the reports describe. It is not a stranger’s wallet. On 18 September, three days earlier, the attacker’s own Cosmos Hub address sent 1 ATOM to this wallet’s own Cosmos Hub address (the same key), cosmos1ekgfga6vv4zdrrjn3dux6f62fuzektfnfh5mdu; within minutes it was swapped to NTRN, staked, and used to vote YES on proposal #7. The 31.62 million NTRN were bought with 20,200 USDC that reached the wallet through Noble from Secret Network, where the sender unwrapped them from private sUSDC. Secret Network hides who paid in, and this page does not guess.
neutron15m3hh904d0cwe4t69ec2w5cmc8535gkxwhgrp5 built up 5.09 million NTRN of stake between 9 and 21 September, voted YES on proposal #7 twice and on #9 at 15:16 UTC on 21 September. At 05:19 UTC on 22 September, three hours after the drain, the attacker sent it 1,000 USDC.
Without those two wallets the proposal had about 0.6 million NTRN of YES against 8.26 million against, and would have failed. Both stakes are still bonded: the chain is halted, and unbonding takes 21 days once it runs.
| When (UTC, 2026) | From | To | Amount | Tx |
|---|---|---|---|---|
| 12 Sep 02:48 | neutron1…l6n605 | neutron1…7a68v5 | proposal #7, 1M NTRN deposit first proposal, later withdrawn | B0DAC58E…C81552 |
| 18 Sep 22:49 | cosmos1d…m96c4n | cosmos1e…fh5mdu | 1 ATOM attacker funds the future voting wallet | 0563C4A5…2B9421 |
| 19 Sep 02:24 | neutron1…l6n605 | neutron1…7a68v5 | proposal #9, 1M NTRN deposit AIATO: AI Agent Takeover | 50D41B97…400B9E |
| 21 Sep 15:16 | neutron1…whgrp5 | neutron1…7a68v5 | YES, 5.09M NTRN second wallet votes YES | 03234550…DCB742 |
| 22 Sep 01:40 | secret1m…cgw0az | noble1ek…p5pn4j | 20,000 USDC unwrapped from private sUSDC | 8A2621B6…11698F |
| 22 Sep 02:13 | neutron1…dgaehm | neutron1…dgaehm | 31.62M NTRN staked 11 minutes before the vote closed | 71FB94AE…55C266 |
| 22 Sep 02:38–03:04 | neutron1…l6n605 | neutron1…l6n605 | 10 contracts migrated and emptied migrate + withdraw_all, ×10 | F336154E…0D31BE |
| 22 Sep 02:41–04:14 | neutron1…l6n605 | noble1dd…nx0sda | 1,180,010 USDC to Noble | 7B045AD2…6E0E77 |
| 22 Sep 02:44–04:18 | noble1dd…nx0sda | 0xe14931…1fBA5c | 1,180,005 USDC Circle CCTP to Ethereum | F88A8339…0644A7 |
| 22 Sep 02:47–04:27 | 0x8F10B4…13f996 | 0xe14931…1fBA5c | USDC → 447.8 ETH swapped on arrival | 0xb352b9…47cc02 |
| 22 Sep 05:01–13:27 | 0xD37BbE…aD7146 | 0xe14931…1fBA5c | ATOM → 211.6 ETH THORChain | 0xedeed1…0e7387 |
| 22 Sep 04:00–05:09 | 0x62425c…70dc9f | 0xe14931…1fBA5c | 17.29 ETH withdrawal from Bybit | 0x7d30bf…0c9b2b |
| 22 Sep 04:49–05:21 | 0x453001…92B785 | 0xe14931…1fBA5c | 10.03 ETH withdrawal from KuCoin | 0x5ef396…cf2ccd |
| 22 Sep 05:19 | neutron1…l6n605 | neutron1…whgrp5 | 1,000 USDC paid to the second voting wallet | DE1D6CDF…0CA122 |
| 22–23 Sep | 0xe14931…1fBA5c | 0xEF6c5A…2a5D54 | 765.4 ETH now 794 ETH, never moved | 0x1c3a5d…8cefc4 |
| 23 Sep 18:42–18:48 | 0xB773bC…33A16E | 0x9BfCCA…67f819 | 29.2 ETH the late ATOM, back as ETH | 0x3febfd…a80441 |
| 23 Sep 21:41 | 0x9BfCCA…67f819 | 0xEF6c5A…2a5D54 | 28.65 ETH into the same holding wallet | 0xc62d50…368cc8 |
Where the money went
The attacker used one key on every chain, so his address is the same string under each prefix. 1,180,010 USDC went from Neutron to noble1dd25c4sshelrpfs0433apg24c5phrhk8nx0sda and out over Circle’s bridge, in four burns between 02:44 and 04:18 UTC, to one Ethereum address: 0xe149310eB8b1b3D9C471CcD81819D393621fBA5c. It was swapped to ETH on arrival. ATOM went to his Cosmos Hub address and was swapped to ETH through THORChain, into the same Ethereum address — and a 20-ATOM THORChain swap to that address at 23:36 UTC on 21 September, three hours before the attack, shows it was set up in advance. DYDX went to dYdX and was paid out in transfers carrying numeric memos, the form exchange deposits take.
Between 04:00 and 05:21 UTC on 22 September the same Ethereum address received 17.29 ETH from a Bybit hot wallet and 10.03 ETH from a KuCoin hot wallet — withdrawals from accounts at two exchanges that know their customers. On 22 and 23 September it sent 765.4 ETH to 0xEF6c5A31df984c8569236a0AbC1f27580E2a5D54, which now holds 794 ETH and has never sent a transaction.
After the Cosmos Hub restarted on 23 September its validators moved about 1.23 million ATOM out of the attacker’s address, as reported. On 23 September he still moved a further 169,000 ATOM out to Osmosis and converted it to about 190,000 USDC. That came back to Ethereum within the hour as 29.2 ETH on a second fresh wallet, 0x9BfCCA13b4AC907433ac68766E96309ac867f819, which passed 28.65 ETH to the same holding address.
What can still be done
The 36.71 million NTRN staked by the two voting wallets cannot leave while Neutron is halted, and cannot leave for 21 days after it restarts. The KuCoin and Bybit withdrawals identify accounts, and account holders. The 794 ETH is labelled, so an exchange that screens a deposit from it will see where it came from.
All three Ethereum addresses are labelled in PublicAML under this attack. The Cosmos-side addresses are listed here but cannot be scored yet: PublicAML does not cover Cosmos chains.
Sources: Neutron (archive node; the chain is halted), Cosmos Hub, Noble, Osmosis, dYdX and Secret Network REST data, and Ethereum data (Blockscout), read on 24 September 2026; the loss estimate as published by GoPlus; the ATOM moved by Cosmos Hub validators as reported in the press. This is an information resource about transactions between addresses, not financial or legal advice, and it names no individual as responsible for anything.