Einführung
An diesem Wochenende hat ein Angreifer 186,4 Millionen ZEAL und 54,4 Milliarden NACHO aus einer Kaspa KRC-20 Brücken-Wallet abgezogen, ohne im Besitz des privaten Schlüssels zu sein. Die Tokens wurden anschließend über Layer-Two (L2) Netzwerke recycelt und in Liquiditätspools verkauft. Auffällig ist, dass die Kaspa-Blockchain selbst nicht gehackt wurde.
Details des Angriffs
Fünf gültige Transaktionen führten dazu, dass ein Off-Chain-Indexer Überweisungen erkannte, die niemand tatsächlich signiert hatte. Dadurch blieben die gebridgten Tokens ungesichert, und einige Pools verloren bis zu 99,6 % ihres KAS-Seitenwerts. Ein privater Schlüssel sollte die Grenze zwischen dem Besitz von Kryptowährungen und dem bloßen Wissen um deren Standort darstellen.
Am 20. September fand jemand einen Weg, diese Annahme für KRC-20 Tokens zu umgehen, ohne die Basis-Chain von Kaspa zu kompromittieren. Der Angreifer bewegte 186.425.259 ZEAL und 54.397.983.246 NACHO von einer Brückenverwahradresse, obwohl er nicht über den privaten Schlüssel verfügte. Diese Tokens wurden dann als gewöhnliche Brücken-Einlagen an dieselbe Verwahradresse zurückgesendet, auf der EVM-Schicht von Igra Labs und Kasplex L2 geprägt und in die Liquiditätspools von Zealous Swap eingezahlt.
Technische Analyse
Als sich der Staub gelegt hatte, waren die L2-Bestände des Angreifers an ZEAL und NACHO leer, während die betroffenen Pools zwischen 94 % und 99,6 % ihres KAS-Seitenwerts verloren hatten. Hier ist der Haken: Die Layer-One (L1) von Kaspa hat genau das getan, was sie tun sollte. Der Besitz von KRC-20 Tokens wird nicht direkt durch den Konsens von Kaspa durchgesetzt.
Token-Anweisungen sind in Kaspa-Transaktionen eingebettet, während ein Off-Chain-Kasplex-Indexer diese Anweisungen liest und bestimmt, wer was besitzt. Normalerweise enthält eine KRC-20-Überweisung einen öffentlichen Schlüssel, Token-Anweisungen und eine gültige Signatur. Der Angreifer behielt diese vertraute Struktur bei, lieferte jedoch eine leere Signatur und fügte ein OP_NOT nach OP_ENDIF hinzu. Eine leere Signatur führt dazu, dass OP_CHECKSIG false zurückgibt, anstatt die Transaktion sofort abzubrechen. Das zusätzliche OP_NOT kehrte dieses Ergebnis wieder in true um, wodurch Kaspa eine gültige Transaktion hatte.
Folgen und Reaktionen
Nichts war auf der Konsensschicht aus dem Ruder gelaufen. Der Indexer war eine andere Geschichte. Er erkannte den KRC-20 Umschlag, verlangte jedoch nicht, dass das Skript genau dem kanonischen Format entspricht. Folglich wurde die gefälschte Überweisung als legitim gutgeschrieben. Die eigene API von Kasplex gab sogar opAccept: 1 für die erste gefälschte ZEAL-Transaktion zurück.
Die gemeinste Wendung war, dass der Angreifer kein verborgenes Credential entdecken musste. Eine Standard-Kaspa-Adresse gibt den öffentlichen Schlüssel preis, der benötigt wird, um die gefälschte KRC-20-Operation zu konstruieren. Das bedeutet, dass das Verschieben der Tokens zu einer anderen Adresse das zugrunde liegende Problem nicht löst. Bis der Indexer gepatcht und seine Historie neu indiziert wird, kann derselbe Fehler theoretisch gegen KRC-20-Bestände anderswo verwendet werden.
Legitime Transaktionen und weitere Entwicklungen
Fünf Transaktionen haben die ZEAL- und NACHO-Überweisungen gefälscht. Neun winzige Abhebungen von einer Einheit hingegen wurden tatsächlich von der Verwahrung signiert und scheinen Tests gewesen zu sein, um zu prüfen, ob die Ausstiegsroute funktionierte. Interessanterweise waren die legitimen Transaktionen die kleinen. Die Verwahrungs-Wallet hielt etwa 50 andere KRC-20 Tokens. Der Angreifer wählte zwei aus.
Am Sonntagmorgen erklärte Igra, dass die gesamten Bestände an ZEAL und NACHO der Verwahrungs-Wallet entnommen wurden, sodass 97.651.212 ZEAL und 42.570.879.908 NACHO in den Layer-2-Netzwerken ohne vollständige L1-Unterstützung verblieben. Weitere 4,5 Milliarden NACHO blieben beim Angreifer auf L1.
Igra pausierte iKAS-Ausgänge zu Kaspa L1 und Hyperlane-Transfers, während die Benutzer gewarnt wurden, KRC-20 Tokens zu bridgen, ZEAL oder NACHO auf L2 dezentralen Börsen (DEXs) zu kaufen oder Liquidität zu betroffenen Pools hinzuzufügen. Native KAS, der Konsens von Kaspa und Igra-Assets, die keine gebridgten KRC-20 Tokens waren, wurden als nicht betroffen beschrieben.
Schlussfolgerung
Allein die Software zu reparieren wird das Chaos nicht beseitigen. Zealous Swap sagt, dass die Betreiber den Indexer patchen und seine Historie neu indizieren müssen, leere Signaturen, fehlerhafte Tags und Skripte, die über OP_ENDIF hinausgehen, ablehnen. Nacho the Kat hingegen sagt, dass die Community beabsichtigt, auf KCC-20 zuzugehen, einen Standard, der darauf abzielt, Token-Regeln in Skripte zu integrieren, die vom Netzwerk selbst durchgesetzt werden.
Das Problem folgt einer Reihe von Exploits, Bugs, Hacks und Datenverletzungen in den letzten Wochen. Am Samstag gab der Anbieter von verwahrten und nicht verwahrten Infrastrukturen des Lightning Network, Blink Wallet, bekannt, dass „einige Dutzend“ verwahrte Konten entleert wurden. Das Cybersicherheitsunternehmen DCENT sah diese Woche ebenfalls, dass DCENT App Wallets siphoniert wurden. Das Timing kommt, während Cyberangriffe zugenommen haben, und einige vermuten, dass KI diese Welle von Ausbeutern unterstützt.