# "address poisoning" — X 热门讨论 (2026-09-09 03:25 UTC)

## @Rarma_ (Rarma) · 09-08 22:47 · ♥22 ↻3 💬8 allBTC on @osmosiszone is 63.97% backed. There are 110.57094432 allBTC in circulation against 70.73128010 BTC of real collateral. The 39.83966422 BTC gap is nBTC issued by @nomicbtc, which has been halted since 7 September.

The full trace follows, with sources for each step.

Vulnerability

https://t.co/9JrBK9DbAj

ibc_deliver calls Coin::<Nbtc>::mint(amount) twice for a single incoming deposit. The first result is consumed by burn_coins_execute; the second is credited to the destination as spendable nBTC. It is the only one of the 18 #[call] handlers in that file with two mint calls, and it performs no signer check on the crediting account. IBC_FEE_USATS = 1_000_000, so invoking it costs one satoshi. The code is unchanged on develop HEAD.

Mint

Nomic block 33,137,470, 25 June 2026 21:49:59 UTC tx BEE54496B351A018D092779FE6C833238E1CDF965FE9761A572934F37932E028

25 send_packet events, sequences 9286–9310, 162,602,409,537,873 usat each, totalling 40.65060238 nBTC. The block contains no transfer, coin_spent, coin_received or burn events.

Signer: nomic1wq76r2mhqsa9yaygghuwyq4wy6dcsgf8cgz4wt, which has signed two transactions — a probe on 23 June at 03:01:56, then this one.

This is verifiable without a Nomic node. All 25 packets arrive on Osmosis block 64,910,685 over channel-6897, in six relayer transactions, at the same per-packet amount, from nomic1kq2rzz6fq2q7fsu75a9g7cpzjeanmk685ak9g7 to osmo1wq76r2mhqsa9yaygghuwyq4wy6dcsgf8vtzltn.

Addresses

The same 20-byte account ID appears on four chains:

nomic1wq76r2mhqsa9yaygghuwyq4wy6dcsgf8cgz4wt osmo1wq76r2mhqsa9yaygghuwyq4wy6dcsgf8vtzltn (15 txs, sequence 15) noble1wq76r2mhqsa9yaygghuwyq4wy6dcsgf8vny890 (2 txs) axelar1wq76r2mhqsa9yaygghuwyq4wy6dcsgf8q788kq

Ethereum beneficiary: 0x8f36fd9ffc0a8ca373aa7a4787292536a489d2b5

Drain, via Osmosis pool 1868

Pool 1868 is the allBTC transmuter, which exchanges 1:1 with no slippage.

64,911,162 · 21:59:14 — 1.0 nBTC to 1.0 WBTC.axl 64,911,346 · 22:02:46 — 7.0 nBTC to 7.0 WBTC.axl 64,911,801 · 22:11:27 — 8.0 WBTC.axl bridged (468D435D4705105362DB6BEABFB98852156998A1973CBAA146E1737AC637EE82) 64,911,856 · 22:12:35 — 10.0 nBTC to 10.0 WBTC.axl 64,911,947 · 22:14:21 — 1.5 WBTC.axl bridged (EF6FFD3034E32DC52B04262681E10311F1EBA626BA0CE7510992963387A30794) 64,912,704 · 22:28:53 — 0.29880120 WBTC.axl to 8.09767026 ETH.axl 64,912,733 · 22:29:53 — bridged (F879A15766BED480F913E74888F572574D88F603CE2EEC97E67946C2A4A1D1D7) 64,915,592 · 23:24:58 — 1.99940004 allBTC to 112,509.46 USDC, sent by IBC to Noble 65,121,991 · 28 Jun 18:33:44 — 6.16296736 WBTC.axl bridged (70DFD62F6DC370C25EDD726CF87BCDB3F668E9049AC88B46E6C7E15C0E182904) 66,554,379 · 17 Jul 22:44:35 — 22.65060847 nBTC to 22.65060846 allBTC

The 22.65 allBTC is still in the wallet and has not moved since 17 July.

@axelarr to Ethereum

Four GMP transfers, each naming SquidRouter 0xce16F69375520ab01377ce7B88f5BA8C48F8D666 as destination with 0x8f36fd9f… encoded in the payload. Each executes as Axelar Gateway, SquidRouter, SquidMulticall, Uniswap V3 WBTC/WETH, WETH unwrap, then native ETH to the beneficiary.

