Worked example · 2026-06
Secret Network — a forked CW20-ICS20 bridge contract skips source-channel and escrow checks, minting unbacked tokens redeemed over the real Axelar route — Secret Network / Axelar (Cosmos IBC) — 2026-06-10
Summary
Secret Network is a Cosmos-ecosystem chain with encrypted (SNIP-20) balances by default, connected to the wider IBC network. Its integration with Axelar used a Secret-side contract that minted Secret-wrapped (sa*) tokens against assets escrowed on the Axelar side. That contract was a fork of the standard CW20-ICS20 IBC module, modified from an escrow model to a mint model.
On 2026-06-10, an attacker exploited two validation calls that had been commented out of the contract's packet-receive path. The contract verified that an incoming denomination was on its allow-list, but not that the packet had arrived over an authorised channel, and not that the releasing channel held enough escrow. Because IBC channel opening is permissionless, the attacker ran a single-validator chain (ibc-dev-allowlist-denom-1), opened a light client, connection and channel directly to the bridge contract, and self-relayed forged deposit packets carrying bare allow-listed denominations. The contract minted unbacked sa* tokens up to roughly the full circulating supply per asset, then the attacker redeemed those balances over the legitimate Axelar route so the real escrow released the backing assets.
The drain moved about $4.67M out through Axelar to Osmosis and on to Ethereum, where it was swapped to roughly 2,350 ETH on CoW Protocol and split across fresh wallets into exchange deposits. Because Secret's balances are encrypted, nothing looked wrong on public explorers. The incident was recognised only on 2026-06-17, when a legitimate cross-chain withdrawal bounced on insufficient escrow. Axelar disclosed the event on 2026-06-19, stated that neither Axelar nor IBC itself was compromised, and disabled the Secret connections; the vulnerable contract was Secret-side and not built or maintained by Axelar.
Timeline (UTC)
| When | Event | OAK ref |
|---|---|---|
| 2023-01-15 / 2023-03-30 | Forked CW20-ICS20 bridge contract written and deployed to Secret mainnet with parse_voucher_denom and reduce_channel_balance commented out |
(standing T10.002 surface) |
| 2026-03-05 | Contract migration updates the bytecode for new features but carries the missing checks forward | T11.013 |
| 2026-06-10 06:50–19:05 | Attacker stands up a single-validator chain and opens a light client, connection and channel directly to the bridge contract | T10.002 setup |
| 2026-06-10 19:14–19:20 | Attacker self-relays forged deposit packets with bare allow-listed denoms; contract mints unbacked sa* tokens | T10.002 execution |
| 2026-06-10 19:33–19:36 | Attacker redeems the minted sa* over the real Axelar channel; escrow releases ~$4.67M of backing assets | T10.002 extraction |
| 2026-06-10 19:38–20:15 | Funds bridged Axelar → Osmosis → Ethereum, swapped to ~2,350 ETH on CoW Protocol | T7.003 |
| 2026-06-10 onward | ETH split into ~30 transfers, deposited to KuCoin / ChangeNow / HitBTC; residual ~$642K–$770K left on Axelar | T7.002 |
| 2026-06-17 15:39 | A legitimate cross-chain transfer fails on insufficient escrow, revealing the drain | (detection) |
| 2026-06-19 | Axelar discloses, disables Secret connections, contacts exchanges and law enforcement; declines to pursue a freeze of the residual | (operator response) |
What defenders observed
- Pre-event (validation dropped in a fork, then carried through a migration). The exposure was two commented-out checks in a forked module, preserved across the 2026-03-05 migration. Auditing a fork against its upstream, and re-auditing on every migration, is the pre-event control (T11.013). Secret publicly noted no external audit was requested for the Axelar integration.
- At-event (mint without authorised source deposit). The direct signature is a mint that does not reconcile to a confirmed, correctly-channelled source escrow. A runtime invariant tying every sa* mint to a real Axelar-channel deposit, and rejecting packets from unrecognised channels, is the highest-leverage control for this class.
- At-event (permissionless channel to a minting contract). The attacker opened a channel straight to the bridge and self-relayed. A minting contract should pin the specific authorised channel/port and refuse deposits arriving over any other, rather than trusting an allow-list of denominations alone.
- Detection (encrypted balances hid the loss for a week). Secret's default balance encryption meant the missing collateral was not visible on explorers, and no monitoring or pause fired. Value-conservation monitoring that operates on the protocol's own encrypted accounting, independent of public explorer views, is the detection control. This is the same detection lesson as
examples/2026-06-namada-masp-ibc-transfer-logic-shielded-drain.md, where shielded-pool opacity and a stale indexer also masked an IBC-boundary drain in the same month.
Public references
[commonprefixsecret2026]— Common Prefix, "Secret Network CW20-ICS20 Exploit: What Exactly Happened" (primary technical post-mortem; commented-outparse_voucher_denom/reduce_channel_balance, channel and Code IDs, per-asset losses, six-stage fund flow): https://www.commonprefix.com/blog/secret-network-exploit[theblocksecret2026]— The Block, "Secret Network's Axelar bridge drained for $4.67 million in infinite-mint exploit that went unnoticed for seven days" ($4.67M, seven-day window, escrow-to-mint rework, audit-not-requested, residual figures): https://www.theblock.co/post/405459/secret-networks-axelar-bridge-drained-for-4-67-million-in-infinite-mint-exploit-that-went-unnoticed-for-seven-days[rektsecret2026]— Rekt News, "Secret Network — Rekt" (independent breakdown; UTC timeline, ~2,350 ETH consolidation, exchange split, attacker addresses): https://rekt.news/secret-network-rekt[cryptonewssecretaxelar2026]— crypto.news, "Axelar shuts down Secret Network bridge routes after $4.7M exploit" (Axelar official statement: core protocol and IBC not compromised, connections disabled, law-enforcement coordination): https://crypto.news/axelar-shuts-down-secret-network-bridge-routes-after-4-7m-exploit/[cryptopolitansecret2026]— Cryptopolitan, "Axelar-bridged tokens worth $4.67 million drained in Secret Network contract exploit" (mainstream corroboration of loss, mechanism, disclosure date): https://www.cryptopolitan.com/axelar-bridged-tokens-worth-4-67-million-drained-in-secret-network-contract-exploit/
Discussion
Secret Network is a clean addition to OAK's T10.002 family because it isolates a specific sub-shape: a bridge that mints on packet receipt while verifying only the denomination, not the channel the packet arrived on or the escrow behind it. It sits next to Syscoin (proof-parsing ambiguity), Nomad (trusted root initialised to zero) and Wormhole (missing guardian-account validation) in the same class, contract-side message verification admitting a message it should reject, here in a Cosmos IBC mint-on-receipt form. The IBC detail that makes it worth preserving is that channel opening is permissionless, so the attacker could deliver forged packets to the contract directly; a minting contract that pins its authorised channel would have rejected them.
The two properties that give the case durable teaching value are the legacy carry and the detection delay. The dropped checks shipped in 2023 and passed through a 2026 migration untouched, which is why T11.013 is co-primary rather than incidental: the same code that failed had been "maintained" without being re-audited against the checks it dropped. And because Secret encrypts balances by default, the drain was invisible on the layer most teams watch, so recognition came from an unrelated failed withdrawal a week later. Contributors writing future bridge examples should record both the mint-without-authorised-deposit invariant and the point that privacy-preserving accounting needs its own value-conservation monitoring, because explorer-based detection does not apply. The same-month Namada MASP drain is the sibling case for the detection lesson.