# Peningkatan Dependabot mempublikasikan worm. 22 paket.

Published: 2026-09-17

Bot membuka permintaan pull. Manusia menggabungkannya 24 menit kemudian. 95 menit setelah itu, worm telah mempublikasikan 110 versi berbahaya dari 22 paket npm-nya, atas namanya, dengan token yang ditemukannya di CI-nya.

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

## Isi video ini

- Sebuah bot, seorang manusia, sebuah worm
- Bagaimana itu terjadi, mengapa npm mengizinkannya, siapa yang harus disalahkan
- Linimasa: cache yang diracuni
- 21:48 — peningkatan Dependabot
- Mengapa itu berfungsi

## Bab

- 0:00 Sebuah bot, seorang manusia, sebuah worm
- 0:20 Bagaimana itu terjadi, mengapa npm mengizinkannya, siapa yang harus disalahkan
- 0:30 Linimasa: cache yang diracuni
- 1:15 21:48 — peningkatan Dependabot
- 1:50 Mengapa itu berfungsi
- 2:20 git blame
- 2:45 Radius ledakan
- 3:00 Putusan

## Transkrip terjemahan

Diterjemahkan dari narasi asli bahasa Inggris. Audio dan teks tersedia yang dikontrol oleh YouTube.

### Sebuah bot, seorang manusia, sebuah worm

0:00 Bot membuka permintaan pull; manusia menggabungkannya dua puluh empat menit kemudian. Sembilan puluh lima menit kemudian, worm telah mempublikasikan seratus sepuluh versi paketnya, atas namanya. Postmortem TanStack memiliki stempel waktu hulu, pemelihara hilir memiliki sisanya, dan Hacker News memberinya seribu seratus poin dan nama: Mini Shai-Hulud. Bagaimana itu terjadi, mengapa npm mengizinkannya, siapa yang harus disalahkan.

### Bagaimana itu terjadi, mengapa npm mengizinkannya, siapa yang harus disalahkan

0:21 Ini adalah The Daily Diff, postmortem. 11 Mei, pagi. Sebuah fork yang diganti namanya membuka permintaan pull terhadap TanStack Router. Ditutup dalam satu jam, tetapi alur kerja benchmark telah menjalankan kodenya dan

### Linimasa: cache yang diracuni

0:33 menyimpan cache yang diracuni di bawah kunci yang akan digunakan alur kerja rilis. Sembilan belas dua puluh. Penggabungan yang sah menjalankan rilis. Cache kembali, biner membaca memori runner, mengangkat token publikasi, dan mengirim delapan puluh empat versi di empat puluh dua paket, dengan asal yang valid. Tes gagal. Tetap mempublikasikan. Sembilan belas empat puluh enam, seorang peneliti StepSecurity mengajukan masalah; pada jam sembilan UTC semuanya tidak digunakan lagi dan pemberitahuan telah keluar.

0:55 Tidak digunakan lagi bukan berarti hilang: npm menolak untuk membatalkan publikasi apa pun yang memiliki dependen, jadi tetap dapat diinstal selama berjam-jam. Dua puluh satu empat puluh delapan. Dalam proyek data penerbangan sembilan bintang, Dependabot membuka permintaan pull rutinnya: tingkatkan grup dev-dependencies, tiga belas pembaruan. Dua adalah versi TanStack yang diracuni. Dua puluh dua dua belas: digabungkan. Alur kerja publikasi menjalankan npm C-I dengan token di

### 21:48 — peningkatan Dependabot

1:15 cakupan; skrip persiapan membacanya, dan pada dua puluh dua tujuh belas worm mempublikasikan atas namanya. Lima versi dari setiap paket yang dijangkau token, bahkan proyek sampingan lama: satu token klasik untuk semuanya. Seratus sepuluh versi dalam sembilan puluh lima menit. Dia mengetahuinya melalui email, setelah tengah malam. Mengapa itu berfungsi. Satu: npm install menjalankan skrip siklus hidup orang asing secara default, dan skrip persiapan dependensi git diperhitungkan.

1:39 Dua: worm menginginkan satu hal: token yang mempublikasikan tanpa faktor kedua. Kemudian ia bertanya kepada registri apa lagi yang dimiliki pemelihara itu, dan mempublikasikan ulang semuanya dengan dirinya sendiri di dalamnya. Tiga: tidak ada dalam rantai yang merupakan orang.

### Mengapa itu berfungsi

1:51 Bot mengusulkan, pipeline menginstal, dan worm membalas budi: cabang dead-drop-nya diberi nama dependabot slash github-actions slash fremen. git blame. Model instal npm, lima puluh lima persen: skrip berjalan saat instal, yang tidak digunakan lagi tetap dapat diinstal, token bypass dua faktor ada. CI TanStack, dua puluh lima: alur kerja target permintaan pull yang tidak diaudit berjalan kode fork dengan akses tulis ke cache. Kebiasaan bump, lima belas: tiga belas pembaruan digabungkan dalam dua puluh empat menit, token di dalam ruangan.

2:17 Dependabot, lima: begitu dipercaya sehingga worm mengenakan seragamnya.

### git blame

2:20 Radius ledakan: empat puluh dua paket TanStack. Dua puluh dua hilir, dari proyek dengan sembilan bintang. Lebih dari seratus enam puluh di seluruh ekosistem setelah worm mencapai Mistral. Setiap versi hulu membawa tanda tangan yang valid: dibangun oleh pipeline resmi. Benar. Putusan, postmortem: SHIP IT. Kedua pemelihara memposting postmortem berstempel waktu dalam sehari; dalam tiga hari, pipeline hilir menginstal dengan ignore-scripts, memisahkan build dari publish, dan menjatuhkan token yang berumur panjang.

### Radius ledakan

2:47 Default npm belum bergerak. Senin: ignore-scripts saat instal, dan token publish keluar dari pekerjaan yang menjalankannya. Kirimkan saya insiden yang masih tidak diizinkan untuk Anda bicarakan, di komentar, atau di thedailydiff.dev. Dan itulah perbedaannya untuk hari ini.

### Putusan

3:00 Saya Niko dari Axrisi. Gabungkan dengan bertanggung jawab.

## Sumber

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