3 Punkte von GN⁺ 2025-09-20 | Noch keine Kommentare. | Auf WhatsApp teilen
  • Zahlreiche npm-Pakete, darunter das Open-Source-Paket @ctrl/tinycolor, wurden mit bösartigen Versionen infiziert; Ursache war der Diebstahl eines npm-Tokens über einen GitHub-Actions-Workflow in einem gemeinsam genutzten Repository
  • Der Angreifer nutzte ein npm-Token mit weitreichenden Rechten, um bösartigen Code in etwa 20 Paketen zu veröffentlichen; @ctrl/tinycolor hatte dabei mit 2 Millionen wöchentlichen Downloads eine besonders große Reichweite
  • Die infizierten Versionen führten in der postinstall-Phase eine bösartige Payload aus; die Security-Teams von GitHub und npm reagierten schnell und leiteten Lösch- und Bereinigungsmaßnahmen ein
  • Der Autor hat zur Vermeidung künftiger Vorfälle einen verschärften Sicherheitsplan erstellt, darunter die Umstellung auf Trusted Publishing (OIDC), die Minimierung von Token-Berechtigungen, verpflichtendes 2FA und die Nutzung von pnpm-Funktionen
  • Der Vorfall zeigt die Anfälligkeit der Software-Lieferkette und macht deutlich, dass verbesserte Sicherheitsfunktionen und geänderte Sicherheitspraktiken im gesamten npm-Ökosystem notwendig sind

TL;DR

  • Ein bösartiger GitHub-Actions-Workflow wurde in ein gemeinsam genutztes Repository gepusht und stahl ein npm-Token
  • Mit diesem Token veröffentlichte der Angreifer bösartige Versionen von 20 Paketen; darunter war @ctrl/tinycolor, dessen hohe Downloadzahlen die Auswirkungen vergrößerten
  • Persönliche Accounts oder Repositories wurden nicht direkt kompromittiert, und es gab weder Phishing noch lokal installierte Malware
  • Durch die schnelle Reaktion der Security-Teams von GitHub und npm wurden die bösartigen Versionen entfernt; anschließend wurden saubere Versionen erneut veröffentlicht, um Caches zu bereinigen

Wie ich davon erfahren habe (How I Found Out)

  • Am Nachmittag des 15. September informierte Community-Mitglied Wes Todd den Autor per Bluesky-DM über das Problem
  • Die Security-Teams von GitHub und npm hatten bereits eine Liste der betroffenen Pakete zusammengestellt und mit der Entfernung begonnen
  • Als erster Hinweis wurde der Name des bösartigen Branches „Shai-Hulud“ geteilt, benannt nach dem Sandwurm aus dem Dune-Universum

Was tatsächlich passiert ist (What Actually Happened)

  • In dem Repository angulartics2, an dem der Autor vor langer Zeit mitgearbeitet hatte, gab es noch einen Mitwirkenden mit Admin-Rechten
  • Ein in diesem Repository gespeichertes npm-Token wurde durch einen bösartigen GitHub-Actions-Workflow gestohlen
  • Mit diesem Token veröffentlichte der Angreifer etwa 20 Pakete, darunter @ctrl/tinycolor
  • Die Security-Teams von GitHub und npm entfernten die bösartigen Versionen schnell, und der Autor veröffentlichte anschließend neue vertrauenswürdige Versionen

Auswirkungen (Impact)

  • Beim Installieren der bösartigen Versionen wurde ein postinstall-Skript ausgeführt, das ein Sicherheitsrisiko darstellte
  • Betroffenen Nutzern wird empfohlen, die sofortigen Reaktionsanweisungen von StepSecurity zu befolgen

Veröffentlichungs-Setup und vorläufiger Plan (Publishing Setup & Interim Plan)

  • Bisher erfolgte die automatische Veröffentlichung mit einer Kombination aus semantic-release + GitHub Actions
  • Die npm-Funktion provenance wurde genutzt, konnte aber einen Angreifer mit einem gültigen Token nicht aufhalten
  • Künftig ist die Einführung von Trusted Publishing (OIDC) geplant, um statische Tokens abzuschaffen
  • Derzeit wurden alle Tokens widerrufen; zusätzlich werden 2FA verpflichtend gemacht, nur noch Tokens mit granularen Rechten erlaubt und die pnpm-Funktion minimumReleaseAge geprüft

Gewünschte Verbesserungen (Publishing Wishlist)

  • Es braucht auf npm-Account-Ebene eine Option zur Erzwingung von OIDC-basiertem Trusted Publishing
  • Notwendig sind eine Sperrfunktion für Veröffentlichungen ohne provenance sowie vollständige Integrationsunterstützung für semantic-release und OIDC
  • Gewünscht wird eine Funktion in der GitHub-Oberfläche für manuell genehmigte Releases auf Basis von 2FA
  • Schutzfunktionen auf dem Niveau von GitHub Environments sollten auch ohne Pro-Abonnement nutzbar sein
  • Auf npm-Paketseiten sollte sichtbar sein, ob ein postinstall-Skript vorhanden ist, und bei gelöschten Versionen sollte der Grund offengelegt werden

Noch keine Kommentare.

Noch keine Kommentare.