npm-Malware versteckt sich im Laufzeitcode, nicht in Installationsskripten
Eine neue Welle von npm-Malware hat sich laut Sicherheitsforschern von Checkmarx im alltäglichen Code einer beliebten Bibliothek versteckt und nicht in den Skripten, die bei der Installation ausgeführt werden. Das Paket heißt indexed-btree und wurde auf npm veröffentlicht, dem öffentlichen Katalog, den Softwareentwickler nutzen, um fertige Codebausteine in ihre Projekte herunterzuladen, während es sich als sorted-btree ausgab, eine legitime Bibliothek mit einem sehr ähnlichen Namen. Checkmarx zufolge hatte das gefälschte Paket bereits zwei Millionen wöchentliche Downloads angesammelt.
Der Fund ist wichtig, weil er auf eine Abwehrmaßnahme abzielt, die das npm-Ökosystem erst kürzlich eingeführt hat. Im Juni 2026 kündigte GitHub eine Reihe von npm-Sicherheitsmaßnahmen an, die darauf abzielen, die Supply-Chain-Angriffe zu verhindern, die seit Ende 2025 wiederholt Open-Source-Projekte erschüttert haben. Ein Supply-Chain-Angriff ist einer, bei dem Angreifer nicht direkt in ein Opfer eindringen, sondern eine Komponente kompromittieren, der viele Opfer vertrauen und die sie installieren. Eine der wichtigsten Maßnahmen blockiert Dependency-Lifecycle-Skripte, die kleinen Codestücke mit den Namen preinstall, install und postinstall, die während der Installation automatisch ausgeführt werden, es sei denn, sie werden ausdrücklich genehmigt. Andere Maßnahmen verhindern, dass npm ohne Erlaubnis automatisch Abhängigkeiten von Git-Repositories oder entfernten Webadressen bezieht.
indexed-btree umgeht all das, indem es überhaupt kein Installationsskript verwendet. Stattdessen ist der Loader in der eigenen Methode BTree.prototype.set() der Bibliothek versteckt, die Checkmarx als die Hauptfunktion beschreibt, die jeder Nutzer der Bibliothek ständig aufrufen würde. Diese Methode tut während der Installation des Pakets nichts Verdächtiges; sie handelt nur zur Laufzeit, also während die Anwendung tatsächlich läuft, und nur, wenn sie mit einem bestimmten Schlüsselwert aufgerufen wird. Infolgedessen sieht die Installation völlig sauber aus und löst keine der Genehmigungsmechanismen von npm Version 12 aus. Der versteckte Loader ist eine Datei namens sharedLoad.min.js, die die erste Stufe der Malware in verschleierter Form enthält, das heißt, sie wurde absichtlich verwirrend geschrieben, damit ihr eigener Zweck schwer zu erkennen ist.
Checkmarx merkt an, dass dies eine gut gebaute Methode ist, um an Standard-Taint-Analyse-Tools vorbeizukommen, die verfolgen, wie Daten durch ein Programm fließen, und an den meisten statischen Scannern, die Code untersuchen, ohne ihn jemals auszuführen. Da das schädliche Verhalten erst auftritt, wenn die Anwendung läuft, sehen Tools, die ein Paket zur Installationszeit untersuchen, nichts Ungewöhnliches.
Sobald es läuft, sammelt die Malware Details über die Maschine, auf der sie gelandet ist, darunter Prozessorarchitektur, Hostname, CPU, Speicher und Uptime, und sendet diese Informationen über fest codierte Slack- und Telegram-Kanäle nach außen. Sie fragt auch einen Smart Contract im Sepolia-Testnetz, einer Ethereum-basierten Testumgebung, ab, um ihre Command-and-Control-Informationen abzurufen, also die Anweisungen, die Betreiber an infizierte Maschinen senden. Sie verwendet X25519-Schlüsselaustausch, um einen AES-Schlüssel abzuleiten, zwei kryptografische Methoden, mit denen die geheimen Codes erzeugt und ausgetauscht werden, die Daten ver- und entschlüsseln, und entschlüsselt dann eine Payload der zweiten Stufe, die in diesem Vertrag gespeichert ist. Die Betreiber können auch wählen, den Angriff zu beenden: Die Malware kann ihre eigenen Dateien löschen und den bösartigen Auslöser aus dem Paketcode entfernen, wodurch die hinterlassenen Spuren verwischt werden.
Die Forscher berichten, dass die Angreifer erheblichen Aufwand betrieben haben, um das Projekt vertrauenswürdig erscheinen zu lassen, indem sie ein legitim aussehendes GitHub-Repository aufbauten, dessen Commit-Historie füllten und das Entwicklerkonto, das es veröffentlichte, pflegten. Die Kampagne könnte auch profitabel gewesen sein. Laut Checkmarx verwenden die Angreifer eine Wallet mit 109 ETH, der Kryptowährung des Ethereum-Netzwerks. Der Bericht sagt nicht, dass diese Mittel aus Kryptowährungsdiebstahl stammen, und dieser Zusammenhang wurde nicht hergestellt.
Checkmarx identifizierte neun weitere npm-Pakete, die mit derselben Operation verbunden sind, und berichtet, dass sie inzwischen von npm entfernt wurden. Auch sie erreichten beträchtliche Downloadzahlen: ordered-kv-index (448.184), btree-leaderboard (493.685), priority-slot-queue (402.860), btree-range-store (468.092), btree-core (1.951.274), btree-time-index (425.312), btree-lru-cache (372.185), neighbor-key-map (366.019) und sliding-score-window (448.024).
Die praktische Lehre, die die Forscher ziehen, ist, dass Scannen zur Installationszeit allein nicht ausreicht, weil sich ein Paket während der Installation einwandfrei verhalten und viel später feindselig werden kann. Checkmarx empfiehlt, Laufzeit-Verhaltensanalyse hinzuzufügen, das heißt zu beobachten, was installierter Code tatsächlich tut, während er läuft. Allen, die indexed-btree oder eines der neun oben aufgeführten Pakete installiert haben, wird empfohlen, alle Geheimnisse zu rotieren, mit anderen Worten jedes Passwort, jeden Zugriffstoken und jeden Schlüssel zu ersetzen, den die betroffene Maschine gesehen haben könnte, und die Entwicklungsumgebung aus einem sicheren Backup wiederherzustellen, anstatt zu versuchen, sie vor Ort zu bereinigen. Für Teams, die eine unabhängige Überprüfung dessen wünschen, was in ihren eigenen Systemen läuft, bietet AEU-I Security-First-IT, Infrastruktur und Beratung an, genau die Art von Prüfung, deren Wert dieser Vorfall zeigt.