Npm güvenlik açıkları manuel olarak nasıl düzeltilir?


95

Çalıştırdığımda npm installdiyor found 33 vulnerabilities (2 low, 31 moderate) run `npm audit fix` to fix them, or `npm audit` for details.

Ancak npm audit fixçıktılarup to date in 11s fixed 0 of 33 vulnerabilities in 24653 scanned packages 33 vulnerabilities required manual review and could not be updated

reviewBu, kullanıcı tarafından düzeltilmemesi gerektiği anlamına mı geliyor?

Çalıştırdığımda npm auditbana şuna benzer bir tablo listesi veriyor:

┌───────────────┬──────────────────────────────────────────────────────────────┐
│ Low           │ Prototype Pollution                                          │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package       │ lodash                                                       │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Patched in    │ >=4.17.5                                                     │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ browser-sync [dev]                                           │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path          │ browser-sync > easy-extender > lodash                        │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info     │ https://nodesecurity.io/advisories/577                       │
└───────────────┴──────────────────────────────────────────────────────────────┘

Bu örnekte, bağlantılı sayfanın iyileştirme bölümü diyor Update to version 4.17.5 or later.. Ancak, /node_modules/browser-sync/package.jsonsatırlar var:

"devDependencies": {
    "lodash-cli": "4.17.5",
}

ve artık bağımlılık yok. Yani zaten v4.17.5 olmalı. /node_modules/lodash/lodash.jsonHangisinin var VERSION = '4.17.10';çizgisi olduğunu da kontrol ettim . Şu /node_modules/lodash/package.jsonsatırlar var:

  "_from": "lodash@^4.17.4",
  "_id": "lodash@4.17.10",

Sürümün "_from" değil, "_id" de gösterildiğine inanıyorum, bu nedenle sürümler doğru ancak güvenlik açığı hala denetim listesinde görünüyor.

Hala node.js'de yeniyim ve bu mesajlar kafamı çok karıştırıyor. Manuel olarak düzeltmenin veya bu mesajlardan kurtulmanın bir yolu var mı, hiçbir şey yapamam?


Yanıtlar:


33

lodash-cliin projenizde devDependenciesnasıl browser-syncçalıştığını etkilemez , devDependenciesbağımlılık olarak bir paket yüklendiğinde göz ardı edilir.

Ne auditbelirtiyor o olmasıdır easy-extenderyani sahiptir lodashbağımlılık:

browser-sync > easy-extender > lodash        

Sorun , Lodash 4'te çözülürken, Lodash 3'e bağlıdır. Sorun çatallanma easy-extender, güncelleme ve NPM genel kayıt defterindeki paket yerine yükleme yoluyla çözülebilir . Ancak bu bağımlılıkla ilgili gerçek bir sorun yok.

auditraporun önemi manuel olarak değerlendirilmelidir. İç içe geçmiş bağımlılığın güvenlik riski olsa bile bu, bu riski ortaya çıkaran bir özelliğin kullanıldığı anlamına gelmez. Bu aynı zamanda, kullanılsa bile, nasıl kullanıldığından dolayı gerçek bir risk oluşturduğu anlamına gelmez.

browser-syncüretimde kullanılmayan bir geliştirme aracıdır, güvenlik açıklarından yararlanılabilecek pek çok senaryo yoktur. Ve Prototip Kirliliği hiç de bir güvenlik açığı değildir, sadece bir paketin iyi uygulamaları takip etmediğine dair bir uyarı, göz ardı edilebilir.

Genel olarak, bildirilen güvenlik açıklarını düzeltmenin yolu budur:

  • Akıl kontrolü yapın
  • Gerçek bir sorun olması durumunda, mevcut sorunlar ve PR'ler için savunmasız paket havuzunu kontrol edin
  • Hiçbiri yoksa bir sorun gönderin
  • NPM sürümünde düzeltilene kadar bir depoyu çatallayın veya mevcut PR'yi git bağımlılığı olarak kullanın
  • İç içe geçmiş bağımlılıklar durumunda, bunu çeşitli iç içe geçme düzeylerinde yapın

Çoğu zaman bir akıl sağlığı kontrolünün ötesine geçmemeniz beklenir.

patch-packageYerinde yuvalanmış bağımlılıkları düzeltmeye yardımcı olabilir, ancak bu auditraporu etkilemez .


Yol bölümüne dikkat etmedim ve gerçekten lodash v3.10.1 kullanıyor, teşekkürler. Ancak tarayıcı senkronizasyonu sadece bir örnektir, listenin sonuncusudur. Yani, 2 düşük güvenlik açığını görmezden gelebilirim, ancak 31 orta dereceli güvenlik açığını görmezden gelebilir miyim? Sanırım herhangi bir şeyi değiştirmemeliyim node_modules, bu yüzden çatallanma ve sabitleme onlardan kurtulmanın tek yolu mu? Ve yeni kullanıcı olarak bunu yapma yeteneğim yok mu? Onlar hakkında paket geliştiricileri yayınlamalı mıyım?
Yakupov

4
ama 31 ılımlı olanı görmezden gelebilir miyim? - 'Akıl sağlığı kontrolü' bununla ilgili, kararınızı kullanın. Bu raporların gerçekte ne söylediğine ne kadar dikkat ederseniz, güvenlik açısından o kadar iyi geliştirici olabilirsiniz. Onlar hakkında paket geliştiricileri yayınlamalı mıyım? - muhtemelen yapmalısın (en azından çeneni kapa audit), cevap bunu yanıtlıyor. İnsanlar bir npm auditşekilde olmadan yaşadılar . Uygulamada gerçek güvenlik sorunlarına neden olma olasılıkları çok düşüktür, ancak ne olduklarını ve uygulamanızda nasıl kullanıldıklarını bilmeden bunu garanti edemem.
Estus Flask

Teşekkürler! Yorum yazmak zaman aldı, bu yüzden yorum yapmadan önce düzenlenen kısmı görmedim.
Yakupov

5

Denetimi atlamak istediğinizden kesinlikle eminseniz, bunu --no-audit ekleyerek yapabilirsiniz.

 npm install --no-audit

2

'npm denetim düzeltmesi', package.json'daki bağımlılık sürümünü artıracak ve bu da kodun kırılmasına neden olabilir. Bu yüzden daha iyi bir yol, package-lock.json'u açmak ve bağımlılık / alt bağımlılık sürümlerini gerekli sürüme güncellemektir. Package-lock.json'u depoda tutun.

Bazen güvenlik açıkları geliştirme paketlerinden kaynaklanır, Bu durumda, bu güvenlik açıkları üretimde tespit edilmediğinden, bu güvenlik açıklarını göz ardı edin.


-3

Sistemimde oluşan sorunun çoğu npm paketinden kaynaklanıyordu. Denedim,

npm un npm

Tekrar yüklemenize gerek yok.

Programı tekrar çalıştırın. Benim için çalıştı.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.