3 Punkte von GN⁺ 2025-08-29 | Noch keine Kommentare. | Auf WhatsApp teilen
  • Von Nx-Paketen und Plugins wurden bösartige Versionen auf npm verteilt, die das Dateisystem scannen, Anmeldedaten sammeln und anschließend an ein Repository im Github-Konto des Nutzers senden
  • Um zu prüfen, ob man betroffen ist, muss kontrolliert werden, ob im Github-Konto ein Repository namens s1ngularity-repository erstellt wurde
  • Im Fall einer Infektion sind der Austausch von Tokens und Passwörtern, das Löschen des bösartigen Repositorys und die Prüfung der Shell-Konfigurationsdateien zwingend erforderlich
  • Die bösartigen Versionen wirken sich über ein postinstall-Skript auf das System aus; besonders bei Nutzung des VSCode-Nx-Console-Plugins steigt das Risiko einer unbemerkten Ausführung
  • Nx hat Maßnahmen zur Verhinderung eines erneuten Vorfalls und zusätzliche Sicherheitsmaßnahmen umgesetzt, und die betreffenden Versionen wurden aus npm entfernt

Überblick und Zusammenfassung

  • Diese Sicherheitswarnung betrifft einen schweren Supply-Chain-Angriff auf Nx-Pakete und einige zugehörige Plugins, bei dem bösartiger Code über npm verteilt wurde
  • Die betroffenen bösartigen Versionen scannen das Dateisystem der Nutzer, sammeln Anmeldedaten, Pfade und weitere Informationen und laden sie in ein Github-Repository (s1ngularity-repository) hoch
  • Das bösartige postinstall-Skript verändert außerdem die Shell-Konfigurationsdateien der Nutzer (.zshrc, .bashrc), um einen System-Shutdown-Befehl hinzuzufügen
  • Angriffsvektor und Ablauf des Angriffs, betroffene Versionen, sofort notwendige Maßnahmen für Nutzer sowie Schritte zur Verhinderung eines erneuten Vorfalls werden ausführlich beschrieben

Dringende Maßnahmen

Was alle prüfen sollten

  1. In der Liste der Repositories des eigenen Github-Kontos prüfen, ob s1ngularity-repository erstellt wurde
  2. Die in diesem Repository enthaltenen Dateien herunterladen und zur Dokumentation aufbewahren
  3. Das Repository auf Github löschen
  4. Eine E-Mail an security@nrwl.io senden, um Hinweise zur Entschlüsselung der abgeflossenen Informationen zu erhalten
  5. Anmeldedaten und Tokens aller Konten sofort austauschen

So werden Github-Tokens ausgetauscht

  • https://github.com/settings/connections/… aufrufen
  • Die Zugriffsrechte der verbundenen App widerrufen, um bestehende Tokens ungültig zu machen
  • Bei Nutzung der gh-CLI erneut authentifizieren, um ein neues Token zu erzeugen
  • Ohne diese Maßnahme besteht das Risiko, dass bestehende Tokens missbraucht werden

Nutzung bösartiger Nx-Versionen beenden und bereinigen

  • Mit dem Befehl npm ls nx prüfen, ob die aktuell verwendete Nx-Version eine bösartige Version ist
  • Falls eine infizierte Version verwendet wird, mit npm uninstall nx && npm install nx@latest aktualisieren
  • Den Cache mit npm cache clean --force bereinigen

Für bereits infizierte Nutzer

  • npm- und Github-Tokens austauschen
  • Passwörter und sämtliche Anmeldedaten für Github und verbundene Dienste vollständig zurücksetzen
  • Die Dateien .zshrc und .bashrc darauf prüfen, ob unbekannte Befehle eingefügt wurden, und diese löschen

Für Administratoren interner Paket-Repositories

  • Bösartige Versionen im internen Proxy des Unternehmens-Registrys sofort löschen, um eine weitere Verbreitung zu verhindern

Hinweise zu betroffenen Versionen

Nx-Pakete

  • 21.5.0, 20.9.0, 20.10.0, 21.6.0, 20.11.0, 21.7.0, 21.8.0, 20.12.0
  • Stand 10:44 PM EDT vollständig aus npm entfernt

@nx/devkit, @nx/js, @nx/workspace, @nx/node, @nx/eslint, @nx/key, @nx/enterprise-cloud

  • Stand 10:44 PM und 6:20 AM EDT aus npm entfernt

Details zum Angriffsvektor

Ursache im verwundbaren Workflow

  • In den Github-Actions-Workflow wurde eine Schwachstelle zur Ausführung beliebigen Codes eingebracht
  • Wenn im PR-Titel bestimmter Bash-Code eingefügt wurde, konnten im Workflow Systembefehle ausgeführt werden; es handelte sich um eine entsprechende Schwachstelle (Bash Injection)
  • Über den Trigger pull_request_target standen erhöhte Berechtigungen (GITHUB_TOKEN usw.) zur Verfügung, was missbraucht wurde
  • Bis zur Entfernung blieb der verwundbare Workflow in einem alten Branch statt nur in main bestehen, wodurch der Angreifer mit einem bösartigen PR den Workflow ausführen und Secrets entwenden konnte

