A flaw in the off-chain Kasplex indexer was exploited over the weekend to move large amounts of KRC-20 tokens from a bridge custody wallet without control of its private key, according to the project’s operators and affected platforms. The incident involved 186,425,259 ZEAL and 54,397,983,246 NACHO, which were then bridged back through layer-two systems and sold into Zealous Swap liquidity pools.

Kaspa’s base layer was not breached. The issue centered on how the Kasplex indexer interpreted token transfer data embedded in otherwise valid Kaspa transactions, allowing forged KRC-20 transfers to be accepted as if they had been properly signed.

Five valid transactions triggered the drain

The reported exploit took place on Sept. 20 and relied on just five valid Kaspa transactions. Those transactions convinced the Kasplex indexer to recognize token movements from a bridge custody address even though the attacker did not hold the private key for that wallet.

After the tokens were pulled from the custody address, they were sent back to it as standard bridge deposits. That allowed corresponding assets to be minted on Igra Labs’ EVM layer and on Kasplex L2, where the attacker then sold the tokens into Zealous Swap pools.

By the end of the sequence, the attacker’s L2 balances in ZEAL and NACHO had been emptied through those sales. The affected pools, however, lost between 94% and 99.6% of their KAS-side value.

How the signature bypass worked

KRC-20 ownership is not enforced directly by Kaspa consensus. Instead, token instructions are carried inside Kaspa transactions and interpreted by an off-chain Kasplex indexer, which determines balances and ownership state.

In a normal KRC-20 transfer, the transaction data includes a public key, token instructions and a valid signature. In this case, the attacker reportedly left the signature empty but preserved the broader transaction structure, then appended an OP_NOT after OP_ENDIF.

Because the indexer did not strictly require the script to match the canonical format, it still treated the forged transfer as valid. The source article says Kasplex’s API returned opAccept: 1 on the first forged ZEAL transaction.

Why the problem may extend beyond one wallet

According to the report, the attacker did not need any special credentials to construct the forged operations. A standard Kaspa address exposes the public key needed to assemble the KRC-20 transfer format used in the exploit.

That means simply moving assets to another address would not remove the underlying risk. Until the indexer is patched and its history reindexed, the same weakness could in theory affect other KRC-20 balances interpreted by the same system.

The incident also left a mismatch between token balances and their backing. The bridge custody wallet’s ZEAL and NACHO were effectively drained at the L2 level, leaving 97,651,212 ZEAL and 42,570,879,908 NACHO on L2 without full L1 backing. The report also says about 4.5 billion NACHO remained with the attacker on L1.

Pauses, warnings and the next step

In response, Igra paused iKAS exits to Kaspa L1 as well as Hyperlane transfers. Users were advised not to bridge KRC-20 tokens, not to buy ZEAL or NACHO on L2 decentralized exchanges, and not to add liquidity to the affected pools.

The article states that native KAS and Kaspa-related assets that were not bridged were unaffected. For recovery and containment, operators are expected to patch the indexer and reindex its history so that empty signatures, malformed tags and scripts that continue beyond OP_ENDIF are rejected.

A longer-term change has also been suggested. Nacho the Kat has pointed to KCC-20, a standard intended to enforce token rules within network scripts rather than relying on the same off-chain interpretation model.

Source: news.bitcoin.com