Tedarik zinciri güvenlik haritası
Bağımlılık Bulutsusu
Uygulamanda senin yazdığın birkaç bin satır var; gerisi başkalarının kodundan oluşan bir bulutsu.
Gerçek bağımlılık anlık görüntüsü · varsayımsal saldırı
- 40 senin yazmadığın paket
- 14 hesap bunları yayımlayabiliyor
- 26 tanesini tek bir hesap (A) yayımlayabiliyor
- 6 adımda en derindeki pakete ulaşılıyor
- 2 tanesinde provenance kanıtı var
- 0 tanesi kurulum betiği bildiriyor
“npm install [email protected] --package-lock-only --ignore-scripts” komutunun 23 Eylül 2026 tarihinde herkese açık npm registry’sinden çözümlenmiş anlık görüntüsü. Bu sayfayı kullanırken hiçbir şey indirilmez.
quorate@1.3.0
- Senin kodun
- Saldırganın yayımlayabildiği
Model sınırları
- Ağaç ve üst verileri gerçek: “npm install [email protected] --package-lock-only --ignore-scripts”, 23 Eylül 2026 tarihinde çözümlendi. Saldırı varsayımsal; buradaki hiçbir paket ya da hesap ele geçirilmedi.
- Benimki dışındaki bakımcı hesapları harflerle gösteriliyor; bu sayfa benden başka kimsenin adını vermiyor. Saldırı varsayımsal ve bu bakımcıların güvenliği hakkında hiçbir şey söylemiyor.
- Zararlı sürüm bir sonraki yama sürümüdür. Varsayılan olarak, Microsoft’un ChainDrop için anlattığı gibi her paketin en son sürümü temel alınarak hazırlanır; buradaki A hesabının 26 paketinden 7 tanesi, aralıkları bunu reddeden daha eski bir seride duruyor. “Ağacındaki sürüm” seçeneği en kötü durumdur: kullanılan her seriye yama çıkaran bir saldırgan. Şapka (^) ve tilde (~) aralıkları kendi serilerindeki bir yamayı kabul eder.
- Kurulan her paketin uygulama çalışırken yüklendiği varsayılıyor; bu yüzden içe aktarmada çalışan kod her zaman çalışır.
- min-release-age yeni bir sürümü geciktirir: npm yalnızca belirtilen günden daha uzun süredir yayında olan sürümleri kurar; bu yüzden 3 günlük bir pencere, sürümü kurulumun 3. gününde hâlâ tutar (kurulum günleri, sürümün yayımlandığı saatten itibaren sayılır). Yalnızca zararlı sürüm bu süre içinde fark edilip kaldırılırsa korur; tespit simüle edilmiyor.
- Lockfile yalnızca ona uyan kurulumları korur. npm update her paketi aralıklarının izin verdiği en yeni sürüme taşır; lockfile yoksa npm install her aralığı baştan çözümler.
Daha fazlası
Bu olaylar hakkında yazdıklarım
- ChainDrop Bir Patch Sürümüne Bindi. Patch Sürümleri Beklesin.5 Ağustos 2026 · Solucanın yama sürümleriyle nasıl yayıldığı ve önerdiğim .npmrc temeli.
- AsyncAPI npm Saldırısı: Provenance Commit'i Değil, Pipeline'ı Kanıtlar16 Temmuz 2026 · Geçerli provenance ve --ignore-scripts, içe aktarmada çalışan yükü neden durdurmadı.
Birincil kaynaklar
- Microsoft: ChainDrop tedarik zinciri saldırısı (4 Ağustos 2026) (yeni sekmede açılır)Preinstall yükü; solucan her paketin en son tarball’ını alır, yama sürümünü artırır ve çalınan token’ın erişebildiği her paketi yeniden yayımlar.
- Microsoft: AsyncAPI npm saldırısı (15 Temmuz 2026) (yeni sekmede açılır)--ignore-scripts ile durmayan, geçerli provenance ile yayımlanmış, içe aktarmada çalışan yük.
- GitHub değişiklik günlüğü: npm kurulum güvenliği (8 Temmuz 2026) (yeni sekmede açılır)npm 12’de bağımlılıkların preinstall, install ve postinstall betikleri izin verilmedikçe çalışmaz.
- npm belgeleri: yapılandırma (min-release-age, ignore-scripts, allow-scripts) (yeni sekmede açılır)min-release-age yalnızca belirtilen günden daha uzun süredir yayında olan sürümleri kurar.
- npm belgeleri: npm ci (yeni sekmede açılır)npm ci lockfile ister, uyuşmazlıkta hata verir ve ona asla yazmaz: kurulum dondurulmuştur.
- node-semver: şapka ve tilde aralıkları (yeni sekmede açılır)^ en soldaki sıfır olmayan kısmı koruyan değişikliklere, ~ yama değişikliklerine izin verir.
- npm belgeleri: package-lock.json (yeni sekmede açılır)Lockfile her kurulum konumunu listeler ve kurulum betiği olan paketleri işaretler (hasInstallScript).
- npm belgeleri: npm install (yeni sekmede açılır)Lockfile varsa kurulum ona göre yapılır; yoksa npm, package.json’daki aralıkları çözümler.
- npm belgeleri: npm update (yeni sekmede açılır)npm update paketleri semver aralıklarının izin verdiği en son sürüme taşır.