Cara yang tepat untuk memperbaiki potensi kerentanan keamanan dalam dependensi yang ditentukan di package-lock.json

90

Github memberi saya kesalahan ini di salah satu repositori saya.

We found a potential security vulnerability in one of your dependencies.
A dependency defined in ./package-lock.json has known security vulnerabilities 
and should be updated.

Ketergantungan tidak ditentukan dalam package.jsonfile kami . Menurut pemahaman saya, ini bukanlah praktik yang baik untuk menghapus package-lock.jsonfile dan membuatnya kembali. Namun, saya tidak dapat melihat cara lain untuk memperbaiki masalah ini. Jika saya mengabaikan kerentanan keamanan ini, kerentanan tersebut akan muncul lagi beberapa hari kemudian. Ada ide? Terima kasih!

Kaito
sumber

Jawaban:

68

Baru: sekarang, dengan npm @ 6 Anda dapat langsung menjalankannya

npm audit fix

Jawaban lama:

Anda harus mencoba mengidentifikasi nama paket yang bermasalah, dan kemudian menjalankan

npm install package-name

mengganti nama paket, tentu saja.

Ini akan menginstal versi terbaru dari paket tersebut, dan seringkali, versi terbaru telah memperbaiki masalah keamanan. Jika Anda memiliki batasan pada versi (misalnya: 1.2), Anda selalu dapat mencoba untuk:

npm install package-name@^1.2

dan versi patch terbaru akan diinstal

DevTheJo
sumber
1
... dan untuk 'mengidentifikasi nama paket yang bermasalah', Anda dapat menjalankan npm ls vulnerability-name. Ini mencantumkan dependen kerentanan, yang kemudian dapat Anda perbarui / instal. (seperti disebutkan agak tidak jelas dalam jawaban @ RileyManda)
Sjeiti
1
npm audit fix dengan bersih memperbaiki masalah ini untuk saya sekarang.
Kaito
9
Ini akan menambah package-namedi dependenciesdari package.json. Saya tidak menginginkan ini.
slideshowp2
7

Untuk mengatasi ini:

Solusi1: Pertama temukan kerentanan: Menggunakan terminal Anda: cd ke dalam proyek Anda , lalu jalankan "npm ls hoek"

Dan terakhir: npm install bcrypt @ latest

Kemudian dorong proyek yang telah diperbarui ke git. (Yaitu melakukan komit baru).

Solusi 2:

jika opsi / solusi pertama tidak menyelesaikan masalah. Ubah versi secara manual di package-lock.json Anda. Ubah versi Anda secara manual dari 2.16.3 ke 4.2.1

