Die beiden manipulierten Axios-Versionen 1.14.1 und 0.30.4 wurden laut Wiz rund drei Stunden nach ihrer Veröffentlichung aus der NPM-Registry entfernt. In diesem Zeitfenster luden etwa drei Prozent der Axios-Nutzer die Pakete herunter. Kern des Angriffs war eine als plain-crypto-js bezeichnete Abhängigkeit, die 18 Stunden vor dem Angriff veröffentlicht wurde und nirgends im Axios-Code importiert wird.
Laut StepSecurity bestand ihr einziger Zweck darin, über ein Post-Install-Skript einen plattformübergreifenden Dropper für einen Remote-Access-Trojaner (RAT) auf macOS, Windows und Linux auszuführen. Der Dropper kontaktiert einen aktiven Command-and-Control-Server und liefert plattformspezifische Schadroutinen der zweiten Stufe. Diese ermöglichten laut Wiz unter allen Betriebssystemen ähnliche Funktionen: Remote-Shell-Ausführung, Code-Injektion, das Auflisten von Verzeichnissen und Prozessen sowie Systemaufklärung. Nach der Ausführung versuche die Malware, Installationsspuren zu entfernen und ihre eigenen Paket-Metadaten durch eine saubere Version zu ersetzen, um forensische Erkennung zu erschweren, so Sophos. Dieselbe Malware wurde laut Socket auch über die Pakete @shadanai/openclaw und @qqbrowser/aliyun-sdk verbreitet.
Für den Angriff kompromittierten die Täter laut Huntress das NPM-Konto von @jasonsaayman, dem Hauptbetreuer von Axios. Sie änderten die hinterlegte E-Mail-Adresse und nutzten ein langlebiges Zugriffstoken, um die Backdoor-Versionen direkt über die NPM-CLI zu veröffentlichen und so den auf GitHub Actions und OIDC basierenden CI/CD-Veröffentlichungsprozess zu umgehen.
Huntress weist auf ein entscheidendes Detail hin: Selbst im v1.x-Zweig, in dem OIDC Trusted Publishing eingerichtet war, übergab der Workflow neben den OIDC-Anmeldedaten weiterhin ein NPM_TOKEN als Umgebungsvariable. Sind beide vorhanden, verwendet NPM das Token – damit war das langlebige Token faktisch die Authentifizierungsmethode für alle Veröffentlichungen. Das erklärt, warum die Angreifer die Schutzmechanismen umgehen konnten, obwohl der Betreuer nach eigenen Angaben Multi-Faktor-Authentifizierung “praktisch überall” aktiviert hatte.
Die erste Version von plain-crypto-js war eine identische Kopie des legitimen Pakets crypto-js 4.2.0. Die schädliche Variante 4.2.1 enthielt laut StepSecurity nur drei Unterschiede: das Post-Install-Skript, einen verschleierten Dropper und einen sauberen JSON-Stub. Dieser Stub sollte sich nach Abschluss des Setup-Skripts umbenennen und Version 4.2.0 statt 4.2.1 melden, um Verteidiger glauben zu machen, ihre Systeme seien nicht kompromittiert. Die schädliche Abhängigkeit wurde rund 20 Minuten vor der ersten Axios-Backdoor veröffentlicht, die zweite folgte 39 Minuten später.
Den Angriff schreiben Forscher nordkoreanischen Hackern zu. Laut Elastic überschneidet sich die im Angriff verwendete macOS-Binärdatei mit WaveShaper, die Google der Gruppe UNC1069 zuordnet. John Hultquist, Chefanalyst der Google Threat Intelligence Group, bestätigte die Zuschreibung an einen mutmaßlich nordkoreanischen Akteur, den man als UNC1069 verfolge, und bezeichnete den Vorfall als unabhängig von den jüngsten TeamPCP-Problemen. UNC1069 ist mindestens seit 2018 aktiv und gilt als finanziell motivierter Akteur, der auf Kryptowährungen, DeFi, Softwareentwickler und Risikokapitalfirmen abzielt.
Betroffene sollten die schädlichen Pakete laut den Forschern umgehend entfernen, nach Infektionsspuren suchen und ihre Abhängigkeitsbäume prüfen. Jede Umgebung, in der plain-crypto-js 4.2.1 oder eine der Backdoor-Axios-Versionen installiert wurde, sei als kompromittiert zu behandeln, sagte Huntress-Forscher John Hammond; Anmeldedaten seien zu rotieren und auf Malware-Artefakte zu prüfen. Semgrep-CEO Isaac Evans hob hervor, dass selbst Entwickler mit festgelegten Versionen und Lockfiles getroffen werden konnten, wenn ihr Editor die Abhängigkeit im Hintergrund nachlud.