Ablauf des Diebstahls des npm-Tokens

  • Über den verwundbaren Workflow wurde die Ausführung von publish.yml erreicht
  • publish.yml speicherte das npm-Token in Github Secrets; dabei wurde das Token an einen externen Webhook übermittelt
  • Schließlich konnte der Angreifer mit diesem Token bösartige Versionen von Nx und unterstützenden Paketen auf npm hochladen

Verhalten der bösartigen Pakete

Sammlung von Informationen einschließlich Anmeldedaten und Veröffentlichung in einem Github-Repository

  • Beim Ausführen des postinstall-Skripts des infizierten Nx-Pakets werden Speicherorte verschiedener Textdateien und Anmeldedaten gesammelt
  • Diese werden Base64-kodiert in ein Github-Repository mit dem Namen s1ngularity-repository hochgeladen
  • Auch wenn das eigentliche Repository inzwischen gelöscht wurde, muss wegen seiner früheren öffentlichen Sichtbarkeit von einem möglichen Informationsabfluss ausgegangen werden

Manipulation der Shell-Profile (.zshrc, .bashrc)

  • postinstall fügte den Befehl sudo shutdown -h 0 ein, wodurch beim Start eines Terminals ein System-Shutdown ausgelöst und möglicherweise ein Passwort offengelegt werden konnte

Verschiedene Szenarien, in denen postinstall aktiv werden kann

  • Die Ausführung kann nicht nur bei einem expliziten npm install/yarn/pnpm install erfolgen, sondern auch in vielen anderen Situationen, etwa durch transitive Abhängigkeiten, Editor-Erweiterungen oder Skriptausführung

  • Insbesondere die Erweiterung Nx Console für VSCode (Versionen 18.6.30 bis 18.65.1) konnte beim Start des Editors automatisch nx@latest installieren und dadurch die Ausführung von postinstall auslösen

  • Grundsätzlich ist zu beachten, dass Installationen von NPM-Modulen an vielen Stellen stattfinden können, auch ohne ausdrückliche Absicht

  • Ab Nx Console 18.66.0 wurde die Installation von latest nx entfernt

Zeitachse von Angriff und Reaktion

21. August

  • 4:31 PM: Ein PR mit der Bash-Injection-Schwachstelle wurde gemergt
  • 10:48 PM: Ein Beitrag, der auf die Schwachstelle hinwies, wurde auf X (ehemals Twitter) veröffentlicht

22. August

  • Nachmittag: Interne Untersuchung, Rollback des verwundbaren Workflows (unvollständig)
  • Einführung von CodeQL, um ähnliche Schwachstellen künftig in PRs zu erkennen

24. August

  • In einem Commit im Fork des Angreifers tauchten Hinweise auf einen Abfluss des npm-Tokens auf
  • Ein bösartiger PR wurde erstellt und gelöscht; publish.yml wurde durch diesen PR ausgeführt

26. bis 27. August (Verteilung der bösartigen Versionen, Reaktion)

  • Mehrere bösartige Versionen von Nx und Plugins wurden nacheinander auf npm verteilt
  • Issues wurden an die Github-/NPM-Community gemeldet
  • 10:44 PM: NPM entfernte alle betroffenen Versionen und ergriff weitere Maßnahmen
  • 11:57 PM: Alle Tokens zum Veröffentlichen von Nx-bezogenen Paketen wurden ungültig gemacht
    1. August: Patch für Nx Console, 2FA, Umstellung auf Trusted Publisher und weitere Maßnahmen

Vorbeugende Maßnahmen und weiteres Vorgehen

  • Für alle Maintainer der nrwl-Organisation wurde 2FA verpflichtend gemacht
  • Der Mechanismus Trusted Publisher wurde eingeführt. Verteilung auf Basis von npm-Tokens ist nicht mehr erlaubt
  • Künftige Pakete werden ausnahmslos erst nach 2FA- und vertrauensbasierter Verifikation veröffentlicht
  • Zusätzliche Risikoerkennung sowie PR-Freigaben, Branch-Schutz und weitere stufenweise Maßnahmen werden eingeführt

Erkenntnisse und weitere Pläne

  • Der Vorfall macht erneut deutlich, wie wichtig Supply-Chain-Sicherheit, CI/CD-Pipelines und das Prinzip minimaler Workflow-Berechtigungen national wie international sind
  • Nach einer erneuten internen Aufarbeitung sollen die gewonnenen Erkenntnisse mit der Community geteilt werden

Kontakt

  • Rückfragen sind an security@nrwl.io möglich

Referenzen und Anhang

  • Wichtige Github-Issues, Zeitachse und zugehörige Beiträge
  • Ein Beispiel für das Skript telemetry.js im infizierten Paket wird bereitgestellt
  • Dieses Skript sammelt zum Zweck der Erstellung eines Inventars die Pfade wichtiger Textdateien im Dateisystem

Zusammenfassung

  • Es ist wichtig, die neuesten Updates und Patches für Nx und zugehörige Plugins anzuwenden
  • Ein sofortiger Austausch wichtiger Authentifizierungsinformationen wie npm- und Github-Zugangsdaten wird empfohlen
  • Der Vorfall zeigt, dass unzureichende Supply-Chain-Sicherheit und mangelhafte Verwaltung von Workflow-Berechtigungen zu einem schwerwiegenden Sicherheitsvorfall führen können

Noch keine Kommentare.

Noch keine Kommentare.