"hoek": {
      "version":  "4.2.1",
      "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz",
      "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=",
      "dev": true

Kemudian perbarui proyek Anda di GitHub (commit / push) Pastikan setiap versi hoek yang terjadi di versi package-lock.json Anda diubah menjadi 4.2.1

Atau jika Anda dapat menemukan cara untuk mengubah versi hoek / update hoek menggunakan npm, akan membuatnya lebih sederhana. (Seperti: npm update @ hoek..version ) .. atau hapus instalan dependensi tertentu kemudian instal ulang menggunakan bower atau npm.

RileyManda
sumber
4

Saya mengalami masalah yang sama dengan kerentanan keamanan lodash, dalam sebuah proyek yang saya bangun dengan benang. Github menandai ini sebagai masalah keamanan.

Saya mencoba jawaban dari @rileymanda di atas, menggunakan terminal: cd ke dalam proyek, lalu jalankan npm ls lodash.

Ini mengungkap bahwa dalam kasus saya, kesalahannya ada pada skrip-react . Google Cepat untuk masalah dengan react-scripts dan lodash menemukan bahwa ini adalah masalah yang diketahui.

Saya mencoba berbagai hal untuk diperbaiki melalui benang - semuanya tidak berhasil. npm ls lodashmasih menunjukkan versi rentan dari lodash yang digunakan.

Setelah membaca blog Matt Turnbull tentang peningkatan npm, saya beralih dari benang kembali ke npm. (Hapus yarn.lock, hapus ./node_modules. Jalankan npm install). npm ls lodashsekarang menunjukkan versi dependensi terbaru yang digunakan - hore! Berkomitmen untuk github, dan sekarang senang karena kerentanannya telah hilang.

Sepertinya benang mungkin berjuang untuk melepaskan masalah seperti itu (atau tidak dimaksudkan untuk).

Jika Anda mendapatkan masalah ini saat membangun dengan benang, cobalah beralih [kembali] ke npm!

JohnSk
sumber
3

Menurut pemahaman saya, ini bukan praktik yang baik untuk menghapus file package-lock.json dan membuatnya kembali.

Namun, inilah yang biasanya dilakukan dalam hal ini.
Lihat misalnya angular / angular-cli masalah 8534 , yang diselesaikan dengan PR 8535 .
Yang mengarah proyek tergantung seperti frees-io/freestyle-opscenter-webclientuntuk memperbarui nya package-lock.json: PR 31 .

VonC
sumber
Regenerasi package-lock.json tampaknya tidak menyelesaikan masalah
xianshenglu
@xianshenglu Oke, saya akan meninggalkan jawabannya di sana seandainya itu membantu orang lain.
VonC
Saya menerima peringatan untuk penguncian paket di komit lama. Bagaimana mungkin saya memperbaiki sesuatu dalam sejarah tanpa menulis ulang?
pishpish
@destoryer Yang saya tidak tahu: coba dan ajukan pertanyaan baru dengan lebih detail (OS, versi npm, ...)
VonC
1
Itu memperbaiki masalah saya. Terima kasih atas tipnya.
Kaya
1

kerentanan keamanan yang diketahui dan harus diperbarui.

Sejak 23 Mei 2019, Anda sekarang memiliki " Dependabot: Perbaikan keamanan otomatis "

Melalui integrasi Dependabot, kami telah merilis perbaikan keamanan otomatis sebagai versi beta publik.

Perbaikan keamanan otomatis adalah permintaan pull yang dibuat oleh GitHub untuk memperbaiki kerentanan keamanan.
Mereka mengotomatiskan bagian yang membosankan dari alur kerja dan memudahkan pengembang untuk selalu memperbarui dependensi mereka.

Lihat lebih lanjut di " Mengonfigurasi perbaikan keamanan otomatis "

Catatan: Perbaikan keamanan otomatis tersedia dalam versi beta dan dapat berubah.

Anda dapat mengaktifkan perbaikan keamanan otomatis untuk setiap repositori yang menggunakan peringatan keamanan dan grafik ketergantungan.
Kami akan secara otomatis mengaktifkan perbaikan keamanan otomatis di setiap repositori yang menggunakan peringatan keamanan dan grafik ketergantungan selama beberapa bulan ke depan, mulai Mei 2019.

VonC
sumber
Saya mendapatkan hasil yang beragam dengan bot itu. Saya lebih suka melakukannya secara manual npm auditdan / atau npm audit fix.
Fuhrmanator
@Fuhrator Oke. Anda menyebutkan medium.com/coinmonks/… di komentar sebelumnya?
VonC
0

Ini berhasil untuk saya. hapus semua dependensi Anda dan instal lagi

Sebagai contoh

dari package.json lihat daftar dependensi Anda

{
"name": "ebook-saler",
  "version": "1.0.0",
  "description": "App for selling ebooks",
  "main": "app.js",
  "scripts": {
    "start": "node app.js"
  },
  "author": "Md Shayon",
  "license": "ISC",
  "dependencies": {
    "body-parser": "^1.19.0",
    "express": "^4.17.1",
    "express-handlebars": "^3.1.0",
    "hoek": "^6.1.3",
    "stripe": "^7.5.0"
  }
}

Ikuti perintah untuk ini

npm uninstall body-parser express express-handlebars hoek stripe
npm install body-parser express express-handlebars hoek stripe
git commit -m "updated"
git push
MD SHAYON
sumber
0
  1. Di GitHub, buka halaman utama repositori.
  2. Di bawah nama repositori Anda, klik Keamanan.
  3. Klik lansiran yang ingin Anda lihat.
  4. Tinjau detail kerentanan dan, jika tersedia, permintaan penarikan yang berisi perbaikan keamanan otomatis.
  5. Secara opsional, jika belum ada perbaikan keamanan otomatis untuk lansiran tersebut, untuk membuat permintaan tarik guna mengatasi kerentanan, klik Buat perbaikan keamanan otomatis.
  6. Saat Anda siap memperbarui ketergantungan dan mengatasi kerentanan, gabungkan permintaan tarik.

Lihat detailnya

MD SHAYON
sumber
0

coba npm audit fix, ini akan menyelesaikan banyak peringatan

kemudian npm i [package.name]@xxx

sebagai contoh:

"dependencies": {
  "lodash": ">=4.17.13"
}

npm i [email protected]

Jun Du
sumber