Auf npm sind kompromittierte Varianten des Pakets "rand-user-agent" aufgetaucht, die einen Remote-Access-Trojaner (RAT) an Bord hatten. Der Random User Agent ist zwar als veraltet gekennzeichnet, kommt aber nach wie vor auf gut 40.000 wöchentliche Downloads. Wer es in den vergangenen Wochen verwendet hat, könnte sich Schadcode eingefangen haben.
Das Paket generiert User-Agents-Strings, also Zeichenketten, die Clients wie Browser an einen Server schicken. Der Herausgeber des Pakets WebScrapingAPI nutzt es für das Web-Scraping. Es lässt sich aber auch für andere Zwecke wie automatisierte Tests oder Sicherheitschecks verwenden.
Die letzte offizielle Version 2.0.82 ist sieben Monate alt, und der Herausgeber WebScrapingAPI hat das Paket als deprecated (veraltet) gekennzeichnet. Das auf der npm-Seite verlinkte GitHub-Repository existiert inzwischen nicht mehr.
Das auf Supply-Chain-Security spezialisierte Unternehmen aikido hat jedoch später veröffentlichte Versionen des Pakets auf npm gefunden. Diese haben in der Datei dist/index.js Schadcode eingeführt, der in der Vorschau auf npm nicht auf Anhieb zu sehen und zudem mehrfach verschleiert war.
Der Code richtet einen verdeckten Kanal zur Kommunikation mit einem Command-and-Control-Server (C2) ein und installiert Module in einem Ordner namens .node_modules. Der Client schickt anschließend unter anderem eine ID und Informationen zum verwendeten Clientbetriebssystem an den Server.
Der Remote-Access-Trojaner listet hilfreich folgende Funktionen auf:
| Command | Purpose | | --------------- | ------------------------------------------------------------- | | cd | Change current working directory | | ss_dir | Reset directory to script’s path | | ss_fcd:<path> | Force change directory to <path> | | ss_upf:f,d | Upload single file f to destination d | | ss_upd:d,dest | Upload all files under directory d to destination dest | | ss_stop | Sets a stop flag to interrupt current upload process | | Any other input | Treated as a shell command, executed via child_process.exec() |Zusätzlich legt das Initialisierungsskript unter Windows einen neuen Ordner an und fügt ihn an den Start der Umgebungsvariablen PATH ein. Der Ordnername Python3127 soll suggerieren, dass es sich um einen offiziellen Ordner für die Programmiersprache handelt, und so Schadcode als vermeintliche Python-Tools erscheinen und sich womöglich durch offizielle Python-Distributionen aufrufen lassen:
const Y = path.join( process.env.LOCALAPPDATA || path.join(os.homedir(), 'AppData', 'Local'), 'Programs\\Python\\Python3127' ) env.PATH = Y + ';' + process.env.PATHDie kompromittierten Pakete sind inzwischen wieder von npm entfernt worden. Sie trugen die Versionsnummern 2.083, 2.084 und 1.0.110. Wer in den vergangenen Monaten das Paket verwendet hat, sollte überprüfen, ob sich Schadcode auf dem Rechner befindet oder eine Kommunikation mit dem C2 stattgefunden hat.
(
Kommentare