Forma adecuada de corregir una posible vulnerabilidad de seguridad en una dependencia definida en package-lock.json

88

Github me ha dado este error en uno de mis repositorios.

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.

La dependencia no está definida en nuestro package.jsonarchivo. Según tengo entendido, no es una buena práctica eliminar el package-lock.jsonarchivo y volver a generarlo. Sin embargo, no veo ninguna otra forma de solucionar este problema. Si descarto esta vulnerabilidad de seguridad, volverá a aparecer un par de días después. ¿Algunas ideas? ¡Gracias!

Kaito
fuente

Respuestas:

67

Nuevo: ahora, con npm @ 6 puede ejecutar directamente

npm audit fix

Respuesta anterior:

Debe intentar identificar el nombre del paquete problemático y luego ejecutar

npm install package-name

reemplazando el nombre del paquete, obviamente.

Esto instalará la última versión del paquete y, muy a menudo, la última versión ha solucionado el problema de seguridad. Si tiene una restricción en la versión (por ejemplo: 1.2), siempre puede intentar:

npm install package-name@^1.2

y se instalará la última versión parcheada

DevTheJo
fuente
1
... y para 'identificar el nombre del paquete problemático' puede ejecutar npm ls vulnerability-name. Aquí se enumeran los dependientes de la vulnerabilidad, que luego puede actualizar / instalar. (como se menciona de forma bastante poco clara en la respuesta de @ RileyManda)
Sjeiti
1
npm audit fix soluciona limpiamente este problema ahora.
Kaito
9
Se añade package-nameen el dependenciesde package.json. No quiero esto.
slideshowp2
7

Para resolver esto:

Solución 1: Primero encuentre la vulnerabilidad: usando su terminal: cd en su proyecto , luego ejecute "npm ls hoek"

Y finalmente: npm install bcrypt @ latest

Luego, envíe el proyecto actualizado a git (es decir, realice una nueva confirmación).

Solución 2:

si la primera opción / solución no resuelve el problema, cambie la versión manualmente en su package-lock.json. Cambie su versión manualmente de 2.16.3 a 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

Luego actualice su proyecto en GitHub (commit / push) Solo asegúrese de que cada ocurrencia de la versión hoek en su versión package-lock.json se cambie a 4.2.1

Alternativamente, si puede encontrar una manera de cambiar la versión de hoek / actualizar hoek usando npm, hará las cosas mucho más simples. (Algo como: npm update @ hoek..version ) .. o desinstalar la dependencia específica y luego reinstalarla usando bower o npm.

RileyManda
fuente
4

Estaba teniendo el mismo problema con una vulnerabilidad de seguridad lodash, en un proyecto que estaba construyendo con hilo. Github los marcó como problemas de seguridad.

Probé la respuesta de @rileymanda anterior, usando una terminal: cd en el proyecto, luego ejecuté npm ls lodash.

Esto descubrió que, en mi caso, el error estaba en react-scripts . Quick Google para problemas con react-scripts y lodash descubrió que se trataba de un problema conocido.

Probé varias cosas para arreglarlas a través de hilo, todas sin éxito. npm ls lodashtodavía mostraba la versión vulnerable de lodash en uso.

Después de leer el blog de Matt Turnbull sobre las mejoras a npm , cambié de hilo de nuevo a npm. (Eliminar yarn.lock, eliminar ./node_modules. Ejecutar npm install). npm ls lodashahora mostró las últimas versiones de dependencia que se están utilizando - ¡hurra! Comprometido con github, y ahora estaba feliz de que la vulnerabilidad se hubiera ido.

Parece que el hilo puede estar luchando para resolver estos problemas (o no tiene la intención de hacerlo).

Si tiene este problema al construir con hilo, intente cambiar [volver] a npm.

JohnSk
fuente
3

Según tengo entendido, no es una buena práctica eliminar el archivo package-lock.json y volver a generarlo.

Sin embargo, esto es lo que se suele hacer en este caso.
Consulte, por ejemplo, el problema angular / angular-cli 8534 , que se resuelve mediante PR 8535 .
Que lleva un proyecto dependiente como frees-io/freestyle-opscenter-webclientpara actualizar su package-lock.json: PR 31 .

VonC
fuente
La regeneración de package-lock.json parece no resuelve el problema
xianshenglu
@xianshenglu Está bien, dejaré la respuesta allí en caso de que ayude a otros.
VonC
Recibo la advertencia de bloqueo de paquete en una confirmación anterior. ¿Cómo diablos voy a arreglar algo en la historia sin volver a escribirlo?
pishpish
@destoryer Eso no lo sé: intente hacer una nueva pregunta con más detalles (SO, versión de npm, ...)
VonC
1
Eso solucionó mi problema. Gracias por el consejo.
Rich
1

vulnerabilidades de seguridad conocidas y deben actualizarse.

Desde el 23 de mayo de 2019, ahora tiene " Dependabot: correcciones de seguridad automatizadas "

A través de la integración de Dependabot, hemos lanzado correcciones de seguridad automatizadas como una versión beta pública.

Las correcciones de seguridad automatizadas son solicitudes de extracción generadas por GitHub para corregir vulnerabilidades de seguridad.
Automatizan una parte tediosa del flujo de trabajo y facilitan a los desarrolladores mantener sus dependencias actualizadas.

Más información en " Configuración de correcciones de seguridad automatizadas "

Nota: Las correcciones de seguridad automáticas están disponibles en versión beta y están sujetas a cambios.

Puede habilitar correcciones de seguridad automáticas para cualquier repositorio que utilice alertas de seguridad y el gráfico de dependencia.
Habilitaremos automáticamente las correcciones de seguridad automáticas en cada repositorio que use alertas de seguridad y el gráfico de dependencia durante los próximos meses, a partir de mayo de 2019.

VonC
fuente
He tenido resultados mixtos con ese bot. Prefiero hacerlo manualmente npm audity / o npm audit fix.
Fuhrmanator
@Fuhrmanator OK. ¿Mencionaste medium.com/coinmonks/… en un comentario anterior?
VonC
0

Esto funciona para mi. desinstale todas sus dependencias e instálelas nuevamente

Por ejemplo

de package.json vea la lista de sus dependencias

{
"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"
  }
}

Siga el comando para esto

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
fuente
0
  1. En GitHub, navega a la página principal del repositorio.
  2. Debajo del nombre de su repositorio, haga clic en Seguridad.
  3. Haga clic en la alerta que le gustaría ver.
  4. Revise los detalles de la vulnerabilidad y, si está disponible, la solicitud de extracción que contiene la corrección de seguridad automatizada.
  5. Opcionalmente, si aún no existe una corrección de seguridad automatizada para la alerta, para crear una solicitud de extracción para resolver la vulnerabilidad, haga clic en Crear corrección de seguridad automatizada.
  6. Cuando esté listo para actualizar su dependencia y resolver la vulnerabilidad, combine la solicitud de extracción.

Ver detalles

MD SHAYON
fuente
0

tratar npm audit fix , solucionará muchas advertencias

entonces npm i [package.name]@xxx

por ejemplo:

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

npm i [email protected]

Jun Du
fuente