Nach Darstellung des Sicherheitsforschers Ashish Kurmi von StepSecurity war der Angriff gezielt vorbereitet: Die schädliche Abhängigkeit sei 18 Stunden im Voraus bereitgestellt worden, für die drei Betriebssysteme habe man drei separate Payloads vorab erstellt, und beide Release-Zweige seien innerhalb von 39 Minuten getroffen worden. Jede Spur sei auf Selbstzerstörung ausgelegt gewesen.

Laut StepSecurity kompromittierte der Angreifer das npm-Konto von “jasonsaayman” und änderte die hinterlegte E-Mail-Adresse auf eine von ihm kontrollierte Proton-Mail-Adresse (“ifstap@proton.me”). Das Paket “plain-crypto-js” wurde von einem npm-Nutzer namens “nrwise” mit der Adresse “nrwise@proton.me” veröffentlicht. Vermutlich erlangte der Angreifer einen langlebigen klassischen npm-Zugriffstoken für das Konto, um die vergifteten Axios-Versionen direkt in die Registry zu laden.

Die eingebettete Schadsoftware wird über einen obfuskierten Node.js-Dropper (“setup.js”) gestartet und verzweigt je nach Betriebssystem in einen von drei Angriffspfaden. Jede Plattform sendet laut StepSecurity einen eigenen POST-Inhalt an dieselbe C2-URL – packages.npm.org/product0 (macOS), product1 (Windows) und product2 (Linux) –, sodass der Server über einen einzigen Endpunkt eine passende Payload ausliefern kann.

Die nachgeladene macOS-Binärdatei ist ein in C++ geschriebener RAT, der das System fingerabdruckt und sich alle 60 Sekunden bei einem Server meldet, um Befehle abzurufen. Er kann weitere Payloads ausführen, Shell-Befehle absetzen, das Dateisystem durchsuchen und sich selbst beenden. SafeDep zufolge unterstützt der Linux-RAT dieselben Befehle; mangels Persistenzmechanismus überlebt die Schadsoftware keinen Neustart. Das deute entweder auf eine schnelle Datenexfiltration hin oder darauf, dass über die Fähigkeit, Binärdateien und Shell-Befehle auszuführen, eine Persistenz nachgeladen werde.

Bemerkenswert sei die Zurückhaltung des Angriffs, so SafeDep: An den Axios-Quelldateien wurde nichts verändert, weshalb herkömmliche, auf Diffs basierende Code-Reviews ihn kaum erkennen. Das schädliche Verhalten stecke vollständig in einer transitiven Abhängigkeit und werde automatisch über npms postinstall-Lebenszyklus ausgelöst.

Nach dem Start der Haupt-Payload führt die Node.js-Schadsoftware drei forensische Aufräumschritte aus: Sie entfernt das postinstall-Skript aus dem Paketverzeichnis, löscht die “package.json” mit dem postinstall-Hook und benennt “package.md” in “package.json” um. Die in “plain-crypto-js” enthaltene Datei “package.md” ist ein sauberes Manifest ohne den auslösenden Hook – der Austausch soll bei einer nachträglichen Untersuchung des Pakets keinen Verdacht erregen.

Socket identifizierte in einer eigenen Analyse zwei weitere Pakete, die dieselbe Schadsoftware über mitgelieferte Abhängigkeiten verteilen. “@shadanai/openclaw” bündelt die schädliche “plain-crypto-js”-Payload direkt, während “@qqbrowser/openclaw-qbot@0.0.130” ein manipuliertes “axios@1.14.1” im Ordner “node_modules/” mit injizierter Abhängigkeit ausliefert. Das echte Axios habe nur drei Abhängigkeiten (follow-redirects, form-data, proxy-from-env), so das Unternehmen; die Ergänzung um “plain-crypto-js” sei eine eindeutige Manipulation, die beim Verarbeiten dieselbe schädliche postinstall-Kette auslöst.