# Dependabot bump je objavio crva. 22 paketa.

Published: 2026-09-17

Bot otvara pull request. Čovjek ga spaja 24 minute kasnije. 95 minuta nakon toga, crv je objavio 110 zlonamjernih verzija njegovih 22 npm paketa, pod njegovim imenom, s tokenom koji je pronašao u njegovom CI-u.

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

## Šta ovaj video pokriva

- Bot, čovjek, crv
- Kako se dogodilo, zašto je npm to dopustio, tko je kriv
- Vremenska linija: otrovna predmemorija
- 21:48 — Dependabot bump
- Zašto to funkcionira

## Poglavlja

- 0:00 Bot, čovjek, crv
- 0:20 Kako se dogodilo, zašto je npm to dopustio, tko je kriv
- 0:30 Vremenska linija: otrovna predmemorija
- 1:15 21:48 — Dependabot bump
- 1:50 Zašto to funkcionira
- 2:20 git blame
- 2:45 Radijus eksplozije
- 3:00 Presuda

## Prevedeni transkript

Prevedeno iz originalne engleske naracije. Dostupan zvuk i titlovi kontroliše YouTube.

### Bot, čovjek, crv

0:00 Bot otvara pull request; čovjek ga spaja dvadeset i četiri minute kasnije. Devedeset i pet minuta kasnije, crv je objavio stotinu i deset verzija njegovih paketa, kao on. TanStack-ova postmortem analiza sadrži uzvodne vremenske oznake, a nizvodnog održavatelja sadrži ostalo, a Hacker News mu daje jedanaest stotina bodova i ime: Mini Shai-Hulud. Kako se događa, zašto npm to dopušta, tko je kriv.

### Kako se dogodilo, zašto je npm to dopustio, tko je kriv

0:21 Ovo je The Daily Diff, postmortem. 11. svibnja, ujutro. Preimenovani fork otvara pull request prema TanStack Routeru. Zatvara se unutar sata, ali benchmark workflow je već pokrenuo svoj kod i

### Vremenska linija: otrovna predmemorija

0:33 spremio otrovnu predmemoriju pod ključem koji će koristiti release workflow. Devetnaest-dvadeset. Legitimno spajanje pokreće izdanje. Predmemorija se vraća, binarni program čita memoriju pokretača, podigne publish token i isporuči osamdeset i četiri verzije kroz četrdeset i dva paketa, s valjanim porijeklom. Testovi ne uspijevaju. Ipak objavljuje. Devetnaest četrdeset i šest, istraživač StepSecurity-a podnosi problem; do devet UTC sve je zastarjelo i savjet je objavljen.

0:55 Zastarjelo nije nestalo: npm odbija ukloniti bilo što s ovisnostima, pa ostaje instalirano satima. Dvadeset i jedan četrdeset i osam. U projektu avijacijskih podataka s devet zvjezdica, Dependabot otvara svoj rutinski pull request: ažurirajte dev-dependencies grupu, trinaest ažuriranja. Dva su otrovane TanStack verzije. Dvadeset i dva-dvanaest: spojeno. Publish workflow pokreće npm C-I s tokenom u

### 21:48 — Dependabot bump

1:15 opsegu; prepare skripta ga čita, i u dvadeset i dva-sedamnaest crv objavljuje kao on. Pet verzija svakog paketa do kojeg token dođe, čak i stari sporedni projekt: jedan klasični token za sve. Stotinu i deset verzija u devedeset i pet minuta. Saznaje putem e-pošte, poslije ponoći. Zašto to funkcionira. Jedan: npm install pokreće lifecycle skripte stranaca prema zadanim postavkama, i prepare skripta git ovisnosti se računa.

1:39 Dva: crv želi jednu stvar: token koji objavljuje bez drugog faktora. Zatim pita registar što još taj održavatelj posjeduje, i ponovno objavljuje sve to sa sobom unutra. Tri: ništa u lancu nije osoba.

### Zašto to funkcionira

1:51 Bot predlaže, pipeline instalira, a crv vraća uslugu: njegove dead-drop grane su nazvane dependabot slash github-actions slash fremen. git blame. npm-ov install model, pedeset i pet posto: skripte se pokreću pri instalaciji, zastarjelo ostaje instalirano, postoje tokeni za zaobilaženje dvofaktorske autentifikacije. TanStack-ov CI, dvadeset i pet: neaudirani pull request target workflow koji pokreće kod forka s pristupom za pisanje u cache. Navika ažuriranja, petnaest: trinaest ažuriranja spojeno u dvadeset i četiri minute, token u sobi.

2:17 Dependabot, pet: toliko mu se vjeruje da crv nosi njegovu uniformu.

### git blame

2:20 Radijus eksplozije: četrdeset i dva TanStack paketa. Dvadeset i dva nizvodno, iz projekta s devet zvjezdica. Preko stotinu i šezdeset u cijelom ekosustavu kada crv dođe do Mistrala. Svaka uzvodna verzija nosila je valjan potpis: izrađena od strane službenog pipeline-a. Istina. Presuda, postmortem: SHIP IT. Oba održavatelja objavljuju postmorteme s vremenskim oznakama u roku od jednog dana; u roku od tri, nizvodni pipeline instalira s ignore-scripts, razdvaja build od publisha i odbacuje dugotrajni token.

### Radijus eksplozije

2:47 Zadane postavke npm-a se nisu pomaknule. Ponedjeljak: ignore-scripts pri instalaciji i publish token izvan posla koji ga pokreće. Pošaljite mi incident o kojem još uvijek ne smijete govoriti, u komentarima, ili na thedailydiff.dev. I to je diff za danas.

### Presuda

3:00 Ja sam Niko iz Axrisija. Spajajte odgovorno.

## Izvori

- [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
