NPM Bağımlılıkları Nasıl Güvenli Hale Getirilir? API Geliştiricileri için Eksiksiz Tedarik Zinciri Güvenliği Rehberi

Ashley Innocent

Ashley Innocent

1 April 2026

NPM Bağımlılıkları Nasıl Güvenli Hale Getirilir? API Geliştiricileri için Eksiksiz Tedarik Zinciri Güvenliği Rehberi

Kurumsal Apidog

Şirket İçi Dağıtım

SSO & RBAC

SOC 2 Uyumlu

Apidog Enterprise'ı Keşfet

Özet

NPM tedarik zinciri saldırıları, yalnızca 2024 yılında 3.000'den fazla kötü amaçlı pakete yükseldi ve Mart 2026'daki Axios ihlali, ilk 10 paketin bile güvende olmadığını kanıtladı. Bu kılavuz, API geliştiricilerinin ihtiyaç duyduğu her savunma katmanını kapsar: lockfile zorlaması, postinstall betik engelleme, menşe doğrulama, davranışsal analiz araçları ve saldırı yüzeyinizi daraltan mimari seçimleri.

Giriş

31 Mart 2026'daki Axios tedarik zinciri saldırısı ilk npm ihlali değildi. Son da olmayacak. Ancak 83 milyon haftalık indirme ve tek bir ele geçirilmiş bakımcı hesabı aracılığıyla dağıtılan çapraz platformlu bir RAT (Uzaktan Erişim Truva Atı) ile JavaScript ekosisteminin aldığı en yüksek sesli uyandırma çağrısı oldu.

Bu durumu alışılagelmiş “bağımlılıklarınızı güncelleyin” tavsiyesinden farklı kılan şey şu: Axios saldırısı her geleneksel savunmayı aştı. Kötü amaçlı kod Axios'un kendisinde değildi. Bir postinstall kancasını tetikleyen hayalet bir bağımlılık aracılığıyla enjekte edildi. Saldırı penceresi sırasında npm install çalıştırdıysanız lockfile'lar yardımcı olmadı. Henüz sabitleme yapmadıysanız sürüm sabitleme de yardımcı olmadı.

API geliştiricileri özellikle savunmasızdır. Test betikleriniz, CI/CD işlem hatlarınız, sahte sunucularınız ve HTTP istemcilerinizin tümü npm'den çekilir. Araç zincirinizdeki tek bir tehlikeye atılmış paket, geliştirme makinenizden API anahtarlarını, veritabanı kimlik bilgilerini ve bulut jetonlarını sızdırabilir.

💡
Apidog, API testi için yerleşik bir HTTP istemcisi sağlayarak büyük bir saldırı vektörünü ortadan kaldırır, böylece test yığınınızda Axios, node-fetch veya got'a ihtiyacınız kalmaz. Aşağıdaki savunma stratejilerini uygularken npm bağımlılık yüzeyinizi azaltmak için Apidog'u ücretsiz indirin.

button

Bu kılavuz, temel lockfile hijyeninden gelişmiş davranışsal analize kadar yedi koruma katmanını kapsar.

Katman 1: Lockfile Zorlaması

Lockfile'lar Neden Önemlidir?

Bir lockfile, kurulum anındaki her paketin ve geçişli bağımlılığın tam sürümünü kaydeder. Bir lockfile olmadan, npm install semver aralığınıza uyan en son sürümü çözer. Eğer package.json dosyanızda "axios": "^1.14.0" yazıyorsa ve depoda kötü amaçlı bir 1.14.1 sürümü varsa, kötü amaçlı sürümü alırsınız.

Kurallar

Lockfile'ınızı her zaman commit'leyin. package-lock.json (npm), yarn.lock (Yarn), pnpm-lock.yaml (pnpm) veya bun.lock (Bun) olsun, sürüm kontrolünde olmalıdır.

CI/CD'de "dondurulmuş kurulumlar" kullanın. Otomatik ortamlarda asla npm install çalıştırmayın. Dondurulmuş lockfile eşdeğerini kullanın:

# npm
npm ci

# yarn
yarn install --frozen-lockfile

# pnpm
pnpm install --frozen-lockfile

# bun
bun install --frozen-lockfile

