- 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
- In der Liste der Repositories des eigenen Github-Kontos prüfen, ob
s1ngularity-repositoryerstellt wurde - Die in diesem Repository enthaltenen Dateien herunterladen und zur Dokumentation aufbewahren
- Das Repository auf Github löschen
- Eine E-Mail an
security@nrwl.iosenden, um Hinweise zur Entschlüsselung der abgeflossenen Informationen zu erhalten - 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 nxprü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@latestaktualisieren - Den Cache mit
npm cache clean --forcebereinigen
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
.zshrcund.bashrcdarauf 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_targetstanden erhöhte Berechtigungen (GITHUB_TOKENusw.) zur Verfügung, was missbraucht wurde - Bis zur Entfernung blieb der verwundbare Workflow in einem alten Branch statt nur in
mainbestehen, 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.ymlerreicht publish.ymlspeicherte 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-repositoryhochgeladen - 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)
postinstallfügte den Befehlsudo shutdown -h 0ein, 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 installerfolgen, 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@latestinstallieren und dadurch die Ausführung vonpostinstallauslö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 nxentfernt
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.ymlwurde 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
-
- 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.iomöglich
Referenzen und Anhang
- Wichtige Github-Issues, Zeitachse und zugehörige Beiträge
- Ein Beispiel für das Skript
telemetry.jsim 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.