+− THE DAILY DIFFdev & AI news
SHIP IT

Peningkatan Dependabot menerbitkan cecacing. 22 pakej.

Bot membuka permintaan tarik.

Bot membuka permintaan tarik. Manusia menggabungkannya 24 minit kemudian. 95 minit selepas itu, cecacing telah menerbitkan 110 versi berniat jahat daripada 22 pakej npm miliknya, di bawah namanya, dengan token yang ditemuinya dalam CI miliknya.

Baca edisi bertulis (Bahasa Inggeris) ↗

Apa yang diliputi video ini

  • Bot, manusia, cecacing
  • Bagaimana ia berlaku, mengapa npm membenarkannya, siapa yang dipersalahkan
  • Garis masa: cache yang diracun
  • 21:48 — peningkatan Dependabot
  • Mengapa ia berfungsi

Transkrip terjemahan

Diterjemahkan daripada penceritaan asal Bahasa Inggeris. Audio dan kapsyen yang tersedia dikawal oleh YouTube.

Bot, manusia, cecacing

0:00 Bot membuka permintaan tarik; manusia menggabungkannya dua puluh empat minit kemudian. Sembilan puluh lima minit kemudian, cecacing telah menerbitkan seratus sepuluh versi pakejnya, sebagai dirinya. Analisis pasca insiden TanStack mempunyai cap masa huluan, penyelenggara hiliran mempunyai selebihnya, dan Hacker News memberikannya seribu seratus mata dan nama: Mini Shai-Hulud. Bagaimana ia berlaku, mengapa npm membenarkannya, siapa yang dipersalahkan.

Bagaimana ia berlaku, mengapa npm membenarkannya, siapa yang dipersalahkan

0:21 Ini adalah The Daily Diff, analisis pasca insiden. 11 Mei, pagi. Cabang yang dinamakan semula membuka permintaan tarik terhadap TanStack Router. Ia ditutup dalam masa sejam, tetapi aliran kerja penanda aras telah pun menjalankan kodnya dan

Garis masa: cache yang diracun

0:33 menyimpan cache yang diracun di bawah kunci yang akan digunakan oleh aliran kerja pelepasan. Sembilan belas dua puluh. Gabungan yang sah menjalankan pelepasan. Cache kembali, binari membaca memori pelari, mengambil token penerbitan, dan menghantar lapan puluh empat versi merentasi empat puluh dua pakej, dengan asal usul yang sah. Ujian gagal. Ia tetap diterbitkan. Sembilan belas empat puluh enam, seorang penyelidik StepSecurity memfailkan isu itu; pada pukul sembilan UTC semuanya tidak disokong lagi dan nasihat dikeluarkan.

0:55 Tidak disokong lagi bukan bermaksud tiada: npm enggan untuk tidak menerbitkan apa-apa yang mempunyai tanggungan, jadi ia kekal boleh dipasang selama berjam-jam. Dua puluh satu empat puluh lapan. Dalam projek data penerbangan sembilan bintang, Dependabot membuka permintaan tariknya yang rutin: naikkan kumpulan dev-dependencies, tiga belas kemas kini. Dua adalah versi TanStack yang diracun. Dua puluh dua dua belas: digabungkan. Aliran kerja penerbitan menjalankan npm C-I dengan token dalam

21:48 — peningkatan Dependabot

1:15 skop; skrip persediaan membacanya, dan pada dua puluh dua tujuh belas cecacing menerbitkan sebagai dirinya. Lima versi setiap pakej yang dicapai oleh token, walaupun projek sampingan lama: satu token klasik untuk segalanya. Seratus sepuluh versi dalam sembilan puluh lima minit. Dia mengetahuinya melalui e-mel, selepas tengah malam. Mengapa ia berfungsi. Satu: npm install menjalankan skrip kitaran hayat orang asing secara lalai, dan skrip persediaan kebergantungan git diambil kira.

1:39 Dua: cecacing mahukan satu perkara: token yang menerbitkan tanpa faktor kedua. Kemudian ia bertanya kepada pendaftar apa lagi yang dimiliki oleh penyelenggara itu, dan menerbitkan semula semua itu dengan sendirinya di dalamnya. Tiga: tiada apa-apa dalam rantaian itu adalah orang.

Mengapa ia berfungsi

1:51 Bot mencadangkan, saluran paip memasang, dan cecacing membalas budi: cabang dead-dropnya dinamakan dependabot slash github-actions slash fremen. git blame. Model pemasangan npm, lima puluh lima peratus: skrip berjalan semasa pemasangan, yang tidak disokong lagi kekal boleh dipasang, token pintasan dua faktor wujud. CI TanStack, dua puluh lima: aliran kerja target permintaan tarik yang tidak diaudit berjalan kod cabang dengan akses tulis ke cache. Kebiasaan bump, lima belas: tiga belas kemas kini digabungkan dalam dua puluh empat minit, token dalam bilik.

2:17 Dependabot, lima: begitu dipercayai cecacing memakai uniformnya.

git blame

2:20 Jejari letupan: empat puluh dua pakej TanStack. Dua puluh dua hiliran, daripada projek dengan sembilan bintang. Lebih seratus enam puluh di seluruh ekosistem sebaik sahaja cecacing mencapai Mistral. Setiap versi huluan membawa tandatangan yang sah: dibina oleh rasmi saluran paip. Betul. Keputusan, pasca insiden: SHIP IT. Kedua-dua penyelenggara menyiarkan analisis pasca insiden bertarikh dalam sehari; dalam masa tiga hari, saluran paip hiliran memasang dengan ignore-scripts, memisahkan binaan daripada terbitkan, dan menggugurkan token yang tahan lama.

Jejari letupan

2:47 Lalai npm belum bergerak. Isnin: ignore-scripts semasa pemasangan, dan token terbitan keluar daripada kerja yang menjalankannya. Hantar insiden yang anda masih tidak dibenarkan untuk bincangkan kepada saya, dalam komen, atau di thedailydiff.dev. Dan itulah perbezaan untuk hari ini.

Keputusan

3:00 Saya Niko dari Axrisi. Gabungkan dengan bertanggungjawab.

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 berkaitan