Coinspect zufolge schrumpfte die effektive Suchmenge für 128-Bit- und 256-Bit-Entropie durch den fehlerhaften Generator drastisch. Statt der erwarteten Räume von 2^128 und 2^256 blieben demnach nur ungefähr 2^39 beziehungsweise 2^47 übrig. Das sei klein genug, um die möglichen Werte mit gewöhnlicher Hardware vollständig durchzugehen. Das Unternehmen stellte die Angriffskette nach, indem es Ausgaben des Generators enumerierte, in BIP39-Phrasen umwandelte, daraus Adressen ableitete und diese mit öffentlichen Blockchain-Daten abglich.
Nach Angaben von Coinspect wurde die Schwachstelle in zwei Wellen ausgenutzt. Ein erster Durchlauf am 27. Mai entzog 431 Konten rund 3,14 Millionen US-Dollar. Ein zweiter Angriff zwischen dem 30. Mai und dem 13. Juli brachte weitere 2,55 Millionen US-Dollar von Adressen ein, die 522 Seeds zugeordnet wurden, darunter rund 2,18 Millionen USDT aus einem Tron-Konto am 4. Juli. Insgesamt verfolgt die spätere Analyse 2.114 identifizierte Seeds und zugehörige Adressen über Bitcoin, Ethereum, Tron, Rootstock und Polygon. Zusammen ergeben die Auswertungen bis zum 13. Juli messbare Verluste von 5.690.922 US-Dollar, die Coinspect ausdrücklich als Untergrenze bezeichnet.
Der Ursprung des Problems reicht tief in die Historie von CryptoJS zurück. Der auf Multiply-With-Carry basierende Generator, der mit Math.random() initialisiert wurde, kam im Juni 2014 hinzu. Die Versionen 3.2.0 und 3.2.1 wechselten zwar auf native kryptografische Zufallswerte, doch mit 3.3.0 wurde der schwache Code wiederhergestellt, weil die Änderung als nicht rückwärtskompatibel galt. Ein Upgrade innerhalb des 3.x-Zweigs konnte ein Projekt damit aus einer behobenen Version wieder in eine verwundbare bringen. Erst Version 4.0.0 stellte im Februar 2020 native Zufälligkeit dauerhaft wieder her.
CryptoJS-Betreuer Evan Vosberg veröffentlichte am 5. August die Sicherheitsmeldung GHSA-rg76-677x-56q9 mit der Einstufung „Kritisch“ und einem CVSS-Wert von 9,0. Im Paketfeld sind alle Versionen unterhalb von 4.0.0 aufgeführt, obwohl 3.2.0 und 3.2.1 eine Ausnahme darstellen. In der Meldung heißt es zugleich, dass eine Anwendung nur dann betroffen ist, wenn sie die verwundbare Funktion zur Erzeugung sicherheitsrelevanter Werte nutzt. Die bloße Abhängigkeit von dem Paket reicht dafür nicht aus, weshalb der angegebene Paketbereich größer ist als die Menge tatsächlich ausnutzbarer Anwendungen.
Als einen Weg in Wallet-Software identifizierte Coinspect ferrumnet/bip39, einen React-Native-Fork, der die native kryptografische Zufälligkeit des ursprünglichen bip39 durch CryptoJS ersetzte. Das sei aber nicht der einzige Pfad gewesen. Coinspect bestätigt inzwischen fünf Anwendungen, die den Generator für Wiederherstellungsphrasen nutzten. Zugleich betont das Unternehmen, nicht sicher sagen zu können, alle verwundbaren Wallets gefunden zu haben. Weitere betroffene mobile Wallets oder Browser-Erweiterungen könnten bereits aus App-Stores oder Erweiterungs-Marktplätzen verschwunden sein, oder Hersteller hätten sie durch gepatchte Fassungen ersetzt, sodass ältere verwundbare Versionen nicht mehr verfügbar waren.
Für RRWallet, Bexo, Bitcoin Libre und Milo nennt die öffentliche Offenlegung keine vollständigen betroffenen Versionsbereiche. Coinspect erklärte gegenüber The Hacker News zudem, dass Bexos Korrektur in Version 20.1.0 nicht plattformspezifisch sei, die aktualisierten Builds aber noch nicht hochgeladen gewesen seien. The Hacker News überprüfte daraufhin am 6. August die offiziellen Store-Einträge von Bexo: Im App Store stand für das iPhone Version 18.3.5 als aktuelle Ausgabe, bei Google Play war zwar ein Android-Update vom 20. Mai verzeichnet, jedoch ohne öffentliche Versionsnummer. Keiner der Einträge bestätigte zum Zeitpunkt der Prüfung die Verfügbarkeit von Version 20.1.0.
NanChat war laut Coinspect mit Stand 6. August die einzige namentlich genannte Anwendung mit einer öffentlichen Warnmeldung. Darin heißt es, Nutzer sollten jede vor Version 1.3.0 erstellte Wallet als kompromittiert betrachten und migrieren. Version 1.3.0 enthält ein Werkzeug, um einen neuen Seed zu erzeugen und Guthaben zu verschieben. Coinspect-Gründer und -Chef Juliano Rizzo meldete das Problem am 10. Juni; zwei Tage später wurde die Korrektur ausgeliefert.
Coinspect hielt die technischen Details nach eigenen Angaben zwei Monate zurück, während Hersteller informiert und exponierte Adressen gesucht wurden. Der öffentliche Prüfdienst des Unternehmens akzeptiert Wallet-Adressen, nicht aber Wiederherstellungsphrasen oder private Schlüssel. Ein Treffer bedeutet laut Coinspect, dass Vermögenswerte, die an dieselbe Phrase gebunden sind, unmittelbar gefährdet sein können. Ein negatives Ergebnis besagt nur, dass die Adresse nicht in den derzeit veröffentlichten Datensätzen enthalten ist.
