Executive brief
The ixo blockchain's bonds module incorrectly authorized fund transfers based on DID-resolved addresses without verifying the transaction signer's ownership of those addresses. An attacker could register any victim's address as a verification method on their own DID and then drain the victim's funds into attacker-controlled bonds, bypassing all signature requirements. This vulnerability was actively exploited on the ixo mainnet in June 2026, affecting all users holding balances in tokens used by bonds.
Technical details
The vulnerability exists in the x/bonds module's authorization logic for message handlers (MsgMakeOutcomePayment, MsgBuy, MsgSell, MsgSwap, MsgWithdrawShare) and the batch order processor. The root cause is insufficient verification: when a payer address is resolved from a DID verification method, the module does not verify that the transaction signer actually controls that address. Since any account can list arbitrary blockchainAccountID values as verification methods on a DID it controls, an attacker can claim ownership of victim addresses. The attack vector is network-based and requires no victim authentication; an attacker simply creates a DID, registers a victim's address as a verification method, and triggers fund movement through bond operations. The patch (v8.0.0) disables the entire x/bonds module by rejecting all bonds messages across all routes (direct, authz, CosmWasm, ICA) and making the batch EndBlocker a no-op.
Affected products
- ixo Blockchain before v8.0.0
Timeline
- 2026-06-20: exploited: Active exploitation on ixo mainnet (ixo-5)
- 2026-09-24: patched: Fix delivered via v8 software-upgrade (v8.0.0)
- 2026-09-24: advisory