npm ci, node_modules'i siler ve kesinlikle lockfile'dan kurulum yapar. Lockfile package.json ile eşleşmezse, başarısız olur. Bu, çözümleme sürprizlerini önler.

Pull request'lerde lockfile farklarını inceleyin. Bir PR package-lock.json dosyasını değiştirdiğinde, neyin değiştiğini kontrol edin. Yeni bağımlılıklar, sürüm yükseltmeleri ve kayıt defteri URL değişiklikleri hepsi dikkatli incelemeyi hak eder. Socket.dev gibi otomatik araçlar, PR incelemelerinde şüpheli lockfile değişikliklerini işaretleyebilir.

Lockfile Boşluğu

Lockfile'lar beklenmeyen sürüm çözümlemelerine karşı koruma sağlar, ancak ilk kuruluma karşı koruma sağlamazlar. Bir saldırı penceresi sırasında bir proje başlatır veya yeni bir bağımlılık eklerseniz, kötü amaçlı sürüm kilitlenir. Bu nedenle lockfile'lar Katman 1'dir, tek katman değildir.

Katman 2: Postinstall Betiklerini Devre Dışı Bırakın

Birincil Saldırı Vektörü

Axios saldırısı, ua-parser-js saldırısı, event-stream saldırısı ve düzinelerce diğer saldırıların tümü aynı mekanizmayı kullandı: npm install sırasında rastgele kod çalıştıran bir postinstall betiği. Bu kanca, uygulama kodunuz çalışmadan, paketi incelemeden ve herhangi bir çalışma zamanı güvenlik aracı müdahale edemeden önce yürütülür.

Betikleri Küresel Olarak Engelleyin

.npmrc dosyanıza ekleyin:

ignore-scripts=true

Veya CLI aracılığıyla ayarlayın:

npm config set ignore-scripts true

Bu, paket kurulumu sırasında tüm yaşam döngüsü betiklerinin (preinstall, install, postinstall, prepare) çalışmasını engeller.

Betiklere İhtiyaç Duyan Paketleri Yönetin

Bazı paketler, yerel derleme için postinstall betikleri gerektirir (örneğin bcrypt, sharp veya sqlite3). İki seçeneğiniz var:

Seçenek 1: Kurulumdan Sonra Betikleri Seçici Olarak Çalıştırın

npm ci --ignore-scripts
npm rebuild bcrypt sharp

Seçenek 2: İzin Listesi Kullanın (npm 10+)

Yalnızca güvenilir paketlerin betikleri çalıştırmasına izin veren bir .scriptsrc.json oluşturun:

{
  "allowScripts": {
    "bcrypt": true,
    "sharp": true
  }
}

Seçenek 3: Önceden Oluşturulmuş İkilileri Kullanın

Daha önce yerel derlemeye ihtiyaç duyan birçok paket artık önceden oluşturulmuş ikili dosyalar sunuyor. Örneğin sharp, çoğu platform için önceden oluşturulmuş ikili dosyalar sağlar ve postinstall derlemesi ihtiyacını ortadan kaldırır. Bağımlılıklarınızı kontrol edin; düşündüğünüzden daha az betik istisnasına ihtiyacınız olabilir.

PackageGate Uyarısı

Ocak 2026'da araştırmacılar, npm, pnpm, vlt ve Bun'ı etkileyen “PackageGate” adlı altı sıfır gün güvenlik açığını açıkladı. Bir bulguya göre: Git tabanlı bağımlılıklar, yaşam döngüsü betikleri devre dışı bırakılmış olsa bile kod yürütmeyi sağlayan yapılandırma dosyaları taşıyabilir. Eğer package.json dosyanız bağımlılıklar için Git URL'lerini referans alıyorsa, tek başına ignore-scripts yeterli değildir. Bu bağımlılıkları belirli commit hash'lerine sabitleyin ve depo içeriklerini denetleyin.

Katman 3: Tam Sürümleri Sabitleyin

Semver Aralıklarını Kullanmayı Bırakın

npm install --save komutunun varsayılan davranışı, paketleri bir şapka işareti (`^`) ön ekiyle ekler:

{
  "axios": "^1.14.0"
}

^ işareti “1.14.0 ile uyumlu” anlamına gelir, bu da en son 1.x.x sürümüne çözümlenir. Axios saldırısı sırasında bu, 1.14.1 sürümüne çözümlenmek anlamına geliyordu.

