Betroffen waren vier kompromittierte Pakete im @asyncapi-Namensraum. Socket beschreibt, dass die präparierten Versionen ein verstecktes JavaScript-Implantat auslieferten. Jedes Paket enthielt demnach eine injizierte Quelldatei, die zur gleichen Zweitstufen-Komponente dekodiert wird.
Der Ablauf unterscheidet sich von früheren npm-Angriffen mit Preinstall- oder Postinstall-Skripten. Wie StepSecurity betont, gibt es in den betroffenen package.json-Dateien keinerlei preinstall-, postinstall- oder install-Skripte. Stattdessen wird der Dropper erst aktiv, wenn das vergiftete Modul im regulären Einsatz per require() geladen wird, also etwa während eines Builds oder eines Entwickler-Workflows und nicht schon bei npm install.
Die nächste Stufe ist ein verschlüsselter JavaScript-Loader namens „sync.js“. Er wird laut Quelltext in betriebssystemspezifische Pfade geschrieben und anschließend ausgeführt. Die Downloader-Adresse lautet „ipfs[.]io/ipfs/QmQobZSp1wRPrpSEQ56qnyq7ecZh5Bg5k1fnjt4SUwwHb9“.
Das von den Forschern analysierte Framework bündelt 744 Module und ist als Befehls-Framework aufgebaut. Es unterstützt sechs unabhängige Kommunikationskanäle für Command-and-Control: HTTP, Nostr Relay, IPFS, BitTorrent DHT, libp2p GossipSub P2P Mesh und einen Ethereum-Smart-Contract. Laut der Analyse dient die Malware nicht nur dem Diebstahl von Zugangsdaten, sondern auch der Vergiftung von KI-Werkzeugen, seitlicher Bewegung im lokalen Netz und einer wurmartigen Verbreitung über die Registries npm, PyPI und Cargo.
Für die Persistenz richtet Miasma eigene Mechanismen ein, darunter systemd, crontab, macOS launchd und Windows-Registry-Schlüssel für den Autostart. Hinzu kommt ein sogenannter Totmannschalter: Er überwacht ein gestohlenes Token und löst das Löschen eines Verzeichnisses aus, falls das Token widerrufen wird. Außerdem meidet die Schadsoftware laut Bericht Systeme, die als Sandbox oder virtuelle Umgebung erkannt werden, ebenso wie Systeme mit russischer Spracheinstellung oder installierten Sicherheitswerkzeugen von CrowdStrike, SentinelOne, Microsoft Defender, CarbonBlack, Cylance, Osquery, Tanium und Qualys.
OX Securitys Moshe Siman Tov Bustan sagte, die Malware weise zwar Ähnlichkeiten mit den Kampagnen Shai-Hulud und Miasma auf und enthalte mehrfach die Zeichenkette „Miasma“, sei aber weder identisch mit diesen noch den früher beobachteten Kampagnen Miasma, Shai-Hulud oder TeamPCP zugeordnet. Den klarsten operativen Pfad beschreibt der Bericht als REST-basiertes Command-and-Control: Das Implantat meldet sich bei einem HTTP-Endpunkt, akzeptiert verschlüsselte Befehle und sendet die Ergebnisse an dieselbe Infrastruktur zurück. Darüber hinaus unterstützt die Nutzlast Upload-Transport, Befehlsverschlüsselung, Knotensignierung, Nutzlast-Updates, Dateiverwaltung, Shell-Ausführung und das Schreiben von Persistenzmechanismen.
Laut StepSecurity verschaffte sich der Angreifer Push-Zugriff auf die Repositories und nutzte dann die echte Release-Workflow-Kette der Projekte über GitHub Actions, um die Pakete zu veröffentlichen. Sicherheitsforscher Rohan Prabhu ordnete den Vorfall deshalb als Kompromittierung der CI/CD-Pipeline ein, nicht als Fall gestohlener npm-Tokens oder böswilliger Maintainer. Die so erzeugten Pakete trugen gültige SLSA-Provenienz-Nachweise, die laut Prabhu lediglich belegen, dass sie vom autorisierten Workflow erstellt wurden, nicht aber, dass auch die auslösenden Commits legitim waren.
Alle fünf bösartigen Versionen wurden inzwischen aus dem npm-Register entfernt. StepSecurity weist jedoch darauf hin, dass jeder Endpunkt, der eine der betroffenen Paketversionen importiert oder ausgeführt hat, als potenziell kompromittiert betrachtet werden sollte. Ob tatsächlich eine Gefährdung vorliegt, hängt demnach davon ab, ob das infizierte Modul in einem Build oder einem Entwickler-Workflow geladen wurde.
