# Dependabot bump je objavio crva. 22 paketa.

Published: 2026-09-17

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

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

## Šta ovaj video pokriva

- Bot, čovek, crv
- Kako se desilo, zašto je npm to dozvolio, ko je kriv
- Vremenska linija: zatrovana keš memorija
- 21:48 — Dependabot bump
- Zašto radi

## Poglavlja

- 0:00 Bot, čovek, crv
- 0:20 Kako se desilo, zašto je npm to dozvolio, ko je kriv
- 0:30 Vremenska linija: zatrovana keš memorija
- 1:15 21:48 — Dependabot bump
- 1:50 Zašto radi
- 2:20 git blame
- 2:45 Radijus eksplozije
- 3:00 Presuda

## Preveden transkript

Prevedeno sa originalne engleske naracije. Dostupan audio i titlovi kontrolisani su od strane YouTube-a.

### Bot, čovek, crv

0:00 Bot otvara pull request; čovek ga spaja dvadeset četiri minuta kasnije. Devedeset pet minuta kasnije, crv je objavio sto deset verzija njegovih paketa, kao on. TanStack-ova postmortem analiza ima uzvodne vremenske oznake, a nizvodni održavalac ima ostatak, i Hacker News mu daje hiljadu i sto poena i ime: Mini Shai-Hulud. Kako se dešava, zašto npm to dozvoljava, ko je kriv.

### Kako se desilo, zašto je npm to dozvolio, ko je kriv

0:21 Ovo je The Daily Diff, postmortem. 11. maj, jutro. Preimenovani fork otvara pull request protiv TanStack Router-a. Zatvara se u roku od sat vremena, ali benchmark workflow je već pokrenuo svoj kod i

### Vremenska linija: zatrovana keš memorija

0:33 sačuvao zatrovanu keš memoriju pod ključem koji će koristiti release workflow. Devetnaest dvadeset. Legitimno spajanje pokreće izdanje. Keš se vraća, binarni fajl čita memoriju pokretača, podigne token za objavljivanje i isporuči osamdeset četiri verzije kroz četrdeset dva paketa, sa validnim poreklom. Testovi ne uspevaju. Ipak objavljuje. Devetnaest četrdeset šest, istraživač StepSecurity-ja podnosi problem; do devet UTC sve je zastarelo i obaveštenje je objavljeno.

0:55 Zastarelo ne znači da je nestalo: npm odbija da ne objavi ništa sa zavisnostima, tako da ostaje instalirano satima. Dvadeset jedan četrdeset osam. U projektu avijacionih podataka sa devet zvezdica, Dependabot otvara svoj rutinski pull request: bump dev-dependencies grupu, trinaest ažuriranja. Dve su zatrovane TanStack verzije. Dvadeset dva dvanaest: spojeno. Publish workflow pokreće npm C-I sa tokenom u

### 21:48 — Dependabot bump

1:15 opsegu; prepare script ga čita, i u dvadeset dva sedamnaest crv objavljuje kao on. Pet verzija svakog paketa do kojeg token dođe, čak i stari sporedni projekat: jedan klasičan token za sve. Sto deset verzija za devedeset pet minuta. Saznaje putem e-maila, posle ponoći. Zašto radi. Jedan: npm install pokreće skripte životnog ciklusa nepoznatih po defaultu, i prepare script git zavisnosti se računa.

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

### Zašto radi

1:51 Bot predlaže, pipeline instalira, a crv vraća uslugu: njegovi dead-drop branch-evi su nazvani dependabot slash github-actions slash fremen. git blame. npm-ov model instalacije, pedeset pet procenata: skripte se pokreću pri instalaciji, zastarelo ostaje instalirano, tokeni za zaobilaženje dvofaktorske autentifikacije postoje. TanStack-ov CI, dvadeset pet: neauditovani pull request target workflow koji pokreće kod forka sa dozvolom za pisanje u keš memoriju. Navika bumpovanja, petnaest: trinaest ažuriranja spojeno za dvadeset četiri minuta, token u sobi.

2:17 Dependabot, pet: toliko verovan da crv nosi njegovu uniformu.

### git blame

2:20 Radijus eksplozije: četrdeset dva TanStack paketa. Dvadeset dva nizvodno, iz projekta sa devet zvezdica. Preko sto šezdeset u celom ekosistemu kada crv stigne do Mistral-a. Svaka uzvodna verzija nosila je validan potpis: izgrađena od strane zvaničnog pipeline-a. Istina. Presuda, postmortem: SHIP IT. Oba održavaoca objavljuju postmortem analize sa vremenskim oznakama u roku od jednog dana; u roku od tri, nizvodni pipeline instalira sa ignore-scripts, deli build od publish-a i odbacuje dugotrajni token.

### Radijus eksplozije

2:47 npm-ove podrazumevane vrednosti se nisu pomerile. Ponedeljak: ignore-scripts prilikom instalacije, i publish token van posla koji ga pokreće. Pošaljite mi incident o kojem još uvek ne smete da govorite, u komentarima, ili na thedailydiff.dev. I to je diff za danas.

### Presuda

3:00 Ja sam Niko iz Axrisi-ja. 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
