Dit weekend heeft een aanvaller 186,4 miljoen ZEAL en 54,4 miljard NACHO uit een Kaspa KRC-20-bridge-wallet gehaald zonder over de privésleutel te beschikken, waarna hij de tokens via layer-2 (L2)-netwerken heeft gerecycled en in liquiditeitspools heeft verkocht. Het vreemde is dat Kaspa zelf niet gehackt werd. Vijf geldige transacties zorgden ervoor dat een off-chain-indexer overdrachten herkende die in werkelijkheid door niemand waren ondertekend, waardoor de via de bridge overgedragen tokens geen dekking meer hadden en sommige pools maar liefst 99,6% van hun waarde aan de KAS-zijde kwijtraakten.
Kasplex KRC-20 Indexer Signature leidt geld weg uit twee tokenpools

Belangrijkste conclusies
- Een aanvaller verplaatste 54,4 miljard NACHO zonder in het bezit te zijn van de privésleutel van de bridge-wallet.
- Zealous Swap-pools verloren 94% tot 99,6% van hun waarde aan de KAS-zijde na de vervalste overboekingen.
- Igra heeft belangrijke uitbetalingen opgeschort terwijl KRC-20-beheerders zich voorbereiden om het systeem te patchen en opnieuw te indexeren.
Vijf transacties, geen privésleutel
Een privésleutel hoort het verschil te maken tussen het bezitten van crypto en alleen maar weten waar het zich bevindt. Op 20 september vond iemand een manier om die aanname voor KRC-20-tokens te omzeilen zonder de basisketen van Kaspa ook maar enigszins te verstoren.
De aanvaller verplaatste 186.425.259 ZEAL en 54.397.983.246 NACHO vanuit een bridge-bewaaradres, hoewel hij geen controle had over de privésleutel daarvan. Die tokens werden vervolgens teruggestuurd naar hetzelfde bewaaradres als gewone bridge-stortingen, geslagen op de EVM-laag van Igra Labs en Kasplex L2, en gedumpt in de liquiditeitspools van Zealous Swap.
Toen het stof was neergedaald, waren de L2-saldi van de aanvaller in ZEAL en NACHO leeg, terwijl de getroffen pools tussen 94% en 99,6% van hun waarde aan de KAS-zijde hadden verloren. Hier zit de crux: Kaspa’s laag één (L1) deed precies wat het moest doen.
Een lege handtekening die toch werd geaccepteerd
Het eigendom van KRC-20-tokens wordt niet rechtstreeks afgedwongen door de Kaspa-consensus. Tokeninstructies zitten vervat in Kaspa-transacties, terwijl een off-chain Kasplex-indexer die instructies leest en bepaalt wie wat bezit. Normaal gesproken bevat een KRC-20-overdracht een openbare sleutel, tokeninstructies en een geldige handtekening. De aanvaller behield die vertrouwde structuur, maar leverde een lege handtekening aan en voegde een OP_NOT toe na OP_ENDIF.

Een lege handtekening zorgt ervoor dat OP_CHECKSIG ‘false’ retourneert in plaats van de transactie direct te blokkeren. De extra OP_NOT draaide dat resultaat weer om naar ‘true’, waardoor Kaspa een geldige transactie overhield. Op de consensuslaag was er niets misgegaan. Bij de indexer lag het anders. Deze herkende de KRC-20-envelop, maar eiste niet dat het script exact overeenkwam met het canonieke formaat. Bijgevolg werd de vervalste overdracht als legitiem erkend. De eigen API van Kasplex retourneerde zelfs opAccept: 1 bij de eerste vervalste ZEAL-transactie.
Iedereen kon de vervalsing maken
De meest vervelende wending was dat de aanvaller geen verborgen inloggegevens hoefde te achterhalen. Een standaard Kaspa-adres maakt de openbare sleutel zichtbaar die nodig is om de vervalste KRC-20-transactie samen te stellen. Dat betekent dat het verplaatsen van de tokens naar een ander adres het onderliggende probleem niet oplost. Totdat de indexer is gepatcht en de geschiedenis opnieuw is geïndexeerd, kan dezelfde kwetsbaarheid in theorie worden gebruikt tegen KRC-20-saldi elders.
Vijf transacties vervalsten de ZEAL- en NACHO-overboekingen. Negen kleine opnames van één eenheid daarentegen waren daadwerkelijk ondertekend door de bewaarder en lijken testtransacties te zijn geweest om te controleren of de ontsnappingsroute werkte. Interessant genoeg waren de legitieme transacties juist de kleine. De bewaarder-wallet bevatte ongeveer 50 andere KRC-20-tokens. De aanvaller koos er twee uit.
De tokens zijn er nog steeds, maar de dekking ontbreekt
Zondagmorgen zei Igra dat de volledige ZEAL- en NACHO-bezittingen van de bewaarportemonnee waren weggehaald, waardoor er 97.651.212 ZEAL en 42.570.879.908 NACHO op de Layer 2-netwerken achterbleven zonder volledige L1-dekking. Nog eens 4,5 miljard NACHO bleef bij de aanvaller op L1 achter.
Igra heeft iKAS-uitbetalingen naar Kaspa L1 en Hyperlane-overboekingen opgeschort, terwijl gebruikers werden gewaarschuwd om geen KRC-20-tokens te bridgen, geen ZEAL of NACHO te kopen op gedecentraliseerde L2-beurzen (DEX’s) en geen liquiditeit toe te voegen aan de getroffen pools. Native KAS, de Kaspa-consensus en Igra-activa die geen overgebrugde KRC-20-tokens waren, werden beschreven als niet-getroffen.
Het repareren van de software alleen zal de puinhoop niet opruimen. Zealous Swap stelt dat operators de indexer moeten patchen en de geschiedenis ervan opnieuw moeten indexeren, waarbij lege handtekeningen, onjuist gevormde tags en scripts die verder gaan dan OP_ENDIF moeten worden afgewezen. Nacho the Kat zegt ondertussen dat de gemeenschap van plan is over te stappen op KCC-20, een standaard die is ontworpen om tokenregels in scripts op te nemen die door het netwerk zelf worden afgedwongen.
Dit probleem volgt op een reeks exploits, bugs, hacks en datalekken van de afgelopen weken. Zaterdag maakte Blink Wallet, aanbieder van zowel custodiale als niet-custodiale infrastructuur voor het Lightning Network, bekend dat „enkele tientallen“ custodiale accounts waren leeggehaald. Ook bij cyberbeveiligingsbedrijf DCENT werden deze week DCENT App Wallets leeggehaald. Dit gebeurt op een moment dat cyberaanvallen zijn toegenomen, en sommigen vermoeden dat AI deze golf van aanvallers ondersteunt.
Dit artikel is met behulp van AI uit het Engels vertaald. De originele Engelstalige versie is de gezaghebbende bron; geautomatiseerde vertalingen kunnen onnauwkeurigheden bevatten, met name in juridische en regelgevende terminologie.











