npm 12 ile supply chain saldırılarına karşı yeni güvenlik önlemi geliyor
arkadaşlar, npm’den güzel bir haber var. npm 12 ile birlikte paket yöneticisi, bağımlılıklardan gelen scriptleri otomatik çalıştırmayı durduracak. yani artık npm install dediğinizde her paket istediği gibi script çalıştıramayacak. bu supply chain saldırıları için ciddi bir önlem.
olay ne?
şöyle ki, şu an npm install dediğinizde, paketler preinstall, postinstall gibi scriptler çalıştırabiliyor. kötü niyetli birisi paketine zararlı bir script koyarsa, siz hiç farkında olmadan o script çalışıyor. klasik supply chain attack yöntemi işte.
npm 12 ile birlikte bu davranış değişiyor:
- varsayılan olarak bağımlılıkların scriptleri çalışmayacak
- sadece açıkça izin verdiğiniz paketlerin scriptleri çalışacak
- kendi projenizin scriptleri normal çalışmaya devam edecek
neden önemli bu?
son yıllarda supply chain saldırıları çok arttı. saldırganlar popüler paketleri ele geçiriyor veya typosquatting yapıyor, içine zararlı script koyuyor. siz masum masum npm install diyorsunuz, arka planda:
- kripto madencisi çalışıyor
- environment variable’larınız çalınıyor (AWS key’leri falan)
- backdoor kuruluyor
- ransomware indiriliyor
spoiler: bu değişiklik geriye dönük uyumluluk sorunları yaratabilir, bazı paketler çalışmayabilir.
etkilenen sistemler
| Durum | Açıklama |
|---|---|
| ✅ npm 12 ve sonrası | Yeni güvenlik davranışı aktif |
| ⚠️ npm 11 ve öncesi | Eski davranış devam ediyor |
| 🔄 Mevcut projeler | Bazı bağımlılıklar izin gerektirebilir |
ne yapmalısınız?
npm 12 çıktığında
# npm'i güncelle
npm install -g npm@12
# projenizde test edin
cd /path/to/project
npm install
# eğer bazı paketler script çalıştırmak istiyorsa uyarı alacaksınız
# güvendiğiniz paketlere izin vermek için:
npm config set allow-scripts "paket-adi,baska-paket"
# veya .npmrc dosyasına ekleyin:
echo "allow-scripts=paket-adi,baska-paket" >> .npmrc
şimdiden hazırlık
# hangi paketlerin script çalıştırdığını görmek için:
npm ls --parseable | while read dir; do
if [ -f "$dir/package.json" ]; then
grep -l "preinstall\|postinstall\|install" "$dir/package.json" && echo "$dir"
fi
done
# projenizin bağımlılıklarını gözden geçirin
npm audit
# gereksiz bağımlılıkları temizleyin
npm prune
geçiş süreci nasıl olacak?
npm ekibi şöyle bir yol haritası çizmiş:
- npm 12 beta: yeni davranış opsiyonel olarak test edilebilecek
- npm 12 stable: varsayılan olarak aktif olacak ama kolay bypass var
- ileride: daha sıkı kontroller gelecek
edit: bu değişiklik breaking change sayılıyor, o yüzden major versiyon artışı var (12).
dikkat edilmesi gerekenler
ci/cd pipeline’larınızı kontrol edin:
- bazı paketler build sırasında native modül derliyor (node-gyp kullanan paketler)
- bu paketlere izin vermeniz gerekebilir
- yoksa build’ler patlayabilir
örnekler:
node-sass→ native modül derler, script gerekirpuppeteer→ chromium indirir, script gerekirelectron→ binary indirir, script gerekir
güvenlik açısından:
- sadece gerçekten güvendiğiniz paketlere izin verin
- npm registry’de verified publisher badge’i olanlara öncelik verin
- paket sayısını minimumda tutun
- düzenli
npm auditçalıştırın
# izin verdiğiniz paketleri listeleyin
npm config get allow-scripts
# belirli bir paketi kaldırın
npm config delete allow-scripts
alternatif yaklaşımlar
eğer daha paranoyaksanız:
pnpm kullanın:
# pnpm zaten daha güvenli bir izolasyon sağlıyor
npm install -g pnpm
pnpm install
yarn kullanın:
# yarn 2+ da benzer güvenlik özellikleri var
npm install -g yarn
yarn install
ignore-scripts kullanın (şimdiden):
# hiçbir script çalıştırma
npm install --ignore-scripts
# sonra sadece kendi scriptlerinizi çalıştırın
npm rebuild
topluluk tepkileri
npm topluluğu genel olarak bu değişikliği olumlu karşılıyor ama:
- ✅ güvenlik artıyor
- ✅ supply chain saldırıları zorlaşıyor
- ⚠️ bazı paketler çalışmayabilir
- ⚠️ developer experience biraz bozulabilir
- ❌ eski projelerde sorun çıkabilir
bkz: leftpad olayı, event-stream hack’i, ua-parser-js saldırısı
sonuç
agalar, bu npm 12 güncellemesi supply chain güvenliği için önemli bir adım. evet, biraz can sıkıcı olabilir, bazı paketlere manuel izin vermek gerekecek ama güvenlik için küçük bir bedel.
yapmanız gerekenler:
- npm 12 çıktığında hemen test edin
- hangi paketlerin script çalıştırdığını tespit edin
- sadece güvendiğiniz paketlere izin verin
- ci/cd pipeline’larınızı güncelleyin
- ekibinizi bilgilendirin
dikkat: npm 12 henüz çıkmadı, ama çıktığında hazırlıklı olun. beta versiyonları deneyebilirsiniz.
kaynaklar
- SecurityWeek - NPM 12 Supply Chain Attack Prevention
- npm Blog - Script Execution Changes
- npm Documentation - Scripts
Bu içerik yapay zeka tarafından oluşturulmuştur.
