- Açık kaynak paketi @ctrl/tinycolor'ı içeren çok sayıda npm paketi kötü amaçlı sürümlerle enfekte oldu; bunun nedeni, ortak kullanılan bir depodaki GitHub Actions workflow'u üzerinden npm token'ının çalınmasıydı
- Saldırgan, geniş yetkilere sahip npm token'ını kullanarak yaklaşık 20 pakete kötü amaçlı kod dağıttı; bunlar arasında @ctrl/tinycolor haftalık 2 milyon indirmeye ulaştığı için etkisi büyüktü
- Enfekte sürümler
postinstall aşamasında kötü amaçlı payload çalıştırdı; GitHub ve npm güvenlik ekipleri hızla müdahale ederek kaldırma ve temizlik işlemlerini gerçekleştirdi
- Yazar, tekrarını önlemek için Trusted Publishing (OIDC) geçişi, token yetkilerinin en aza indirilmesi, 2FA zorunluluğu ve pnpm özelliklerinden yararlanılması gibi güçlendirilmiş bir güvenlik planı hazırladı
- Bu olay, yazılım tedarik zinciri güvenliğinin kırılganlığını gösteriyor ve npm ekosistemi genelinde güvenlik özelliklerinin iyileştirilmesiyle güvenlik pratiklerinin değişmesi gerektiğini ortaya koyuyor
TL;DR
- Kötü amaçlı bir GitHub Actions workflow'u paylaşılan bir depoya push edilerek npm token'ı çalındı
- Bu token ile saldırgan 20 paketin kötü amaçlı sürümlerini yayımladı; bunlar arasında @ctrl/tinycolor yüksek indirme sayısı nedeniyle daha büyük etki yarattı
- Kişisel hesaplar veya repolar doğrudan ele geçirilmedi; ayrıca phishing ya da yerel kötü amaçlı yazılım kurulumu da olmadı
- GitHub/npm güvenlik ekiplerinin hızlı müdahalesiyle kötü amaçlı sürümler kaldırıldı, ardından cache'i temizlemek için temiz sürümler yeniden yayımlandı
Olay nasıl fark edildi? (How I Found Out)
- 15 Eylül öğleden sonra topluluk üyesi Wes Todd, Bluesky DM üzerinden sorunu bildirdi
- GitHub/npm güvenlik ekipleri etkilenen paketlerin listesini çoktan toparlamış ve kaldırma sürecini başlatmıştı
- İlk ipucu olarak paylaşılan kötü amaçlı branch adı 'Shai-Hulud'du; bu ad Dune evrenindeki kumsolucanından geliyor
Gerçekte ne oldu? (What Actually Happened)
- Uzun zaman önce birlikte çalışılan angulartics2 deposunda, hâlâ admin yetkisine sahip bir işbirlikçi bulunuyordu
- Bu depoda saklanan npm token'ı, kötü amaçlı bir GitHub Actions workflow'u tarafından çalındı
- Saldırgan bu token ile @ctrl/tinycolor dahil yaklaşık 20 paketi yayımladı
- GitHub/npm güvenlik ekipleri kötü amaçlı sürümleri hızla kaldırdı ve yazar güvenilir yeni sürümleri tekrar yayımladı
Etki (Impact)
- Kötü amaçlı sürümler kurulduğunda postinstall script'i çalışarak güvenlik tehdidi oluşturdu
- Etkilenen kullanıcıların StepSecurity'nin anlık müdahale rehberine başvurması öneriliyor
Yayınlama ortamı ve müdahale planı (Publishing Setup & Interim Plan)
- Daha önce otomatik yayınlama için semantic-release + GitHub Actions kombinasyonu kullanılıyordu
- npm'nin provenance özelliği kullanılmış olsa da, geçerli bir token'a sahip saldırganı engelleyemedi
- İleride statik token'ları kaldırmak için Trusted Publishing (OIDC) kullanılacak
- Şu anda tüm token'lar iptal edildi; ayrıca 2FA zorunlu hale getirildi, yalnızca granular yetkili token'lara izin veriliyor ve pnpm'in minimumReleaseAge özelliği gibi ek güvenlik önlemleri değerlendiriliyor
İdeal iyileştirmeler (Publishing Wishlist)
- npm hesap düzeyinde OIDC tabanlı Trusted Publishing'i zorlama seçeneği sunulmalı
- provenance eksik olduğunda yayını engelleme özelliği ile semantic-release ve OIDC'nin tam entegrasyonu sağlanmalı
- GitHub arayüzünde 2FA tabanlı manuel onaylı yayınlama özelliği sunulması isteniyor
- Pro abonelik olmadan da GitHub Environments düzeyindeki koruma özellikleri kullanılabilmeli
- npm paket sayfalarında postinstall script'i bulunup bulunmadığı gösterilmeli ve silinen sürümlerin neden kaldırıldığı açıklanmalı
Henüz yorum yok.