Eylül 2025'teki Shai-Hulud solucanı ile başlayan "kendini çoğaltan paket" dönemi 2026'da hızlanarak sürdü. Palo Alto Unit 42'nin derlemesinden önemli olayları ve JavaScript projelerinde uygulanabilecek önlemleri özetliyorum.
Zaman çizelgesi
| Tarih | Olay | Not |
|---|---|---|
| 22 Nisan | @bitwarden/cli@2026.4.0 | Yaklaşık 1,5 saat yayında kaldı; preinstall kancası Bun indirip kimlik bilgisi hırsızı çalıştırdı |
| 29 Nisan | Mini Shai-Hulud (SAP) | 4 paket, haftalık ~570 bin indirme |
| 11 Mayıs | TanStack dalgası | Çalınmış kimlik bilgisi yok: GitHub Actions'ta pwn request + önbellek zehirleme + çalıştırıcı belleğinden OIDC token. Gün sonunda 169 pakette 373 zararlı sürüm; geçerli SLSA provenance taşıyorlardı |
| 19 Mayıs | @antv dalgası | Bakımcı hesabı ele geçirildi; yaklaşık bir saatte 323 pakette 639 zararlı sürüm |
| 1 Haziran | @redhat-cloud-services | En az 32 paket; ele geçirilmiş bir çalışan hesabıyla kod incelemesini atlayan "orphan commit"ler |
| 14 Temmuz | AsyncAPI | Korumasız ön sürüm dallarına (next, schema) yapılan commit'ler yayın hattını tetikledi |
Öne çıkan teknikler
- Solucan yayılımı: Kurbanın npm ve GitHub token'ları ile, kurbanın bakımını yaptığı diğer paketler de zehirleniyor.
- Kurulum anında çalışma: preinstall kancaları, git bağımlılıkları ve
binalanı takma adları. Unit 42'ye göre bin takma adları--ignore-scriptsaçıkken bile çalışmaya yol açabiliyor. Ocak 2026'da duyurulan "PackageGate" açıkları da git bağımlılıkları ve.npmrcüzerinden betik engellemesinin atlanabildiğini göstermişti. - Provenance tek başına güvence değil: TanStack dalgasındaki paketler geçerli SLSA Build Level 3 kanıtı taşıyordu, çünkü zararlı kod meşru yayın hattının içinden yayımlandı.
- Çok katmanlı komuta altyapısı: Miasma yükü; sabit IP, Ethereum akıllı sözleşmesi, Nostr röleleri ve BitTorrent DHT'yi birlikte kullanıyor. Tek bir katmanı engellemek yetmiyor.
- Ölü adam anahtarı: 11 Mayıs yükünün, çalınan GitHub token'ı iptal edilirse ev dizinini silmeye çalıştığı bildirildi. Olay müdahalesinde önce makineyi izole edin, sonra token'ı iptal edin.
Ekipler için savunma listesi
- Bekleme süresi: Yeni yayımlanan sürümleri 24-72 saat almayın. Dalgaların çoğu saatler içinde tespit ediliyor.
- Kilit dosyası ve
npm ci: CI'da asla kilit dosyasını güncelleyen bir kurulum yapmayın. - Betikleri kapatın:
.npmrciçindeignore-scripts=true; derleme gerektiren paketleri tek tek izinli listeye alın. Bunun tam koruma olmadığını unutmayın. - Özel registry/proxy: Geliştirici makineleri ve CI doğrudan genel registry'ye değil, kontrol ettiğiniz bir proxy'ye (Verdaccio, Artifactory, Nexus) bağlansın.
- CI çıkış trafiğini kısıtlayın: Çalıştırıcılar yalnızca registry'nize ve dağıtım hedeflerinize erişebilsin. Veri sızdırma ve ikinci aşama indirme engellenir.
- GitHub Actions sertleştirme:
pull_request_targetile fork kodunu çalıştırmayın, ön sürüm dalları dahil tüm yayın dallarını koruyun, yayın iş akışlarında önbellek kullanımını gözden geçirin. - Kendi paketleriniz için: Beklenmeyen sürüm artışlarını, yeni preinstall kancalarını ve GitHub hesabınızda sizin açmadığınız depoları izleyin.
- Olay sonrası: npm token'ları, GitHub PAT'leri, bulut anahtarları, SSH anahtarları ve CI sırlarının hepsini yenileyin. CI'da beklenmeyen
bunsüreçlerini arayın.
Siz ekip olarak hangi önlemleri uyguluyorsunuz? Özellikle bekleme süresini nasıl uyguladığınızı (Renovate minimumReleaseAge, proxy kuralı vb.) paylaşırsanız faydalı olur.
