# Ein Dependabot-Bump veröffentlichte einen Wurm. 22 Pakete.

Published: 2026-09-17

Ein Bot öffnet einen Pull Request. Ein Mensch führt ihn 24 Minuten später zusammen. 95 Minuten danach hat ein Wurm 110 bösartige Versionen seiner 22 npm-Pakete unter seinem Namen mit einem Token veröffentlicht, das er in seiner CI gefunden hat.

Canonical: https://thedailydiff.dev/de/video/2026-09-17-dependabot-tanstack/

## Was dieses Video behandelt

- Ein Bot, ein Mensch, ein Wurm
- Wie es geschah, warum npm es erlaubte, wer die Schuld trägt
- Zeitlinie: Der vergiftete Cache
- 21:48 — der Dependabot-Bump
- Warum es funktioniert

## Kapitel

- 0:00 Ein Bot, ein Mensch, ein Wurm
- 0:20 Wie es geschah, warum npm es erlaubte, wer die Schuld trägt
- 0:30 Zeitlinie: Der vergiftete Cache
- 1:15 21:48 — der Dependabot-Bump
- 1:50 Warum es funktioniert
- 2:20 git blame
- 2:45 Auswirkungsbereich
- 3:00 Urteil

## Übersetztes Transkript

Aus der englischen Originalerzählung übersetzt. Verfügbare Audio- und Untertitel werden von YouTube gesteuert.

### Ein Bot, ein Mensch, ein Wurm

0:00 Ein Bot öffnet einen Pull Request; ein Mensch führt ihn vierundzwanzig Minuten später zusammen. Fünfundneunzig Minuten später hat ein Wurm veröffentlicht einhundertzehn Versionen seiner Pakete, als er. TanStacks Postmortem hat die Upstream-Zeitstempel, die des Downstream-Maintainers hat den Rest, und Hacker News gibt ihm elftausend Punkte und einen Namen: Mini Shai-Hulud. Wie es passiert, warum npm es erlaubt, wer die Schuld trägt.

### Wie es geschah, warum npm es erlaubte, wer die Schuld trägt

0:21 Dies ist The Daily Diff, Postmortem. 11. Mai, morgens. Ein umbenannter Fork öffnet einen Pull Request gegen TanStack Router. Er schließt innerhalb der Stunde, aber ein Benchmark-Workflow hat seinen Code bereits ausgeführt und

### Zeitlinie: Der vergiftete Cache

0:33 einen vergifteten Cache unter dem Schlüssel gespeichert, den der Release-Workflow verwenden wird. Neunzehn-zwanzig. Eine legitime Zusammenführung führt den Release aus. Der Cache wird zurückgegeben, ein Binärprogramm liest den Speicher des Runners, hebt den Publish-Token und liefert vierundachtzig Versionen über zweiundvierzig Pakete, mit gültiger Provenienz. Tests schlagen fehl. Es wird trotzdem veröffentlicht. Neunzehn sechsundvierzig, ein StepSecurity-Forscher meldet das Problem; bis neun UTC alles ist veraltet und die Empfehlung ist draußen.

0:55 Veraltet ist nicht weg: npm weigert sich, etwas mit Abhängigkeiten aufzuheben, so bleibt es stundenlang installierbar. Einundzwanzig achtundvierzig. In einem Neun-Sterne-Luftfahrtdatenprojekt, Dependabot öffnet seinen Routine-Pull-Request: die Dev-Dependencies-Gruppe aktualisieren, dreizehn Updates. Zwei sind vergiftete TanStack-Versionen. Zweiundzwanzig-zwölf: zusammengeführt. Der Publish-Workflow führt npm C-I mit dem Token in

### 21:48 — der Dependabot-Bump

1:15 Scope aus; ein Prepare-Skript liest es, und um zweiundzwanzig-siebzehn veröffentlicht der Wurm als er. Fünf Versionen jedes Pakets, das das Token erreicht, sogar ein altes Nebenprojekt: ein klassisches Token für alles. Einhundertzehn Versionen in fünfundneunzig Minuten. Er erfährt es per E-Mail, nach Mitternacht. Warum es funktioniert. Eins: npm install führt standardmäßig Lebenszyklus-Skripte von Fremden aus, und ein Prepare-Skript einer Git-Abhängigkeit zählt.

