Bagaimana cara memperbaiki kerentanan npm secara manual?

96

Ketika saya menjalankannya npm install, tertulis found 33 vulnerabilities (2 low, 31 moderate) run `npm audit fix` to fix them, or `npm audit` for details.

Namun, npm audit fixkeluaranup to date in 11s fixed 0 of 33 vulnerabilities in 24653 scanned packages 33 vulnerabilities required manual review and could not be updated

Apakah itu reviewberarti itu tidak seharusnya diperbaiki oleh pengguna?

Ketika saya menjalankannya npm auditmemberi saya daftar tabel, mirip dengan ini:

┌───────────────┬──────────────────────────────────────────────────────────────┐
│ 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                       │
└───────────────┴──────────────────────────────────────────────────────────────┘

Dalam contoh ini bagian remediasi dari halaman tertaut mengatakan Update to version 4.17.5 or later.. Namun, /node_modules/browser-sync/package.jsonada garis-garisnya:

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

dan tidak ada lagi dependensi lodash. Jadi seharusnya sudah v4.17.5. Saya juga memeriksa /node_modules/lodash/lodash.jsonmana yang memiliki var VERSION = '4.17.10';garis. Di /node_modules/lodash/package.jsonsana ada baris-baris ini:

  "_from": "lodash@^4.17.4",
  "_id": "[email protected]",

Saya yakin bahwa versi yang ditampilkan di "_id", bukan "_from", jadi versinya benar tetapi kerentanan masih muncul di daftar audit.

Saya masih baru di node.js dan pesan-pesan itu sangat membingungkan saya. Apakah ada cara untuk memperbaikinya secara manual atau menghapus pesan-pesan itu, saya tidak bisa berbuat apa-apa?

Jakupov
sumber

Jawaban:

33

lodash-cliin devDependenciestidak memengaruhi cara browser-synckerja dalam proyek Anda, devDependenciesdiabaikan ketika sebuah paket diinstal sebagai dependensi.

Apa yang auditdikatakan laporan itu adalah easy-extenderyang memiliki lodashketergantungan:

browser-sync > easy-extender > lodash        

Itu tergantung pada Lodash 3 , sementara masalah telah diperbaiki di Lodash 4. Masalahnya dapat diperbaiki dengan forking easy-extender, memperbaruinya dan menginstalnya daripada paket dari NPM public registry. Tetapi tidak ada masalah nyata dengan ketergantungan ini.

auditpentingnya laporan harus dievaluasi secara manual. Meskipun ketergantungan bertingkat memiliki risiko keamanan, ini tidak berarti bahwa fitur yang memperkenalkan risiko ini digunakan. Ini juga tidak berarti bahwa meskipun digunakan, ini menimbulkan risiko nyata karena cara penggunaannya.

browser-syncadalah alat pengembangan yang tidak digunakan dalam produksi, tidak banyak skenario di mana kerentanannya dapat dieksploitasi. Dan Prototipe Polusi sama sekali bukan kerentanan, hanya pemberitahuan bahwa sebuah paket tidak mengikuti praktik yang baik, itu dapat diabaikan.

Secara umum, ini adalah cara untuk memperbaiki kerentanan yang dilaporkan:

  • Lakukan pemeriksaan kewarasan
  • Jika ini masalah nyata, periksa repositori paket rentan untuk masalah dan PR yang ada
  • Jika tidak ada, kirimkan masalah
  • Garpu repositori atau gunakan PR yang ada sebagai dependensi git hingga diperbaiki dalam rilis NPM
  • Dalam kasus dependensi bertingkat, lakukan ini di beberapa tingkat penumpukan

Sering kali diharapkan Anda tidak akan maju setelah pemeriksaan kewarasan.

patch-packagedapat membantu untuk menambal dependensi bertingkat di tempat tetapi ini tidak akan memengaruhi auditlaporan.

Estus Flask
sumber
Saya tidak memperhatikan bagian Path, dan itu benar-benar menggunakan lodash v3.10.1, terima kasih. Tetapi sinkronisasi browser hanyalah contoh, yang terakhir dari daftar. Jadi, saya dapat mengabaikan 2 kerentanan rendah, tetapi dapatkah saya mengabaikan 31 kerentanan sedang? Saya kira saya tidak boleh memodifikasi apa pun node_modules, jadi apakah forking dan fixing hanyalah cara untuk menghilangkannya? Dan sebagai pengguna baru saya tidak memiliki kemampuan untuk melakukan itu? Haruskah saya mengeluarkan pengembang paket tentang mereka?
Jakupov
4
tetapi bisakah saya mengabaikan 31 yang moderat? - ini adalah tentang 'pemeriksaan kewarasan', gunakan penilaian Anda. Semakin banyak perhatian yang Anda berikan pada apa yang sebenarnya dikatakan laporan ini, semakin baik Anda menjadi pengembang, dari segi keamanan. Haruskah saya mengeluarkan pengembang paket tentang mereka? - Anda mungkin harus (setidaknya tutup auditmulut), jawabannya menjawab itu. Orang hidup tanpa npm auditentah bagaimana. Kemungkinan mereka menyebabkan masalah keamanan nyata pada aplikasi sangat rendah, namun tanpa mengetahui apa itu dan bagaimana penggunaannya di aplikasi Anda, saya tidak dapat menjaminnya.
Estus Flask
Terima kasih! Butuh waktu untuk menulis komentar, jadi tidak melihat bagian yang diedit sebelum berkomentar.
Jakupov
5

Jika Anda benar-benar yakin ingin melewatkan audit, Anda dapat melakukannya dengan menambahkan --no-audit

 npm install --no-audit
Tjad Clark
sumber
2

'npm audit fix' akan meningkatkan versi ketergantungan di package.json yang dapat menyebabkan kerusakan kode. Jadi cara yang lebih baik adalah membuka package-lock.json dan mengupdate versi dependensi / subdependensi ke versi yang diperlukan. Pertahankan package-lock.json di repositori.

Terkadang kerentanan berasal dari paket dev, Dalam hal ini abaikan kerentanan tersebut karena kerentanan tersebut tidak diambil dalam produksi.

nik
sumber
-3

Sebagian besar masalah yang terjadi di sistem saya adalah karena paket npm. Saya mencoba,

npm un npm

Anda tidak perlu menginstal lagi.

Jalankan program lagi. Itu berhasil untuk saya.

Gaurav Rana
sumber