Bunun yerine tam sürümleri sabitleyin:

{
  "axios": "1.14.0"
}

npm'i varsayılan olarak tam sürümleri kaydetmek üzere yapılandırın:

# .npmrc
save-exact=true
save-prefix=''

Geçişli Bağımlılıklar İçin Geçersiz Kılmaları Kullanın

Doğrudan bağımlılıklarınızın kendi bağımlılıkları vardır. Eğer geçişli bir bağımlılık tehlikeye atılırsa, doğrudan bağımlılığınızı sabitlemek yardımcı olmaz. Geçişli çözümlemeyi kontrol etmek için geçersiz kılmaları (overrides) kullanın:

{
  "overrides": {
    "axios": "1.14.0",
    "plain-crypto-js": "npm:empty-npm-package@1.0.0"
  }
}

Yarn için:

{
  "resolutions": {
    "axios": "1.14.0"
  }
}

pnpm için:

{
  "pnpm": {
    "overrides": {
      "axios": "1.14.0"
    }
  }
}

Avantaj/Dezavantaj

Tam sabitleme, otomatik yama güncellemelerini almayacağınız anlamına gelir. Sürümleri manuel olarak yükseltmeniz gerekecek, bu da bakım yükü oluşturur. Bu ödünleşme bilinçlidir: otomatik güncellemeler yerine kontrollü güncellemeleri seçiyorsunuz. Güvenlik açısından hassas projeler için bu ödünleşme değerlidir.

Katman 4: Paket Menşesini Doğrulayın

Menşe Ne Anlama Gelir?

npm menşe tasdiki, yayımlanmış bir paketi, herkese açık bir şeffaflık defterine kaydedilmiş Sigstore imzalarını kullanarak kaynak kodu ve derleme ortamına bağlar. Menşe etkinleştirilmiş bir CI/CD hattından bir paket yayımlandığında, paket aşağıdakilerin kriptografik kanıtlarını içerir:

Menşe Nasıl Kontrol Edilir?

npm audit signatures

Bu, yüklü paketlerin geçerli menşe tasdiklerine sahip olduğunu doğrular. Bir geliştiricinin makinesinden manuel olarak yayımlanan paketlerin menşesi olmayacaktır.

Kötü amaçlı Axios sürümlerinde OIDC menşe bağlaması yoktu ve karşılık gelen GitHub commit'leri bulunmuyordu. Eğer otomatik menşe kontrolü standart bir uygulama olsaydı, saldırı hemen uyarı işaretleri verirdi.

Kendi Paketleriniz İçin Menşeyi Etkinleştirin

npm paketleri yayımlıyorsanız, CI/CD'nizde menşeyi etkinleştirin:

# GitHub Actions örneği
- uses: actions/setup-node@v4
  with:
    node-version: 20
    registry-url: https://registry.npmjs.org
- run: npm publish --provenance
  env:
    NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

.npmrc dosyanıza ekleyin:

provenance=true

Sınırlamalar

Menşe isteğe bağlıdır (opt-in). Çoğu npm paketinde henüz bu özellik yoktur. Ve menşe yalnızca bir paketin nerede derlendiğini kanıtlar. Kaynak kodunun güvenli olduğunu kanıtlamaz. Tehlikeye atılmış bir CI/CD hattı, geçerli menşe ile kötü amaçlı bir paket yayımlayabilir.

Katman 5: Davranışsal Analiz Araçlarını Kullanın

Güvenlik Açığı Taramasının Ötesi

