Yazılım tedarik zinciri saldırılarını önlemek amacıyla, npm paket yöneticisinin 12. sürümünde varsayılan olarak kurulum betiklerinin (install scripts) devre dışı bırakılması planlanıyor. Bu değişiklik, Node.js projelerinde kullanılan “npm install” komutunun kötü amaçlı kod çalıştırmak için kötüye kullanılmasını engellemeyi hedefliyor.
Saldırı Zincirinde npm Install Komutunun Rolü
“npm install” komutu, projeye ait tüm bağımlılıkların indirilip kurulmasını sağlar. Ancak bu süreçte, bağımlılıkların kurulum aşamasında çalışan betikler (preinstall, install, postinstall) kötü niyetli kodların çalıştırılması için bir zafiyet yüzeyi oluşturuyor. Özellikle bağımlılık ağında yer alan herhangi bir paket ele geçirildiğinde, bu betikler aracılığıyla geliştirici makineleri veya sürekli entegrasyon (CI) ortamları hedef alınabiliyor.
Bu kapsamda, npm 12 sürümü ile birlikte kurulum betiklerinin otomatik çalıştırılması varsayılan olarak engellenecek. Kullanıcıların, betiklerin çalıştırılmasına açıkça izin vermesi gerekecek. Böylece, güvenilmeyen paketlerin otomatik kod çalıştırması engellenmiş olacak.
Yeni Güvenlik Politikaları ve Kısıtlamalar
- Kurulum sırasında bağımlılıkların preinstall, install ve postinstall betikleri yalnızca proje içinde açıkça izin verilmişse çalıştırılacak.
- Git tabanlı bağımlılıklar, doğrudan veya dolaylı olsun, ancak –allow-git parametresi ile izin verilirse çözümlenecek.
- Uzaktan URL’lerden (örneğin HTTPS tarball) bağımlılıkların indirilmesi, –allow-remote parametresiyle açıkça izin verilmediği sürece engellenecek.
Bu değişiklikler, özellikle node-gyp gibi yerel derleme araçlarının otomatik çalışmasını da etkiliyor. Örneğin, binding.gyp dosyası olan paketlerde açık bir kurulum betiği olmasa bile, npm otomatik olarak node-gyp derlemesini çalıştırdığı için bu süreç engellenecek. Ayrıca, git, dosya ve link bağımlılıklarının prepare betikleri de benzer şekilde engelleniyor.
Geliştiriciler İçin Hazırlık ve Tavsiyeler
Geliştiricilere, npm 11.16.0 veya daha yeni sürümlere geçiş yaparak yeni kurulum davranışlarına hazırlanmaları öneriliyor. Normal kurulum işlemi sırasında verilen uyarılar dikkatle incelenmeli ve npm approve-scripts --allow-scripts-pending komutu ile betik içeren paketler tespit edilip güvenilenler onaylanmalı. Onaylanan betikler, yükseltme sonrası çalışmaya devam edecek; onaylanmayanlar ise engellenecek.
Geçtiğimiz aylarda npm, yeni yayımlanan paketlerin belirli bir süre geçmeden kurulmasını engelleyen “min-release-age” ayarını da devreye alarak, tedarik zinciri saldırılarına karşı ek bir koruma katmanı oluşturmuştu.
Sistem Yöneticileri ve Güvenlik Ekipleri İçin Öneriler
- npm kurulumlarında betik çalıştırma izinlerini düzenli olarak gözden geçirin ve sadece güvenilen paketlere izin verin.
- CI/CD ortamlarında otomatik betik çalıştırma özelliklerini sınırlandırarak saldırı yüzeyini azaltın.
- EDR ve SIEM çözümlerinizde npm install süreçlerini ve betik çalıştırma aktivitelerini izleyin.
- Güvenlik politikalarınızda tedarik zinciri güvenliği kapsamında npm ve benzeri paket yöneticilerinin konfigürasyonlarını dahil edin.
- Geliştiricilere e-posta güvenliği ve ağ segmentasyonu gibi temel siber hijyen uygulamalarını benimsetin.
Teknik Özet
- Kullanılan araçlar: npm 12, node-gyp, git bağımlılıkları
- Hedef ortamlar: Node.js projeleri, CI/CD pipeline’ları
- Saldırı vektörü: Otomatik betik çalıştırma yoluyla zararlı kod yürütme
- Önerilen savunma: Betik çalıştırma izninin opt-in hale getirilmesi, paket onaylama mekanizması, min-release-age konfigürasyonu
