MagmaNex LogoMagmaNex
Ana Sayfa/Blog/Tedarik Zinciri Saldırıları: npm ve PyPI Paket Zehirlenmesi
Tedarik Zinciri Saldırıları: npm ve PyPI Paket Zehirlenmesi
Güvenlik10 Haziran 2026· 8 dk okuma

Tedarik Zinciri Saldırıları: npm ve PyPI Paket Zehirlenmesi

Yazılım tedarik zinciri saldırıları nasıl çalışır? Typosquatting, bağımlılık karışıklığı ve zehirli post-install scriptlerini anlatıyor, geliştiriciler için uygulanabilir bir savunma listesi sunuyoruz.

#tedarik zinciri#npm#pypi#bağımlılık güvenliği#devsecops#sbom

Tedarik Zinciri Saldırıları: npm ve PyPI Paket Zehirlenmesi

Modern bir uygulama yüzlerce, çoğu zaman binlerce açık kaynak bağımlılık üzerine kuruludur. Kendi yazdığınız kod, projenizdeki toplam kodun belki yüzde beşidir. Geri kalan her şey npm install veya pip install ile makinenize inen, sizin görmediğiniz, çoğunlukla okumadığınız paketlerden gelir. İşte saldırganların hedeflediği yer tam olarak burası: zayıf halkanız sizin kodunuz değil, güvendiğiniz bağımlılıklar.

Tedarik zinciri saldırısı nedir?

Tedarik zinciri saldırısı, hedefin kendisine doğrudan saldırmak yerine, hedefin güvendiği bir aracıyı (bir kütüphane, bir paket, bir build aracı) ele geçirmektir. Saldırgan tek bir popüler paketi zehirler; o paket binlerce projenin bağımlılık ağacına dahil olduğu için zehir kendiliğinden yayılır. 2020'deki SolarWinds olayı bu mantığın kurumsal ölçekteki en bilinen örneğiydi; ancak npm ve PyPI gibi açık kaynak kayıt defterlerinde aynı mantık her hafta, çok daha küçük ölçeklerde tekrarlanıyor.

Tehlikenin asıl boyutu şudur: zehirli bir paket yalnızca üretim sunucunuzda değil, geliştirici makinelerinde ve CI/CD pipeline'larında da çalışır. Bir post-install scripti, build sırasında ortam değişkenlerinizi, registry token'larınızı veya SSH anahtarlarınızı sessizce dışarı sızdırabilir.

Gerçek saldırı vektörleri

Typosquatting (yazım hatası avcılığı)

Saldırgan, popüler bir paketin adına çok benzeyen bir isim yayınlar: reqeusts, python-dateutil yerine python-dateutils, lodash yerine 1odash. Aceleyle yazılan tek bir harf hatası, kötü amaçlı paketi projenize sokmaya yeter.

Bağımlılık karışıklığı (dependency confusion)

Şirketler genellikle iç (private) paketler kullanır: acme-internal-auth gibi. Saldırgan aynı isimde bir paketi public registry'ye, daha yüksek bir versiyon numarasıyla yükler. Yanlış yapılandırılmış bir paket yöneticisi, "daha yeni" sürümü tercih ederek public ve zehirli olanı çeker. 2021'de bu teknikle birçok büyük şirketin iç ağına erişildi.

Ele geçirilmiş bakımcı (maintainer) hesapları

Bazen yeni bir paket yazmaya bile gerek yoktur. Saldırgan, milyonlarca indirmesi olan meşru bir paketin bakımcısının npm hesabını ele geçirir (parola sızıntısı, phishing, oturum çalma) ve zararlı kodu mevcut güvenilir pakete bir "yama" olarak ekler. Kullanıcılar farkında olmadan otomatik güncellemeyle zehri alır.

Zararlı post-install scriptleri

Hem npm (scripts.postinstall) hem PyPI (setup.py çalıştırma) kurulum sırasında keyfi kod çalıştırmaya izin verir. Bu, en sevilen saldırı yüzeyidir; çünkü npm install komutunu yazan herkes, farkında olmadan saldırganın koduna kendi yetkileriyle çalışma izni verir.

"scripts": {
  "postinstall": "node ./harmless-looking-setup.js"
}

İçeride görünüşte zararsız bu dosya, arka planda ~/.aws/credentials dosyasını uzak bir sunucuya gönderebilir.