npm audit ve Snyk gibi geleneksel araçlar, bilinen güvenlik açıklarının (CVE'ler) veritabanlarına karşı kontrol yapar. Rapor edilen sorunları yakalarlar ancak sıfır gün saldırılarını kaçırırlar. Axios ihlali yayımlandığında hiçbir CVE veritabanında değildi.

Davranışsal analiz araçları, paketlerin ne yaptığını inceler, onlar hakkında ne rapor edildiğini değil.

Socket.dev

Socket, kurulum ve çalışma zamanı boyunca paket davranışını analiz eder. Aşağıdakileri işaretler:

Socket.dev tarama sonuçları

GitHub ile entegre edildiğinde, Socket yeni bağımlılıklar şüpheli davranışlar sergilediğinde PR'lara yorum yapar. Axios saldırısının plain-crypto-js bağımlılığı birden fazla Socket uyarısı tetiklerdi: karmaşık kod, postinstall sırasında ağ istekleri ve paket dizini dışına dosya sistemi yazma işlemleri.

# Socket CLI'yi kur
npm install -g @socketsecurity/cli

# Projenizi tarayın
socket scan

Snyk

Snyk, risk puanları, sömürü olgunluk verileri ve düzeltme rehberliği ile güvenlik açığı yönetimi sağlar. Bilinen güvenlik açıkları için daha güçlüdür ancak sıfır gün davranışsal tespiti için daha zayıftır.

# Snyk CLI'yi kur
npm install -g snyk

# Projenizi test edin
snyk test
Snyk tarama sonuçları

Katmanlı Yaklaşım

Her ikisini de kullanın. Socket, Snyk'in kaçırdığı davranışsal anormallikleri yakalar. Snyk, Socket'in sağladığından daha zengin bir bağlamla bilinen güvenlik açıklarını yakalar. npm audit'i temel olarak ekleyin:

# Temel
npm audit

# Davranışsal analiz
socket scan

# Güvenlik açığı yönetimi
snyk test

Her üçünü de CI/CD'de bir geçit olarak çalıştırın. Herhangi bir kritik bulgu derlemeyi engellemelidir.

Katman 6: Bağımlılık Yüzeyinizi Azaltın

Daha Derin Soru

node_modules'ünüzdeki her paket bir güven kararıdır. Axios saldırısı, haftalık 83 milyon indirmeye sahip bir paketi tehlikeye attı. Ortalama bir Node.js projesi yüzlerce geçişli bağımlılığa sahiptir. Her biri potansiyel bir saldırı vektörüdür.

En etkili savunma, savunulacak daha az bağımlılığa sahip olmaktır.

Bağımlılık Ağacınızı Denetleyin

# Toplam bağımlılık sayınızı sayın
npm ls --all | wc -l

# Tekrarları kontrol edin
npm ls --all | sort | uniq -c | sort -rn | head -20

Her bağımlılık için şu soruları sorun:

Yaygın Paketler İçin Yerel Alternatifler

Paket Yerel alternatif Şu tarihten itibaren mevcut
axios, node-fetch, got fetch (küresel) Node.js 18
uuid crypto.randomUUID() Node.js 19
dotenv --env-file bayrağı Node.js 20.6
chalk util.styleText() Node.js 21.7
glob fs.glob() Node.js 22
path-to-regexp Yerel URL pattern API Node.js 23

Özellikle API Testi İçin

API test iş akışları genellikle HTTP istemci kütüphanelerine, onay kütüphanelerine, test çalıştırıcılarına ve sahte sunuculara bağımlıdır. Her bağımlılık bir saldırı yüzeyidir.

Apidog, API testi için tek bir platform olarak

Apidog, tüm yığını tek bir platformla değiştirir:

API test iş akışınızı Apidog'a taşımak, test altyapınızdaki düzinelerce npm bağımlılığını ortadan kaldırır. Daha az bağımlılık, daha az güven kararı ve daha az saldırı vektörü anlamına gelir.

API test yığınızı birleştirmek için Apidog'u ücretsiz deneyin.

button

Katman 7: Ağ ve Çalışma Zamanı İzleme

Bilinen Kötü Amaçlı Alan Adlarını Engelleyin

Herhangi bir tedarik zinciri saldırısından sonra, komuta ve kontrol altyapısını ağ düzeyinde engelleyin:

# /etc/hosts'a ekle
echo "0.0.0.0 sfrclak.com" | sudo tee -a /etc/hosts

CI/CD ortamları için, dışarıya doğru ağ erişimini bilinen iyi alan adlarıyla kısıtlayın. Çoğu derleme süreci yalnızca npm kayıt defterine, git barındırıcınıza ve dağıtım hedeflerinize erişime ihtiyaç duyar. Diğer her şey varsayılan olarak engellenmelidir.

CI/CD İçin StepSecurity Harden-Runner Kullanın

StepSecurity'nin Harden-Runner'ı GitHub Actions iş akışlarını gerçek zamanlı olarak izler. npm install başladıktan sonra 1.1 saniye içinde Axios dropper'ın C2 ile iletişim kurduğunu tespit etti. Araç şunları sağlar:

# GitHub Actions
- uses: step-security/harden-runner@v2
  with:
    egress-policy: audit  # veya katı mod için 'block'

Çalışma Zamanı Süreç İzleme

Geliştirme makineleri için, Node.js tarafından başlatılan şüpheli alt süreçleri işaretleyen uç nokta tespit ve yanıt (EDR) araçlarını düşünün. Axios RAT, npm kurulum süreci içinden osascript (macOS), cscript (Windows) ve python3 (Linux) başlattı. Bu alt süreç kalıpları tespit edilebilir.

Önerilen .npmrc Yapılandırması

Yukarıdaki katmanları birleştiren güvenlik açısından güçlendirilmiş bir .npmrc dosyası aşağıdadır:

# Tam sürümleri sabitle
save-exact=true
save-prefix=

# Yaşam döngüsü betiklerini devre dışı bırak
ignore-scripts=true

# Yayımlama için menşeyi etkinleştir
provenance=true

# Resmi kayıt defterini kullan
registry=https://registry.npmjs.org/

# Yayımlama için 2FA gerektir
auth-type=web

# Denetim düzeyi eşiği
audit-level=moderate

Bu dosyayı deponuza commit'leyin, böylece her ekip üyesi aynı güvenlik ayarlarını kullanır.

CI/CD Güvenlik Hattı Örneği

Yedi katmanın tümünü uygulayan bir GitHub Actions iş akışı aşağıdadır:

name: Secure Build
on: [push, pull_request]

jobs:
  security-check:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - uses: step-security/harden-runner@v2
        with:
          egress-policy: audit

      - uses: actions/setup-node@v4
        with:
          node-version: 22

      # Katman 1+2: Dondurulmuş lockfile, betik yok
      - run: npm ci --ignore-scripts

      # Katman 3: Beklenmeyen sürüm olmadığını doğrula
      - run: npm ls --all > deps.txt

      # Katman 4: Menşeyi kontrol et
      - run: npm audit signatures

      # Katman 5: Davranışsal analiz
      - run: npx socket scan

      # Katman 5: Güvenlik açığı taraması
      - run: npx snyk test

      # Katman 1: Temel denetim
      - run: npm audit --audit-level=moderate

      # Yalnızca izin verilen yerel bağımlılıkları yeniden derle
      - run: npm rebuild sharp bcrypt

npm Güvenliği İçin Sırada Ne Var?

Popüler Paketler İçin Zorunlu Menşe

npm, belirli bir indirme eşiğinin üzerindeki paketler için menşe tasdiki zorunluluğunu tartışıyor. Bu, Axios saldırısını mümkün kılan manuel jeton tabanlı yayımlamayı önleyecektir.

İki Kişilik Sürüm Onayı

Çift yetkilendirme gerektiren finansal işlemler gibi, yüksek indirmeli paketler de sürümleri onaylamak için ikinci bir bakımcıya ihtiyaç duyabilir. Tek bir ele geçirilmiş hesap yeterli olmayacaktır.

Çalışma Zamanı İzin Kapsamlandırma

Deno, betiklerin neye erişebileceğini (ağ, dosya sistemi, ortam değişkenleri) açıkça izin verilmedikçe zaten kısıtlar. Node.js benzer izin modellerini araştırıyor. Bu özellik çıktığında, postinstall betiklerinin ağ istekleri yapmak veya dosya sistemine erişmek için açık izne ihtiyacı olacaktır.

Paket Yöneticisi Yakınsaması

pnpm'in katı izolasyon modeli (paketler yalnızca beyan ettikleri bağımlılıklara erişebilir), birçok bağımlılık karışıklığı saldırısını önler. npm benzer katılığı benimsedikçe, saldırı yüzeyi daralır.

Sıkça Sorulan Sorular

npm'de tedarik zinciri saldırısı nedir?

npm'deki bir tedarik zinciri saldırısı, doğrudan uygulamanızı değil, yazılım bağımlılık zincirini hedefler. Saldırganlar paket bakımcı hesaplarını ele geçirir, popüler paketlere kötü amaçlı kod enjekte eder veya benzer adlara sahip typosquat paketleri yayımlar. Bağımlılıkları yüklediğinizde veya güncellediğinizde, kötü amaçlı kod makinenizde veya CI/CD hattınızda yürütülür, kimlik bilgilerini çalar, arka kapılar kurar veya verileri dışarı sızdırır.

npm audit tedarik zinciri saldırılarına karşı korunmak için yeterli mi?

Hayır. npm audit, bilinen güvenlik açıkları (CVE'ler) veritabanına karşı kontrol yapar. Axios ihlali gibi sıfır gün saldırıları, gerçekleştikleri anda hiçbir CVE veritabanında yer almaz. Paketlerin ne yaptığını inceleyen, onlar hakkında ne rapor edildiğini değil, Socket.dev gibi davranışsal analiz araçlarına ihtiyacınız var. npm audit'i tek savunmanız olarak değil, bir temel olarak kullanın.

npm'i tamamen kullanmayı bırakmalı mıyım?

Hayır. npm en büyük paket ekosistemi olmaya devam etmektedir ve çoğu paket güvenlidir. Amaç, tam sürüm sabitleme, lockfile zorlaması, betik engelleme ve bağımlılık minimizasyonu yoluyla maruziyetinizi azaltmaktır. Her bağımlılığın gerekli olup olmadığını göz önünde bulundurun ve mümkün olduğunda yerel alternatifleri kullanın.

Apidog, npm tedarik zinciri riskini azaltmaya nasıl yardımcı olur?

Apidog, API geliştirme için yerleşik bir HTTP istemcisi, test çalıştırıcısı, sahte sunucu ve dokümantasyon oluşturucu sağlar. Bu, Axios, node-fetch, Jest, Express (sahte sunucular için) ve diğer test bağımlılıkları gibi npm paketlerine olan ihtiyacı ortadan kaldırır. Daha az npm bağımlılığı, API geliştirme iş akışınızda daha az saldırı vektörü anlamına gelir.

npm'de paket menşesi nedir?

Paket menşesi, yayımlanmış bir paketi kaynak deposuna ve CI/CD derleme ortamına kriptografik olarak bağlamak için Sigstore'u kullanır. Bir paketin nerede ve nasıl oluşturulduğunu kanıtlar. npm audit signatures ile menşeyi doğrulayabilirsiniz. Geliştirici makinelerinden manuel olarak yayımlanan paketlerin menşesi yoktur, bu da yüksek indirmeli paketler için bir kırmızı bayraktır.

Kaç npm paketi kötü amaçlı?

Snyk, 2024'te 3.000'den fazla kötü amaçlı npm paketi tespit etti. 2025'in 4. çeyreğine kadar, Sonatype tek bir çeyrekte npm, PyPI ve diğer kayıt defterlerinde 120.612 kötü amaçlı yazılım saldırısını engelledi. Bu sayı artıyor. Çoğu kötü amaçlı paket düşük indirmeli typosquat'lardır, ancak Axios gibi yüksek profilli ihlaller, popüler paketlerin de bağışık olmadığını kanıtlar.

PackageGate güvenlik açığı nedir?

PackageGate, Ocak 2026'da açıklanan ve npm, pnpm, vlt ve Bun'ı etkileyen altı sıfır gün güvenlik açığı setidir. Bir bulgu, Git tabanlı bağımlılıkların, yaşam döngüsü betikleri devre dışı bırakılmış olsa bile kod yürütmeyi sağlayan yapılandırma dosyaları taşıyabileceğini gösteriyor. Bu, bağımlılıklarınız Git depolarına referans veriyorsa tek başına ignore-scripts'in yeterli olmadığı anlamına gelir. Git bağımlılıklarını belirli commit hash'lerine sabitleyin.

Temel Çıkarımlar

Her bağımlılık bir güven kararıdır. Ne kadar az bağımlılığınız olursa, saldırı yüzeyiniz o kadar küçülür. Ne kadar çok doğrulama katmanı uygularsanız, bir saldırganın aradan sıyrılması o kadar zorlaşır. Savunmalarınızı yalıtılmış değil, derinlemesine inşa edin.

button

API Tasarım-Öncelikli Yaklaşımı Apidog'da Uygulayın

API'leri oluşturmanın ve kullanmanın daha kolay yolunu keşfedin