Değişikliklerin Önemi
NPM versiyon 12’de, yazılım tedarik zinciri tehditlerine karşı koymak amacıyla varsayılan olarak yükleme scriptlerinin devre dışı bırakılacağı “kırıcı değişiklikler” açıklandı. Bu değişiklikler, “npm install” komutunun kötü niyetli kodun çalıştırılmasını tetikleme şeklindeki istismarlarını engellemeyi hedefliyor.
Saldırı Nasıl Çalışıyor?
“Npm install” komutu, bir Node.js projesi için gerekli tüm bağımlılıkların indirilip yüklenmesini sağlar. GitHub, yükleme zamanı lifecycle scriptlerini NPM ekosistemindeki en büyük kod yürütme yüzeyi olarak tanımlıyor. Bu komut, her transitive bağımlılıktan scriptlerin çalıştırılmasına neden olabiliyor; bu da bağımlılık ağacındaki tek bir tehlikeli paketin geliştirici makinesinde veya CI koşucusunda rastgele kod çalıştırmasına olanak tanıyor.
Etkilenen Sistemler
Bu değişiklikler, tüm geliştirici araçlarına ve NPM kullanan projelere etki edebilir. Özellikle:
- npm install artık bağımlılıklardan preinstall, install veya postinstall scriptlerini çalıştırmayacak, yalnızca projede açıkça izin verilmiştir.
- npm install, açıkça belirtilmedikçe Git bağımlılıklarını (doğrudan veya transitive) çözmeyecek.
- npm install, açıkça izin verilmedikçe remote URL’lerden (örneğin, https tarball’ları) bağımlılıkları çözmeyecek.
GitHub, varsayılan olarak –allow-git ayarını “none” olarak belirleyerek, daha önce de bahsedilen kötü niyetli kod yürütme yollarını kapatarak sistem güvenliğini artırmayı hedefliyor.
Çözüm ve Korunma
Geliştiricilerin bu değişikliklere hazırlık yapmaları için NPM’in 11.16.0 veya daha yeni bir versiyonuna geçiş yapmaları öneriliyor. Yapılması gerekenler:
- Güncel sürümü yükleyin ve normal yükleme işlemini gerçekleştirin.
- Açıklanan uyarıları gözden geçirin.
- npm approve-scripts –allow-scripts-pending komutunu kullanarak script içeren paketleri görüntüleyin.
- Güvendiğiniz paketleri onaylayarak güncellenmiş package.json dosyasını kaydedin. Onaylamadığınız her şey güncelleme sonrası durdurulacaktır.
Ayrıca, bu yılın başlarında npm, yeni yayınlanan kötü niyetli paketlere karşı koruma sağlamak amacıyla min-release-age ayarını tanıttı; bu ayar, belirli bir günden daha az bir süre içinde yayınlanan paket versiyonlarını reddedecektir.
Sonuç
Geliştiriciler, npm 12 sürümüne geçiş yapmadan önce gerekli güncellemeleri yapmalı ve yükleme scriptlerini dikkatle incelemelidir. Ayrıca, güvenlik risklerini azaltmak için yalnızca güvendikleri paketlerin scriptlerini onaylamalıdırlar. Beklenmedik kötü niyetli yazılım saldırılarına karşı proaktif bir yaklaşım sergilemek hayati önem taşımaktadır.


