Durch die Kompromittierung des Release-Prozesses bei GitHub Actions gelang es Angreifern, 84 bösartige Versionen in das NPM-Repository zu veröffentlichen, die 42 NPM-Pakete aus dem TanStack-Stack betrafen. Einige der kompromittierten Pakete verzeichneten ĂŒber 10 Millionen Downloads pro Woche.
Der Zugriff auf die Veröffentlichung von Releases wurde aufgrund einer falschen Konfiguration des pull_request_target âPwn Requestâ in GitHub Actions erlangt (die Angabe einer Maske in den Einstellungen fĂŒhrte dazu, dass pull_request_target fĂŒr Pull-Requests in externe Forks ausgelöst wurde), durch Vergiftung des GitHub Actions-Caches ĂŒber einen Fork und die Möglichkeit, ein OIDC-Token aus dem Speicher des laufenden Runner-Prozesses (Runner.Worker) durch Lesen des Inhalts von /proc//mem zu extrahieren.
Die NPM-Pakete mit bösartigen Ănderungen wurden am 11. Mai zwischen 22:20 und 22:26 (MSK) veröffentlicht, nach 20 Minuten bemerkt und nach anderthalb Stunden blockiert. FĂŒr jedes der betroffenen NPM-Pakete wurden zwei bösartige Versionen mit integriertem Code zur Aktivierung des Wurms mini-shai-hulud veröffentlicht, der nach Tokens und Anmeldedaten im aktuellen Umfeld sucht. Bei der Entdeckung eines Verbindungstokens zum NPM-Verzeichnis veröffentlichte der Wurm automatisch neue bösartige Releases fĂŒr die im aktuellen Umfeld entwickelten Pakete und traf damit den AbhĂ€ngigkeitsbaum. Dadurch wurden mehr als 400 NPM-Pakete, die TanStack-Pakete in ihren AbhĂ€ngigkeiten verwendeten, kompromittiert.
Der Wurm war in der Datei router_init.js eingebettet und aktivierte sich, wenn das betroffene Paket manuell vom Entwickler oder automatisiert in einer CI-Umgebung mit den Befehlen ânpm installâ, âpnpm installâ oder âyarn installâ installiert wurde. Nach der Aktivierung suchte der Wurm im System nach Tokens zu NPM (~/.npmrc), AWS, GCP, Azure, HashiCorp und Kubernetes K8s sowie nach privaten SSH-SchlĂŒsseln. Die gefundenen Daten wurden ĂŒber den dezentralen P2P-Messenger getsession.org an die Angreifer ĂŒbermittelt.
Der Wurm war so konzipiert, dass er destruktive Aktionen durchfĂŒhrt, falls das abgefangene NPM-Token zurĂŒckgezogen wird â im System wurde ein zeitgesteuertes Skript ~~/local/bin/gh-token-monitor.sh eingerichtet, das alle 60 Sekunden die AktivitĂ€t des Tokens ĂŒber einen Aufruf an api.github.com/user ĂŒberprĂŒfte und im Falle des Widerrufs des Tokens den Befehl ârm -rf ~/â ausfĂŒhrte.
Quelle: opennet.ru
