Der Ausgangspunkt der in Afghanistan beobachteten Aktivität war eine bei AWS gehostete ZIP-Datei namens „Front-Technical-Challenge.zip". Die Angreifer gaben sich als Personalvermittler eines großen Technologiekonzerns aus, sprachen einen Softwareentwickler wegen einer Ingenieursstelle an und luden ihn zu einer technischen Aufgabe ein.
Das Archiv enthält den Quellcode eines Projektmanagement-Werkzeugs namens Taskflow. Die Kandidaten sollen innerhalb von drei Stunden „alle Fehler im Frontend-Code finden und beheben" – ausdrücklich ohne KI-gestützte Werkzeuge. Die Serverkomponente „server.js" dürfe nicht verändert werden, sie sei „fehlerfrei und funktioniert korrekt". Genau dort steckt der Schadcode.
„Die erste Zeile von server.js importierte ein trojanisiertes npm-Paket namens colorized_terminal in Version 2.1.0", so Kaspersky. Das Paket wurde nicht im npm-Register veröffentlicht, sondern direkt im Verzeichnis node_modules des Aufgabenarchivs mitgeliefert. Beim Import startet es unbemerkt einen Implantat-Prozess aus node_modules/.cache/.320697f1/index.js im Hintergrund.
Dabei handelt es sich um NodeRabbit. Der Trojaner kommuniziert mit einer von drei bei Azure gehosteten C2-Adressen – plugplay.azurewebsites[.]net, rgbteller.azurewebsites[.]net und wslwebui.azurewebsites[.]net – über drei API-Endpunkte. Er beherrscht elf Befehle: Systeminformationen sammeln, Prozesse auflisten, beliebige Shell-Kommandos ausführen, Verzeichnisse durchsuchen, Dateien stückweise Base64-kodiert auslesen, Base64-Text an eine gewählte Position schreiben, Dateien und Verzeichnisse rekursiv löschen, Verzeichnisse anlegen, Netzwerkadapter, MAC- und IP-Adressen sowie DNS-Einstellungen erfassen und das Beacon-Intervall ändern. Bemerkenswert ist zudem die Fähigkeit, ein Base64-kodiertes Node.js-Skript in eine zufällig benannte „.tmp"-Datei zu schreiben, auszuführen und anschließend wieder zu löschen.
Kaspersky fand zwei weitere NodeRabbit-Varianten gleicher Codeherkunft in Ägypten und Äthiopien. Die Persistenz richtet sich nach dem Betriebssystem: ein Run-Registry-Schlüssel unter Windows, ein Cron-Eintrag unter Linux, ein Launch Agent unter macOS. Die ersten beiden Varianten tarnen sich als Microsoft-Edge-Update beziehungsweise als Intels Driver & Support Assistant. Die dritte gibt sich nicht als legitime Software aus, berücksichtigt aber das Windows Subsystem for Linux und legt eine tägliche Windows-Aufgabe für 10 Uhr an, die über „wscript.exe" und „wsl.exe" ein VBScript startet; sie bringt zwölf zusätzliche Befehle mit.
PollCat wird über zeitlich begrenzte Entwicklertests ausgeliefert, etwa im Archiv „RankChallenge-react-6uJSX3-main.zip". Auffällig ist die durchgehende CTF-Terminologie: Das Wurzelpaket heißt ctf-server, das Backend gibt „CTF server running" aus, das Frontend nutzt ctf-*-Speicherschlüssel. Kaspersky hält das für Hinweise auf ein KI-gestützt oder aus Vorlagen erzeugtes Projekt – möglicherweise habe der Angreifer eine CTF-artige React-Plattform von einem KI-Assistenten generieren lassen und die Schadkomponenten später eingefügt.
Eine PDF-Anleitung im Archiv fordert das Opfer auf, ein vom Angreifer geliefertes sechsstelliges Einmalpasswort einzugeben, das alle 30 Sekunden wechselt, und die Aufgabe binnen einer Stunde zu lösen – vermutlich, um Zeitdruck zu erzeugen. PollCat läuft jedoch unabhängig von dieser Prüfung: Bei erfolgreicher Validierung wird ein JWT ausgestellt und eine zusätzliche PollCat-Instanz gestartet.
Der Trojaner legt auf allen drei Betriebssystemen eine tägliche geplante Aufgabe an, meldet Basisdaten an den C2-Server und unterstützt 22 Befehle über sieben API-Endpunkte – von Dateioperationen über Shell-Kommandos, Up- und Downloads, JavaScript-Ausführung und DLL-Laden bis zum Anlegen und Entpacken von ZIP-Archiven. Die Befehle WS_DOWNLOAD, REQUEST_ELEVATION und PERSIST sind bislang nicht implementiert. Zusätzlich sucht PollCat nach 24 fest kodierten Ordnernamen von Software- und Sicherheitsanbietern, darunter Google, Microsoft, Palo Alto Networks, Cisco, VMware, Fortinet, Citrix, Check Point, Juniper Networks, LogMeIn, Sophos, Symantec, Trend Micro, McAfee, Kaspersky Lab, ESET, Bitdefender, Avast, CrowdStrike, SentinelOne, Malwarebytes, Brave, Tencent und Naver. Gefundene Ordner werden nur auf oberster Ebene inventarisiert und als JSON an den Endpunkt „/api/system-details/result" gemeldet.
Die Zuordnung zu Nimbus Manticore stützt Kaspersky auf strukturelle Ähnlichkeiten, das Abrufen von Befehlen, das Beacon-Timing und den Befehlssatz von PollCat im Vergleich zur bereits der Gruppe zugeschriebenen Backdoor MiniFast (auch MiniUpdate oder Retrograde) sowie auf die Nutzung von Azure Websites und Cloudflare-gestützten Domains als C2.
