Son 2 yılda npm’de neler oldu?
npm ekosistemi haftada milyarlarca indirme gören dev bir bağımlılık ağı. Bir paketin kendisi temiz olsa bile, dolaylı bağımlılıkları üzerinden zehirli kod projelere girebiliyor. 2024’ten bu yana belgelenen büyük olaylar:
- LottieFiles (Ekim 2024): Maintainer’ın npm token’ı phishing ile çalındı, web3 wallet drain payload’ı yerleştirildi.
- Solana web3.js (Aralık 2024): Spear-phishing ile 2FA bypass, private key exfiltration.
- eslint-config-prettier (Temmuz 2025): 78M haftalık indirme. npnjs.com typosquat phishing.
- chalk & debug “Qix” (Eylül 2025): 18 popüler paket, haftalık 2.6 milyar indirme. Şimdiye kadarki en büyük tek olay.
- Shai-Hulud worm (Eylül 2025): İlk self-replicating npm worm. 500+ paket otomatik enfekte oldu.
- Shai-Hulud 2.0 (Kasım 2025): 796 paket. Credential bulamazsa home dizinini siliyor.
- React2Shell (Aralık 2025): Next.js + React’te CVSS 10.0 RCE. 24 saatte 766 sunucu hack’lendi.
- Trivy / TeamPCP (Mart 2026): Güvenlik tarayıcısının kendisi zehirlendi. ICP blockchain C2.
- Axios (Mart 2026): Kuzey Kore aktörü. 100M haftalık indirme. Cross-platform RAT.
- Bitwarden CLI (Nisan 2026): npm trusted publishing’i ilk kez bypass eden saldırı.
- TanStack (Mayıs 2026): 42 paket, 84 sürüm. İlk geçerli SLSA provenance imzalı zehirli paket. Dead-man’s switch.
Aşağıda her olayın detayını “Taranan saldırılar” bölümünde bulabilirsiniz.
Bu araç ne yapar, ne yapmaz?
Ne yapar:
- package.json veya package-lock.json dosyanızı tarayıcınızda parse eder.
- Doğrudan ve dolaylı tüm bağımlılıkları çıkartır.
- İki tür veritabanına karşı karşılaştırır:
- Tedarik zinciri saldırıları (paket içeriğine yerleştirilen zehirli kod).
- Kritik framework açıkları (React2Shell, vb. — sürüm aralığı eşleşmesi).
- Eşleşme bulursa: zehirli/şüpheli paketleri listeler, hangi olayla bağlantılı olduğunu gösterir, adım adım kurtarma talimatı verir.
- Hiçbir paket bulunamazsa size temiz raporu sunar.
Ne yapmaz:
- Bilinmeyen sıfır-gün (zero-day) saldırıları tespit edemez — yalnızca veritabanındaki kayıtlı olaylar taranır.
- Çalışan üretim ortamınızı taramaz, sadece dosyayı analiz eder.
- Bağımlılık ağacınızdaki performans/lisans/güncellik sorunlarını analiz etmez.
- npm audit veya Snyk gibi kapsamlı zafiyet veritabanını yerine geçmez — onları tamamlayıcıdır.
Tarama tarayıcınızda yapılır — sunucumuza hiçbir şey gönderilmez
Hassas bilgi olan bağımlılık ağacınızı dış sunuculara göndermek yerine, tüm tarama mantığını JavaScript ile tarayıcı tarafında çalıştırıyoruz:
- Dosya yüklendiğinde File.text() ile tarayıcı içinde okunur.
- JSON parse edilir, bağımlılık listesi çıkartılır.
- Build sırasında sayfaya gömülen zehirli paket veritabanıyla karşılaştırma yapılır.
- Sonuç tarayıcınızda render edilir.
Hiçbir aşamada Zeisoft veya üçüncü taraf sunucularına veri gitmez. İsterseniz internet bağlantınızı kestikten sonra bile taramayı çalıştırabilirsiniz.
Zehirli paket bulduysam, kritik adımlar
Çok önemli: GitHub token’ı paniğe kapılıp hemen iptal etmeyin. TanStack ve Shai-Hulud 2.0 saldırılarındaki “dead-man’s switch” tam olarak bu davranışı bekliyor — token revoke edildiğinde home dizininizi siliyor.
Doğru sıra:
- Etkilenen makineyi internetten izole edin — Wi-Fi’yi kapatın, ethernet kablosunu çıkarın. Watcher process’in dış komut alamayacağından emin olun.
- Süreçleri öldürün:
ps aux | grep nodeile şüpheli node süreçlerini bulupkill -9 <PID>ile sonlandırın. - Local cache ve bağımlılıkları silin:
rm -rf node_modules ~/.npm/_cacache && npm cache clean --force. - package-lock.json içinden zehirli sürüm referanslarını manuel temizleyin ve önceki bilinen-temiz sürüme rollback yapın.
- Temiz başka bir makineden (saldırının değmediği) GitHub token’larınızı, npm token’larınızı, AWS/cloud secret’larınızı revoke edip yeniden üretin.
- CI/CD pipeline cache’lerini sıfırlayın. Cloudflare/GitHub Actions/CircleCI hepsi paket cache tutar — zehirli versiyon orada da olabilir.
- Logları inceleyin: Token kullanım geçmişi, son commit history, beklenmedik webhook çağrıları. Sızıntı boyutunu ölçün.
Eğer üretim sisteminiz etkilendiyse veya nereden başlayacağınızdan emin değilseniz, bizimle iletişime geçin. Incident response konusunda yardımcı olabiliriz.
Sürekli koruma için pratikler
Bu araç bir teşhis aracı — gerçek koruma süreç ve disiplinle gelir:
npm cikullanın,npm installdeğil. CI/CD’de her zaman lock dosyasını birebir takip edin.- Bağımlılıkları kilitleyin: package.json’da
^ve~yerine kesin sürüm pin yapabilirsiniz, en azından kritik paketler için. - Otomatik audit:
npm audither build’de çalışsın, kritik bulgularda build kırılsın. - min-release-age=7 ayarı: .npmrc dosyasına eklerseniz npm yalnızca en az 7 gündür yayında olan paketleri yükler — son dakika saldırılarına karşı koruma.
- ignore-scripts=true: .npmrc’de bu ayar postinstall/preinstall script’lerini engeller, çoğu payload bu hook’lardan çalışır.
- 2FA + hardware key: Maintainer hesaplarınız için TOTP yerine FIDO2 (YubiKey vb.) kullanın.
- Bağımlılık sayısını düşürün: Bir paket yerine 4-5 satır kod yazılabiliyorsa, paket eklemekten kaçının.
- Socket.dev veya benzeri statik tarayıcılar: PR’larınızda bağımlılık değişikliklerini otomatik tarayın.
E-ticaret sitenizin veya iç yazılımınızın CI/CD pipeline’ında bu pratikleri nasıl uygulayacağınızı konuşmak isterseniz, ekibimizle görüşebilirsiniz.