1:39 Zwei: Der Wurm will nur eines: ein Token, das ohne zweiten Faktor veröffentlicht. Dann fragt er das Register, was der Maintainer sonst noch besitzt, und veröffentlicht alles mit sich selbst darin neu. Drei: Nichts in der Kette ist eine Person.

### Warum es funktioniert

1:51 Ein Bot schlägt vor, eine Pipeline installiert, und der Wurm revanchiert sich: seine Dead-Drop-Branches heißen dependabot slash github-actions slash fremen. git blame. npm's Installationsmodell, fünfundfünfzig Prozent: Skripte werden bei der Installation ausgeführt, veraltet bleibt installierbar, Zwei-Faktor-Umgehungs-Tokens existieren. TanStacks CI, fünfundzwanzig: ein ungeprüfter Pull-Request-Target-Workflow, der Fork-Code mit Schreibzugriff auf den Cache ausführt. Die Bump-Gewohnheit, fünfzehn: dreizehn Updates in vierundzwanzig Minuten zusammengeführt, Token im Raum.

2:17 Dependabot, fünf: so vertrauenswürdig, dass der Wurm seine Uniform trägt.

### git blame

2:20 Auswirkungsbereich: zweiundvierzig TanStack-Pakete. Zweiundzwanzig downstream, von einem Projekt mit neun Sternen. Über einhundertsechzig ökosystemweit, sobald der Wurm Mistral erreicht. Jede Upstream-Version trug eine gültige Signatur: gebaut von der offiziellen Pipeline. Wahr. Urteil, Postmortem: SHIP IT. Beide Maintainer posten innerhalb eines Tages zeitgestempelte Postmortems; innerhalb von drei, installiert die Downstream-Pipeline mit ignore-scripts, trennt Build von Publish und löscht das langlebige Token.

### Auswirkungsbereich

2:47 npm's Standardeinstellungen haben sich nicht geändert. Montag: ignore-scripts bei der Installation und das Publish-Token aus dem Job, der es ausführt. Senden Sie mir den Vorfall, über den Sie immer noch nicht sprechen dürfen, in den Kommentaren oder unter thedailydiff.dev. Und das ist der Unterschied für heute.

### Urteil

3:00 Ich bin Niko von Axrisi. Verantwortungsvoll zusammenführen.

## Quellen

- [TanStack postmortem (Tanner Linsley, May 11, refined May 15)](https://tanstack.com/blog/npm-supply-chain-compromise-postmortem) — tanstack.com
- [TanStack "Hardening TanStack After the npm Compromise" (May 12)](https://tanstack.com/blog/incident-followup) — tanstack.com
- [TanStack/router#7383 — the StepSecurity detection issue](https://github.com/TanStack/router/issues/7383) — github.com
- [Downstream incident post, @squawk/\* (May 12)](https://github.com/neilcochran/squawk/discussions/251) — github.com
- [Downstream hardening post (May 14)](https://github.com/neilcochran/squawk/discussions/264) — github.com
- [The Dependabot PR #246 (opened 21:48 UTC, merged 22:12)](https://github.com/neilcochran/squawk/pull/246) — github.com
- [@tan\_stack advisory post, 21:19 UTC](https://x.com/tan_stack/status/2053948103766716630) — x.com
- [StepSecurity — worm internals, bypass\_2fa search, Dependabot-style branch names](https://www.stepsecurity.io/blog/mini-shai-hulud-is-back-a-self-spreading-supply-chain-attack-hits-the-npm-ecosystem) — www.stepsecurity.io
- [Socket](https://socket.dev/blog/tanstack-npm-packages-compromised-mini-shai-hulud-supply-chain-attack) — socket.dev
- [Aikido — "over 160 packages, including Mistral"](https://www.aikido.dev/blog/mini-shai-hulud-is-back-tanstack-compromised) — www.aikido.dev
- [Hacker News (1,097 points)](https://news.ycombinator.com/item?id=48100706) — news.ycombinator.com
