+− THE DAILY DIFFdev & AI news
SHIP IT

Peningkatan Dependabot mempublikasikan worm. 22 paket.

Bot membuka permintaan pull.

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.

Baca edisi tertulis (Inggris) ↗

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

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

  1. TanStack postmortem (Tanner Linsley, May 11, refined May 15)tanstack.com
  2. TanStack "Hardening TanStack After the npm Compromise" (May 12)tanstack.com
  3. TanStack/router#7383 — the StepSecurity detection issuegithub.com
  4. Downstream incident post, @squawk/* (May 12)github.com
  5. Downstream hardening post (May 14)github.com
  6. The Dependabot PR #246 (opened 21:48 UTC, merged 22:12)github.com
  7. @tan_stack advisory post, 21:19 UTCx.com
  8. StepSecurity — worm internals, bypass_2fa search, Dependabot-style branch nameswww.stepsecurity.io
  9. Socketsocket.dev
  10. Aikido — "over 160 packages, including Mistral"www.aikido.dev
  11. Hacker News (1,097 points)news.ycombinator.com

Video terkait