Der Loader steckt in der Methode BTree.prototype.set() der Bibliothek selbst. Er wird erst zur Laufzeit ausgeführt, wenn eine Anwendung die Funktion mit einem bestimmten Schlüsselwert aufruft. „Der Malware-Loader versteckt sich in der Methode BTree.prototype.set der Bibliothek selbst — der Hauptfunktion, die jeder Nutzer ständig aufrufen würde", erklärt Checkmarx. „Das löst sharedLoad.min.js aus, das die verschleierte erste Stufe der Schadsoftware enthält. Das ist ein gut gebauter Weg, um an üblichen Taint-Analyse-Werkzeugen und den meisten statischen Scannern vorbeizukommen."

Ist der Code einmal aktiv, sammelt er Systemdetails wie Architektur, Hostname, CPU, Arbeitsspeicher und Laufzeit des Systems. Die Daten fließen über fest im Code hinterlegte Slack- und Telegram-Kanäle ab.

Für die Steuerung nutzt die Schadsoftware einen ungewöhnlichen Kanal: Sie fragt einen Ethereum-Smart-Contract im Sepolia-Testnetz nach Command-and-Control-Informationen ab. Über einen X25519-Schlüsselaustausch leitet sie einen AES-Schlüssel ab und entschlüsselt damit eine zweite Nutzlast, die im Contract hinterlegt ist.

Anzeige

Die Operation ist auch auf das Verwischen von Spuren ausgelegt. Entscheiden die Betreiber, den Angriff zu beenden, kann die Schadsoftware ihre eigenen Dateien löschen und den schädlichen Auslöser aus dem Paketcode entfernen.

Auffällig ist der Aufwand, mit dem das Projekt seriös wirken sollte: Die Angreifer legten ein glaubwürdig aussehendes GitHub-Repository an, füllten dessen Commit-Historie und pflegten das Entwicklerkonto. Laut Checkmarx nutzen die Täter eine Wallet mit 109 ETH; der Bericht erklärt allerdings nicht, dass diese Mittel aus Kryptodiebstahl stammen.

Neben ‘indexed-btree’ stieß Checkmarx auf neun weitere npm-Pakete, die zur selben Operation gehören und ebenfalls hohe Downloadzahlen erreichten. Sie wurden aus der npm-Registry entfernt.

Entwicklern rät Checkmarx, sich nicht allein auf Prüfungen zum Installationszeitpunkt zu verlassen, sondern zusätzlich auf verhaltensbasierte Analyse zur Laufzeit zu setzen. Wer ‘indexed-btree’ oder eines der weiteren betroffenen Pakete installiert hat, sollte sämtliche Geheimnisse und Zugangsdaten austauschen und die Entwicklungsumgebung aus einem sicheren Backup wiederherstellen.