
npm-Malware versteckt sich im Laufzeitcode, nicht in Installationsskripten
Checkmarx hat entdeckt, dass das npm-Paket indexed-btree, das zwei Millionen Mal pro Woche heruntergeladen wurde, seine Malware im Laufzeitcode statt in Installationsskripten versteckt.
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.
So schützen Sie sich
- Wenn Sie eine Website besitzen, die mit fremden Codebausteinen erstellt wurde, bitten Sie die Person, die sie wartet, nach den Paketnamen in dieser Geschichte zu suchen und alle zu entfernen, die sie findet.
- Ändern Sie die Passwörter und Zugangsschlüssel für jeden Dienst, der jemals auf einem Computer eingerichtet wurde, auf dem diese Art von Code installiert worden sein könnte, denn gestohlene Schlüssel können später wiederverwendet werden.
- Halten Sie eine aktuelle Sicherung Ihrer Website und Ihres Arbeitscomputers bereit, damit Sie sauber neu aufbauen können, falls sich etwas als infiziert erweist.
- Fügen Sie keine Softwarebausteine von unbekannten Herausgebern hinzu, nur weil sie beliebt sind; prüfen Sie, wer sie erstellt hat und wie lange das Projekt schon existiert.
- Aktivieren Sie automatische Updates und die zweistufige Anmeldung, wo immer sie angeboten werden, damit ein gestohlenes Passwort nicht ausreicht, um einem Angreifer Zutritt zu verschaffen.
Begriffe Erklärt
- npm Ein öffentlicher Online-Katalog, den Softwareentwickler nutzen, um fertige Codebausteine in ihre Projekte herunterzuladen.
- install script Ein kleines Code-Stück, das während der Installation einer Softwarekomponente von selbst ausgeführt wird, bevor jemand sie benutzt.
- supply chain attack Ein Angriff, bei dem Kriminelle eine weithin vertraute Softwarekomponente kompromittieren, anstatt jedes Opfer einzeln zu hacken.
- obfuscated Absichtlich verwirrend geschrieben, sodass ein Mensch, der es liest, nicht leicht erkennen kann, was es tut.
- runtime Der Moment, in dem ein Programm tatsächlich läuft und seine Arbeit tut, im Gegensatz zu dem Moment, in dem es installiert wird.
- command-and-control Der Kanal, über den Kriminelle Befehle an eine infizierte Maschine senden und Informationen von ihr zurückerhalten.
- smart contract Ein kleines Programm, das auf einer Blockchain gespeichert ist und automatisch ausgeführt wird, wenn bestimmte Bedingungen erfüllt sind.