Neden bu kadar tehlikeli?

  • Ölçek: Tek bir zehirli bağımlılık, binlerce pipeline ve geliştirici makinesinde aynı anda çalışır.
  • Güven: Kimse her bağımlılığın kaynak kodunu okumaz; sistem tamamen güvene dayalıdır.
  • Geçişli bağımlılıklar: Sizin doğrudan eklediğiniz paket temiz olabilir, ama onun bağımlılığının bağımlılığı zehirli olabilir. Çoğu geliştirici bu derinliği hiç görmez.
  • Ayrıcalıklı bağlam: CI ortamları genellikle yayın (publish) token'ları, bulut anahtarları ve imzalama sertifikalarına erişebilir. Zehir tam da en değerli sırların yanında çalışır.

Geliştiriciler için savunma listesi

Tek bir önlem yeterli değildir; savunma katmanlı olmalıdır.

1. Lockfile kullanın ve sürümleri sabitleyin

package-lock.json, yarn.lock veya poetry.lock her bağımlılığın tam sürümünü ve integrity hash'ini kaydeder. Lockfile'ı her zaman versiyon kontrolüne ekleyin ve CI'da npm ci (yalnızca lockfile'a güvenen kurulum) kullanın. Yeni bir projeye başlarken sağlam bir package.json Oluşturucu ile temiz, sürümleri açıkça belirlenmiş bir temel oluşturmak iyi bir başlangıçtır.

2. Integrity / checksum doğrulayın

Bir paketi veya release dosyasını manuel indirdiğinizde, yayıncının duyurduğu SHA-256 değeriyle karşılaştırın. Bir dosyanın hash'ini hızlıca üretmek için SHA-256 Oluşturucu aracını, iki değeri yan yana doğrulamak içinse Hash Karşılaştır aracını kullanabilirsiniz. Tek bir karakter farkı bile dosyanın değiştirildiğini gösterir.

3. CI token'larına en az ayrıcalık verin

CI iş akışlarınız sadece ihtiyaç duydukları izinlere sahip olmalı. Salt-okunur token'lar, kısa ömürlü kimlik bilgileri ve dar kapsamlı yetkiler, ele geçirilmiş bir bağımlılığın verebileceği zararı sınırlar. Sırları asla repoya commit'lemeyin; sağlam bir .gitignore Oluşturucu ile .env, kimlik dosyaları ve build çıktıların yanlışlıkla sürüm kontrolüne girmesini engelleyin.

4. Post-install scriptlerini gözden geçirin

npm install --ignore-scripts ile scriptleri devre dışı bırakabilir; yeni bir bağımlılık eklemeden önce o paketin scripts bölümünü gerçekten okuyabilirsiniz. Şüpheli bir postinstall görürseniz, paketi eklemeden önce iki kez düşünün.

5. SBOM (Yazılım Malzeme Listesi) üretin

Bir SBOM, projenizdeki tüm bileşenlerin ve sürümlerinin envanteridir. CycloneDX veya SPDX formatında bir SBOM, yeni bir güvenlik açığı duyurulduğunda "bu paket bizde var mı?" sorusunu saniyeler içinde yanıtlamanızı sağlar.

6. Registry hesaplarında 2FA açın

npm ve PyPI bakımcı hesaplarında iki faktörlü kimlik doğrulamayı zorunlu kılın. Bakımcı hesaplarının ele geçirilmesi en yıkıcı vektör olduğundan, 2FA tek başına saldırıların büyük kısmını engeller.

Özet

Tedarik zinciri güvenliği bir kerelik bir görev değil, sürekli bir disiplindir. Bağımlılıklarınızı sabitleyin, integrity'lerini doğrulayın, CI'nızı en az ayrıcalıkla çalıştırın, scriptleri okuyun ve hesaplarınızı 2FA ile koruyun. Bu adımların her biri tek başına küçük; birlikte ise saldırganın işini ciddi şekilde zorlaştırır.

Daha fazla araç için Güvenlik araçlarına göz atabilirsiniz.

Not: Tüm MagmaNex araçları tamamen tarayıcınızda çalışır. Dosyalarınız ve hash'leriniz hiçbir sunucuya yüklenmez, hiçbir yere gönderilmez.


🛠 İlgili Araçlar

📚 İlgili Yazılar

← Tüm Yazılar🛠 Araçları Keşfet