0x75b42eceb283eaa88303d23bca8f9ccc6c5579cdfc1e8c757ea1e33118dd125b · blk 25,397,547 · 303.01315917 ETH 0xe051dc2bbb37b1510faecaeace9288ca5bc0deda9562bdfe164643d268e69236 · blk 25,397,562 · 57.09781972 ETH 0x3dc170230bbbaab36b0bbfb0201ba705d09448be9db973c3725a72577e54ae1a · blk 25,397,637 · 8.09751591 ETH 0x6426edf655e833c2544a5541faceadb22d8d7c9a758432b409932155b6b4148f · blk 25,417,983 · 232.39729801 ETH

The ETH arrives through internal calls rather than ERC-20 transfers, so it does not appear in a token-transfer scan of the wallet. It shows up under debug_traceTransaction.

@noble_xyz to Ethereum via Circle CCTP

Noble 53,482,030 · 14003B7245C38C55778DA07C77AC123A69711AD95D264EC2F4DDA162985C0CD3 · DepositForBurn 56,254.663934 USDC, nonce 349050 Noble 53,482,093 · D8FFF6FD4538CA34B0F40AB842E1C67AF1590DA922AF93B29B0475C7C055FF99 · DepositForBurn 56,254.623933 USDC, nonce 349052

mint_recipient on both is 0x8f36fd9f…d2b5. Minted on Ethereum at blocks 25,397,917 and 25,397,924, then swapped through 1inch Fusion for 71.14822656 ETH at block 25,397,930.

Destination

The beneficiary received 671.75412248 ETH and sent 671.10 ETH to the Tornado Cash router 0xd90e2f925da726b50c4ed8d0fb90ad053324f31b in 34 deposits: 439.10 ETH on 25 June between 22:56 and 23:46, and 232.00 ETH on 28 June between 18:41 and 18:46. The remaining balance is 0.5753708194 ETH. Nothing has moved since 28 June.

The wallet's only funding before the exploit was 0.03729586 ETH received on 22 June from an address-poisoning bot, followed 24 seconds later by a counterfeit token from a lookalike address. There is no exchange or mixer deposit into it.

Reconciliation

40.65060238 nBTC minted, plus 0.00000612 left over from a legitimate test purchase on 23 June, gives 40.65060850 available. Against that, 18.00000000 was converted and bridged out, and 22.65060847 was converted to allBTC and left on Osmosis, totalling 40.65060847. The difference is 3 usat, or 0.000003 satoshi.

Of the 18.0 converted: 15.66295187 went out as WBTC and returned 592.50827690 ETH; 0.29880120 became 8.09751591 ETH; 1.99940004 became 71.14822656 ETH through Noble; approximately 0.0388 was lost to slippage, relayer fees and gas.

Halt

Nomic stopped at block 34,837,131 on 7 September 15:30:21 UTC. That block contained one transaction with code=0, no validator updates and no end-block events. Consensus is at height 34,837,132, round 0, step 1, with no proposal.

Bitcoin checkpointing stopped 23 hours 39 minutes earlier, while the chain was still producing blocks. The last checkpoint is Bitcoin block 965,798, txid 105f80d33d383667cf200a81cd1c0cf2ed829ba4f696e44b7d5c89e94262d705, confirmed 6 September 15:51:27, paying 0.74599951 BTC to bc1q9e3d4nca68wzh8j3gme7z7gatnrzrpgcflsu5tgeuh6g7svqykssqzxyfe. That output is unspent and Bitcoin is now 316 blocks past it.

Fee exhaustion does not explain this. The median observed checkpoint fee is 3,598 sat and the maximum ever paid is 15,064 sat. The final reserve UTXO holds 74,599,951 sat, enough for roughly 17,400 checkpoints. Of 262 Osmosis withdrawal requests, one exceeded the reserve, and it was paid on 22 July.

I could not verify the failure mode itself. The only reachable Nomic RPC reports 0 peers, so it cannot distinguish a halted network from an isolated node. The halt is confirmed instead by the 54-hour checkpoint gap on Bitcoin and by @osmosiszone pausing the pool.

Current state

40.63744627 nBTC outstanding against a 0.78126898 BTC reserve, or 1.92% backed. Osmosis paused the allBTC pool at height 70,112,441 on 7 September 19:35:16. is_active is false and redemptions are blocked. get_corrupted_denoms is still empty.

Two notes

nomic1rk07saqmvfle50h4h9hul00g67xzrcc5ytfxjm has been circulating as the exploiter address. It has 3,100 transactions, all update_client on IBC client 07-tendermint-1. It is a relayer, not the attacker.

At 14:09:08 on 7 September, 81 minutes before the halt, an unrelated Osmosis account with an established history swapped 9.00805626 allBTC for WBTC at block 70,097,405 (D43E123EE07576B1445DE95D0747A474E6B756B17920FD4BC7F38D5076BC4092). I have no evidence about motive and am not claiming any. https://x.com/Rarma_/status/2097456879266037797