TL; DR
Für rund 2 MonateEin einzelner npm-Infostealer ist unter wechselnden Paketnamen wieder aufgetaucht und liefert dabei nahezu unveränderte Schadsoftware. Er begann offen als forge-jsxy, entstanden forge-jsx3 / forge-jsx4 Geschwister, dann ließen sie die Marke "Forge" komplett fallen, um sich als Entwicklerinfrastruktur auszugeben - zuerst zredis-typedUnd zuletzt pinokio-redis.
Jede Variante trägt die gleiche interne Toolchain: Dateien mit dem Namen forge-jsx-explorer-*herunter, eine relayPackageServe Modul, das einem forge-jsxy-package.tgzund eine dauerhafte Laufzeitumgebung, die unter einem gepunkteten Verzeichnis versteckt ist, sodass sie auch nach dem Löschen des npm-Pakets erhalten bleibt.
Die Nutzlast lautet: Material für Kryptowährungs-Wallets und die Entwickleranmeldeinformationen vom Host und übermittelt diese an Discord Web.hooksHuggingFace Hub lädt Dateien hoch und verwendet einen fest codierten C2-Endpunkt. Es installiert einen automatischen Start auf Betriebssystemebene, sodass es nach einem Neustart automatisch wieder ausgeführt wird, und erfasst Aktivitäten aus Zwischenablage, Tastatur und Bildschirm. Die neueste Variante, pinokio-redis, bezeichnet sich selbst als eine „Autodesk Forge“-Integration – eine Beschreibung, die nichts mit der Funktion des Codes zu tun hat.
| Ökosystem | npm |
| Nutzlastklasse | mehrstufiger Infostealer + Fernsteuerungsagent (RAT) |
| Primäre Ziele | Krypto-Wallets, Browser-Wallet-Erweiterungen, Entwickler-/Cloud-Zugangsdaten |
| Beharrlichkeit | versteckte, dauerhafte Laufzeitumgebung + OS-Autostart (übersteht auch nach Paketentfernung) |
| Exfiltration | Discord-Webhooks + Relay, HuggingFace Hub, fest codierter C2 auf Port 9877 |
| Beobachtete Spanne | Mai 2026 – Juli 2026 (laufend) |
| Letzter Name | pinokio-redis:1.0.127 |
Angriffsanatomie
Alle Varianten dieser Familie werden über die gleiche Form installiert: ein Paket Es sieht auf seiner Angebotsseite inaktiv aus, deklariert aber einen Postinstallations-Hook, also Die Nutzlast wird ausgeführt, sobald das Paket als Abhängigkeit installiert ist. Der Haken treibt eine fünfstufige Kette an.
- Phase 1 – Verwirklichung. Das Installationsskript dekodiert ein gebündeltes, kodiertes Die Skripte werden in eine Reihe von Laufzeitskripten umgewandelt und in ein verstecktes Verzeichnis unterhalb des Plattformkonfigurationsverzeichnisses geschrieben (die Forge-JSXY-Versionen verwendeten ein gepunktetes .forge-JSXY/runtime/v). Da sich diese Kopie außerhalb von node_modules befindet, wird der laufende Agent durch das Entfernen oder Aufheben der Veröffentlichung des npm-Pakets nicht entfernt.
- Phase 2 – durchhalten. Die Kette registriert einen Autostart-Eintrag im Betriebssystem, sodass der Agent beim Neustart neu gestartet wird. Unter Windows wird dies über ein verstecktes PowerShell-Diagnoseskript ausgeführt; der Agentenprozess wird getrennt und mit aktivierter Fensterausblendung gestartet, sodass kein Konsolenfenster angezeigt wird.
- Phase 3 – Ausweichen. Die Laufzeitumgebung prüft auf CI-Markierungen und beendet sich stillschweigend, sobald sie eine CI-Umgebung erkennt, sodass automatisierte Build-Sandboxes nichts davon mitbekommen. In den forge-jsxy-Versionen wurde in einem Quellcodekommentar erklärt, dass das sichtbare Feld `forgeInstall` absichtlich aus der `package.json` entfernt wurde, „weil dieses Feld auf npm sichtbar wäre“ – der Betreiber hielt die Trigger-Metadaten bewusst von der öffentlichen Auflistung fern.
- Phase 4 — sammeln. Sobald der Agent läuft, erntet er in einem Durchgang:
- Material für Krypto-Wallets. Eine mitgelieferte Zielliste secret_filename_patterns.json führt eine Dateisystemdurchsuchung nach wallet.dat, *.mnemonic / durch..seed-/*.phrase-Dateien, keypair.json, Ethereum UTC– Keystores sowie *.p12-, *.pfx- und *.jks-Keystores sind enthalten. Wallet-Ableitungsbibliotheken (bip39, secp256k1, base58check und Solana-Hilfsfunktionen) sind ebenfalls im Paket enthalten.
- Browser-Wallet-Erweiterungen. Ein chromiumExtensionDbHarvest-Modul liest die lokalen Erweiterungsspeicherdatenbanken von Chromium-Browsern, den Ort, an dem browserbasierte Wallet-Erweiterungen ihre Tresordaten speichern.
- Zugangsdaten und Geheimnisse. Der Agent durchsucht den Shell-Verlauf und Dateien mit geheimen Informationen, liest Entwickler-/Cloud-Zugangsdaten und kodiert anschließend HuggingFace-Zugangsdaten zum Hochladen.
- Live-Eingang. Inhalte der Zwischenablage, Tastatureingaben und Screenshots werden fortlaufend erfasst.
Phase 5 – ExfiltrationDie gesammelten Daten verlassen den Host über drei Kanäle. Parallel betriebene Kanäle: Discord-Webhooks (discordWebhookPost) und ein Discord-Relay-Uploader, der mit `discord.com/api/v10` (discordRelayUpload), HuggingFace Hub-Uploads (hfUpload) und ein Der fest codierte C2-Endpunkt wurde über Port 9877 erreicht. Ein RelayPackageServe Das Modul liefert zusätzlich ein forge-jsxy-package.tgz-Backup – dasselbe. Der Artefaktname wird bei jeder Umbenennung beibehalten.
Der wichtige strukturelle Punkt ist, dass die Phasen 1–3 zum Installationszeitpunkt mit keine Benutzerinteraktion, und Phase 1 platziert die Nutzlast irgendwo im Paket Der Manager verfolgt die Abhängigkeit nicht. Ein Entwickler, dem die ungewöhnliche Abhängigkeit auffällt und Der Befehl `npm uninstall` entfernt den Eintrag, aber nicht den Agenten.
Die Nutzdaten sind zudem vor schnellem Auslesen geschützt. Die Laufzeitskripte werden nicht mitgeliefert. im Klartext: Ein Kodierungs- und Bereitstellungsschritt behält die operative Logik als eine kodierter Blob, der erst nach der Installationskette in lesbare Skripte umgewandelt wird dekodiert es in das versteckte Laufzeitverzeichnis. Die sichtbaren Dateien auf der Auflistung – die dünne Nachinstallations-Unterlegscheibe und eine Dismaterialisierung Helfer – geben wenig darüber preis, was letztendlich abläuft. Diese kodierte Zustellung Das Design hat einen messbaren Einfluss auf die Triage: über die gesamte Lebensspanne der Familie hinweg. Mehrere bestätigte Varianten wurden durch automatisierte Klassifizierung als sicher eingestuft. und die Nutzdaten waren so undurchsichtig, dass eine automatisierte Überprüfung gänzlich verhindert wurde. Die Verhaltensweisen, die die Familie verraten, werden erst nach der Kodierung sichtbar. Die Phase wird erweitert und die Laufzeitumgebung wird direkt gelesen.
Geschichte
Die Zuladung der Familie ist bemerkenswert konstant geblieben; was sich ändert, ist die Name auf der Schachtel. Der Bogen verläuft von der offenen „Schmiede“-Markierung hin zu tarnt sich als nicht verwandtes Entwicklerwerkzeug.
| Datum (2026) | Paket: Version | Hinweis |
|---|---|---|
| Mai (Anfang) | forge-jsxy:1.0.81, :1.0.90 | Früheste bestätigte Varianten – RAT mit AES-256-GCM-verschlüsseltem C2 |
| Mai 19 | forge-jsxy:1.0.92 / 1.0.105 / 1.0.107 / 1.0.108 | Die Kampagne läuft im aktiven Veröffentlichungsprozess; Version 1.0.92 wurde zunächst fälschlicherweise als sicher eingestuft und nach einer erneuten Codeüberprüfung korrigiert. |
| Ende Mai | forge-jsx3 / forge-jsx4:1.0.122 / 1.0.123, zod-pino | Geschwisterpaketnamen, gleiche Toolchain |
| Juni 4 | forge-jsxy:1.0.120 | Fortsetzung; vom ML-Modell als sicher eingestuft (ein Fehlalarm) |
| 21.–23. Juni | forge-jsxy:1.0.121 | Modulsatz unverändert gegenüber Version 1.0.120 |
| Juli 6 | zredis-typed:1.0.127 | „Schmiede“ wurde aus dem Namen gestrichen; Schiffe werden weiterhin schiffsverkehrt forge-jsxy-package.tgz und forgeAgent* Konfigurationsschlüssel |
| Juli 7 | pinokio-redis:1.0.127 | Gleiche Toolchain; neues C2; bezeichnet sich selbst als „Autodesk Forge“-Integration |
Zwei Dinge fallen im Verlauf der Zeitachse besonders auf. Erstens wird die Versionsnummer 1.0.127 von zredis-typed und pinokio-redis unverändert wiederverwendet – die Namensgebung ändert sich, aber die Build-Historie bleibt erhalten. Zweitens fällt die Abkehr von „forge-*“-Namen mit einer Umstellung auf Namen zusammen, die gängige Infrastruktur (redis, pinokio) kennzeichnen, wodurch die Wahrscheinlichkeit sinkt, dass ein Entwickler den Namen nur überfliegt und zögert.
Kompromissindikatoren
Die unten aufgeführten IOCs sind entschärft. Der C2-Host wechselte zwischen der forge-jsxy-Linie. und die neueste Variante unter Beibehaltung des gleichen Anschlusses.
| Indikator | Wert | Gesehen in |
|---|---|---|
| C2-Endpunkt | 212.193.3[.]61:9877 | pinokio-redis:1.0.127 |
| C2-Endpunkt | 79.108.162[.]160:9877 | forge-jsxy Zeile, zredis-typed:1.0.127 |
| Exfiltrationskanal | discord.com/api/webhooks/… (Webhook-Post) | alle Varianten |
| Exfiltrationskanal | discord.com/api/v10 (Relay-Upload) | alle Varianten |
| Exfiltrationskanal | HuggingFace Hub-Upload | alle Varianten |
| Serviertes Artefakt | forge-jsxy-package.tgz (via relayPackageServe) | alle Varianten |
| Toolchain-Dateien | chromiumExtensionDbHarvest, discordRelayUpload, discordWebhookPost, hfUpload, encode-hf-credentials, forge-jsx-explorer-* | alle Varianten |
| Zielliste | secret_filename_patterns.json (wallet.dat, .mnemonic/.seed/.phrase, keypair.json, UTC--, .p12/.pfx/*.jks) | alle Varianten |
| Versteckte Laufzeit | gepunktete …/.forge-jsxy/runtime/v<version>/ config-dir Pfad | forge-jsxy Zeile |
| Windows-Persistenz | verstecktes PowerShell-Autostartskript „Forge Diagnostics“ | alle Varianten |
| Trigger installieren | Postinstall-Hook, der eine Dist-Materialisierungs-Skriptkette aufruft | alle Varianten |
Das beständigste Erkennungssignal ist nicht ein einzelner Host oder Webhook – sondern jene drehen — aber die Toolchain-Dateinamen und die forge-jsxy-package.tgz Artefakte, die trotz jeder Umbenennung unverändert geblieben sind.
Attribution und beobachtetes Verhalten
Die Pakete wurden unter mehreren npm-Konten veröffentlicht. Das forge-jsxy-Paket Die Zeile wurde vom Herausgeber jacksonkaandorp2 (jacksonkaandorp2@outlook[.]com) verwendet; Die neueste Pinokio-Redis-Variante wurde von Donimique veröffentlicht. (donimiqueakers@gmail[.]com). Keines der Konten verfügte über eine verifizierte E-Mail-Adresse oder ein verknüpftes Quellcode-Repository. Der rote Faden, der alle Konten verbindet, ist der Toolchain, nicht die Identität des Herausgebers – dieselben Modulnamen, dieselbe Es wurden .tgz-Dateien bereitgestellt, und das gleiche Exfiltrationsdesign tritt unabhängig davon wieder auf, wer sie veröffentlicht hat.
Mehrere beobachtbare Verhaltensweisen deuten eher auf absichtliches Verschweigen als auf versehentliche Übererfassung:
Die Laufzeitumgebung befindet sich außerhalb von node_modules in einem versteckten Verzeichnis, sodass sie das Paket, das sie bereitgestellt hat, überdauert.
Der Agent bricht den Vorgang ab, sobald er eine CI-Umgebung erkennt, wodurch die Gefährdung in automatisierten Analyse-Sandboxes begrenzt wird.
Der Agentenprozess wird unabhängig gestartet und window-hidden.In Bei den forge-jsxy-Versionen wurde in einem Kommentar der Zusammenhang zwischen dem Fehlen eines sichtbaren Installationsfelds und der Tatsache hergestellt, dass dieses Feld „auf npm sichtbar“ ist.
Die öffentlichen Paketbeschreibungen haben nichts mit dem Code zu tun – pinokio-redis präsentiert sich als „Autodesk Forge“-Integration.
Eine wiederkehrende Erkennungslücke sollte für Verteidiger, die sich auf Folgendes verlassen, beachtet werden: automatisierte Klassifizierung: Mehrere bestätigte Varianten in dieser Familie waren wurde von einem ML-Klassifikator als sicher eingestuft, bevor die Codeüberprüfung die Korrektur vornahm. Urteil. Die stabilen Elemente, an denen sich ein Rezensent orientieren kann – die Installationszeit Kette, die versteckte Laufzeitumgebung, die Toolchain-Dateinamen – das sind genau die die die Umbenennungen überstehen.
Wir beschreiben das oben Genannte als beobachtetes Verhalten. Wir schreiben dem Verhalten nicht zu, dass Wir erheben keinen Anspruch auf die Richtigkeit der Angaben im Zusammenhang mit der Kampagne gegen einen namentlich genannten Akteur und geben auch keine Zusicherungen hinsichtlich der Betreiber ab. Identität oder Ziele, die über das hinausgehen, was der Code und die Infrastruktur zeigen.
Auswirkungen, Trends & Leitfaden für Verteidiger
Wer wird entlarvt? Das Kollektionsset richtet sich direkt an Entwickler. Maschinen: Kryptowährungs-Wallets und Keystores, Browser-Wallet-Erweiterungen, Shell-Verlauf und Cloud-/Dienstanmeldeinformationen. Jeder, der eine installiert betroffenes Paket – direkt oder als transitive Abhängigkeit — während der Das Zeitfenster, in dem es aktiv war, fällt in den Geltungsbereich, und das Persistenzdesign bedeutet, dass Die Exposition endet nicht mit dem Entfernen der Verpackung.
Warum Beharrlichkeit wichtig ist. Weil Phase 1 die Nutzlast in ein verstecktes Laufzeitverzeichnis und Stage-2-Register werden automatisch gestartet, wie üblich Instinkt zur Fehlerbehebung (die fehlerhafte Abhängigkeit deinstallieren, node_modules löschen, Eine Neuinstallation entfernt den Agenten nicht. Die Reaktion auf Vorfälle muss nach dem Agenten suchen. Es geht um die Laufzeitumgebung außerhalb des Quellcodebaums und den Autostart-Eintrag, nicht nur um das Paket.
Der Trend. Diese Familie veranschaulicht ein Muster, das es wert ist, beobachtet zu werden: Eine stabile und ausgereifte Nutzlast, verpackt in einen Strom von EinwegmaterialienPaketnamen, die von einem Namen abweichen, der zuvor durch eine Löschung festgelegt wurde wiedererkennbar, hin zu Namen, die auf gewöhnliche Infrastruktur hindeuten. Namensbasiert Blocklisten und der Ruf von Verlagen verlieren dagegen schnell an Bedeutung; Verhalten- und artefaktbasierte Signale nicht.
Für Entwickler und Verbraucher
Behandeln Sie Installationsskripte als primäre Risikoquelle. Installieren Sie nach Möglichkeit mit deaktivierten Skripten und überprüfen Sie jede Abhängigkeit, die eine solche deklariert. Nach der Installation. Fixieren und prüfen Sie transitive Abhängigkeiten; diese Malware-Klasse gelangt ebenso leicht über eine Unterabhängigkeit wie über eine direkte Abhängigkeit ins Land.
Auf einem verdächtigen Host sollte man über das Paket hinaus suchen: nach einem versteckten Laufzeitverzeichnis im Plattformkonfigurationsverzeichnis, einem unerwarteten Autostart-Eintrag, und ausgehende Verbindungen zu Discord-Webhook- oder :9877-Endpunkten.
Gehen Sie davon aus, dass alle auf einem betroffenen Host während des Expositionszeitraums vorhandenen Wallet-Seed-Phrasen, Keystores oder Anmeldeinformationen kompromittiert sind, und rotieren Sie diese.
Für Register und Verteidiger
Warnung bezüglich der dauerhaften Artefakte (forge-jsxy-package.tgz, forge-jsx-explorer-* / chromiumExtensionDbHarvest / discordRelayUpload). Dateinamen) anstatt des Paketnamens, der sich ändert.
Kennzeichnet die strukturelle Kombination, auf die die Familie angewiesen ist – eine Nachinstallation, die Skripte in einem versteckten Konfigurationsverzeichnispfad und einem Betriebssystem materialisiert. Autostart-Registrierung — unabhängig von den jeweiligen Zeichenketten.
Der Name auf der Verpackung hat sich mindestens viermal geändert; die Kiste im Inneren Das ist nicht der Fall. Die auf der Funktionsweise des Codes basierende Erkennung hat sich als überdauert. Bisherige Umbenennungen.





