Dependabot yükseltmesi bir solucan yayınladı. 22 paket.
Bir bot bir çekme isteği açar.
Bir bot bir çekme isteği açar. Bir insan 24 dakika sonra onu birleştirir. Bundan 95 dakika sonra, bir solucan, CI'sinde bulduğu bir jetonla, kendi adıyla, 22 npm paketinin 110 kötü amaçlı sürümünü yayınladı.
Yazılı sürümü oku (İngilizce) ↗
Bu video neleri kapsar
- Bir bot, bir insan, bir solucan
- Nasıl oldu, npm neden izin verdi, suçu kim üstleniyor?
- Zaman çizelgesi: zehirli önbellek
- 21:48 — Dependabot yükseltmesi
- Neden çalışıyor?
Çevrilmiş deşifre
Orijinal İngilizce anlatımdan çevrilmiştir. Mevcut ses ve altyazılar YouTube tarafından kontrol edilir.
Bir bot, bir insan, bir solucan
0:00 Bir bot bir çekme isteği açar; bir insan yirmi dört dakika sonra onu birleştirir. Doksan beş dakika sonra, bir solucan yayınladı yüz on sürümünü paketlerini, kendisi olarak. TanStack'ın postmortem'inde yukarı akış zaman damgaları, aşağı akış bakıcısının geriye kalanı var ve Hacker News ona bin yüz puan ve bir isim veriyor: Mini Shai-Hulud. Nasıl oluyor, npm neden izin veriyor, suçu kim üstleniyor.
Nasıl oldu, npm neden izin verdi, suçu kim üstleniyor?
0:21 Bu The Daily Diff, postmortem. 11 Mayıs, sabah. Yeniden adlandırılmış bir çatal TanStack Router'a karşı bir çekme isteği açar. Bir saat içinde kapanır, ancak bir kıyaslama iş akışı kodunu zaten çalıştırmıştır ve
Zaman çizelgesi: zehirli önbellek
0:33 yayın iş akışının kullanacağı anahtar altında zehirli bir önbelleği kaydetmiştir. On dokuz yirmi. Meşru bir birleştirme sürümü çalıştırır. Önbellek geri gelir, bir ikili çalıştırıcının belleğini okur, yayın jetonunu alır ve kırk iki paket boyunca seksen dört sürüm gönderir, geçerli kökenle. Testler başarısız olur. Yine de yayınlar. On dokuz kırk altı, bir StepSecurity araştırmacısı sorunu dosyalar; dokuz UTC'ye kadar her şey kullanımdan kaldırılır ve danışma yayınlanır.
0:55 Kullanımdan kaldırıldı gitmiş değil: npm bağımlılıkları olan hiçbir şeyi yayınlamayı reddediyor, bu yüzden saatlerce kurulabilir kalır. Yirmi bir kırk sekiz. Dokuz yıldızlı bir havacılık veri projesinde, Dependabot rutin çekme isteğini açar: dev-dependencies grubunu yükselt, on üç güncelleme. İkisi zehirli TanStack sürümleri. Yirmi iki on iki: birleştirildi. Yayın iş akışı npm C-I'yi jetonla çalıştırır
21:48 — Dependabot yükseltmesi
1:15 kapsamda; bir hazırlık betiği onu okur ve yirmi iki on yedi'de solucan yayınlar o olarak. Jetonun ulaştığı her paketin beş sürümü, eski bir yan proje bile: her şey için bir klasik jeton. Doksan beş dakikada yüz on sürüm. Gece yarısından sonra, e-posta ile öğrenir. Neden çalışıyor. Bir: npm install varsayılan olarak yabancıların yaşam döngüsü betiklerini çalıştırır, ve bir git bağımlılığının hazırlık betiği sayılır.
1:39 İki: solucan tek bir şey ister: ikinci bir faktör olmadan yayınlayan bir jeton. Sonra kayıt defterine o bakıcının başka neye sahip olduğunu sorar, ve her şeyi kendi içinde tekrar yayınlar. Üç: zincirdeki hiçbir şey bir kişi değildir.
Neden çalışıyor?
1:51 Bir bot önerir, bir ardışık düzen yükler ve solucan iyiliği iade eder: onun ölü-damla dalları dependabot slash github-actions slash fremen olarak adlandırılmıştır. git blame. npm'in yükleme modeli, yüzde elli beş: betikler yüklemede çalışır, kullanımdan kaldırılanlar yüklenebilir kalır, iki faktörlü atlama jetonları mevcuttur. TanStack'ın CI'ı, yirmi beş: önbelleğe yazma erişimi olan çatal kodunu çalıştıran denetlenmemiş bir çekme isteği hedef iş akışı. önbelleğe yazma erişimi. Yükseltme alışkanlığı, on beş: yirmi dört dakikada birleştirilen on üç güncelleme, odadaki jeton.
2:17 Dependabot, beş: o kadar güveniliyor ki solucan onun üniformasını giyiyor.
git blame
2:20 Etki alanı: kırk iki TanStack paketi. Dokuz yıldızlı bir projeden, yirmi iki alt akış. Solucan Mistral'a ulaştığında ekosistem genelinde yüzden fazla. Her yukarı akış sürümü geçerli bir imza taşıyordu: resmi ardışık düzen tarafından oluşturuldu. Doğru. Karar, postmortem: SHIP IT. Her iki bakıcı da bir gün içinde zaman damgalı postmortem'ler yayınlar; üç gün içinde, aşağı akış ardışık düzeni ignore-scripts ile yüklenir, yapıyı yayından ayırır ve uzun ömürlü jetonu düşürür.
Etki alanı
2:47 npm'in varsayılanları değişmedi. Pazartesi: yüklemede ignore-scripts ve yayın jetonu çalıştıran işten çıkar. Hakkında konuşmanıza izin verilmeyen olayı bana gönderin, yorumlar kısmında veya thedailydiff.dev adresinde. Ve bugünün farkı bu.
Karar
3:00 Ben Axrisi'den Niko. Sorumlu birleştirin.
Kaynaklar
- TanStack postmortem (Tanner Linsley, May 11, refined May 15)tanstack.com
- TanStack "Hardening TanStack After the npm Compromise" (May 12)tanstack.com
- TanStack/router#7383 — the StepSecurity detection issuegithub.com
- Downstream incident post, @squawk/* (May 12)github.com
- Downstream hardening post (May 14)github.com
- The Dependabot PR #246 (opened 21:48 UTC, merged 22:12)github.com
- @tan_stack advisory post, 21:19 UTCx.com
- StepSecurity — worm internals, bypass_2fa search, Dependabot-style branch nameswww.stepsecurity.io
- Socketsocket.dev
- Aikido — "over 160 packages, including Mistral"www.aikido.dev
- Hacker News (1,097 points)news.ycombinator.com



