¿Cómo soluciono un paquete npm vulnerable en mi package-lock.json que no aparece en package.json?

91

Github me dice que una dependencia en mi archivo package-lock.json es vulnerable y está desactualizada. El problema es que si lo hago npm installo npm update, ninguno de ellos actualizar la dependencia en el archivo de paquete-lock.json.

He buscado mucho en Google sobre esto, así como borrado el archivo y listo npm install.

Si alguien puede ayudar a resolver esto, se lo agradecería enormemente. El paquete en cuestión es Hoek, que en realidad no tengo en mi archivo package.json.

Muchas gracias de antemano.

Raph117
fuente
2
intente eliminar su package-lock.json y ejecute npm install nuevamente
Rishikesh Dhokare
1
Puede verificar sus dependencias para averiguar cuál depende de hoek y actualizar esa. (Pero también podría no tener suerte y esa dependencia no tiene una versión más nueva.)
Roland Starke
Sugeriría lo mismo de @RishikeshDhokare
xpto
Hice lo que dijo @RishikeshDhokare. Problema resuelto por mí mismo
melih sahin

Respuestas:

41

Parece que Hoek es una dependencia de una de sus dependencias (por lo tanto, un paquete que tiene en su package.json lo requiere de su propio package.json).

Ya ha intentado eliminar / reinstalar y actualizar las dependencias de su proyecto sin éxito, por lo que parece que la dependencia del paquete en cuestión tiene una versión explícita o máxima especificada.

Sin ver el package.json para cada una de sus dependencias, sería difícil aconsejar más sobre cómo forzar una actualización.

Editar: para ayudarlo a identificar qué paquetes están usando qué dependencias, puede usar el lscomando de NPM : https://docs.npmjs.com/cli/ls

Por ejemplo, para ver qué paquetes están usando Hoek: npm ls hoek

Edición 2: como Ulysse BN señala correctamente, si tiene NPM versión 6 o posterior, puede usar npm audit fixpara pedirle a NPM que intente arreglar las vulnerabilidades por usted.

Edición 3: aquellos que lean esto también deberían consultar la respuesta de JBallin a continuación. Amplía la información que he proporcionado aquí y es (en mi opinión) una respuesta más estructurada que aborda mejor la pregunta de OP. Sin embargo, si desea una solución rápida, esta respuesta debería ser suficiente.

Alex Mulchinock
fuente
3
Tengo un problema similar con un paquete diferente (Growl). Supongo que es una versión de algo en mi package.jsonque depende de la versión específica (vulnerable) de Growl. Su respuesta está en el camino correcto y tal vez podría clavarla si pudiera compartir el comando que mostrará qué paquete (s) package.jsondepende del vulnerable que se muestra package-lock.json.
Fuhrmanator
Ver respuesta actualizada. Si necesita ayuda adicional, cree una nueva pregunta. :)
Alex Mulchinock
Gracias. Hecho: stackoverflow.com/questions/50764225/…
Fuhrmanator
¿Está seguro de que se justificaba una pregunta adicional? Parecen duplicados.
JBallin
@JBallin mi respuesta se ha actualizado varias veces desde entonces. Puede que no haya calificado como duplicado originalmente.
Alex Mulchinock
24

TLDR: actualice el paquete principal usando npm i $PARENT_PKG_NAME.


Nota

Al actualizar las dependencias, debe revisar el CHANGELOG para ver si hay cambios importantes.

Diagnóstico

npm auditrevelará tanto el paquete vulnerable (tenga en cuenta que necesitará un archivo package-lock.json para esto, por lo que deberá ejecutarlo npm i), así como el paquete del que depende (si corresponde). Tenga en cuenta que también puede usar npm ls $CHILD_PKG_NAMEpara ver sus dependencias principales.

Intento de solución rápida

npm audit fixy npm audit fix --forcevale la pena intentarlo, pero a veces la corrección deberá realizarse manualmente (ver más abajo).

Arreglo manual

Lo más probable es que el paquete principal ya haya solucionado sus dependencias (puede verificar esto yendo a su GitHub y revisando las confirmaciones recientes, o simplemente viendo si esto lo soluciona), por lo que puede ejecutar npm i $PARENT_PKG_NAME @$NEW_VERSIONy actualizará su bloqueo de paquete .json.

Si el padre no ha solucionado la vulnerabilidad

Si el mantenedor no parece responder, puede considerar usar un paquete alternativo que logre lo mismo o bifurcar el paquete y actualizar la vulnerabilidad usted mismo.

Verificar corrección

Ahora puede verificar que funcionó ejecutando npm audity asegurándose de que no aparezcan vulnerabilidades. Confirme sus cambios, envíelos a GitHub, actualice sus notificaciones / alertas y ¡deberían desaparecer!

JBallin
fuente
¿Qué tal como en mi caso el Quick Fix no funciona ni el manual en esta respuesta ya que el padre es un framework que en la actualización cambió completamente la API e incluso se deshizo de esa biblioteca? Esto se debe a que el marco principal todavía usa la biblioteca anterior. De hecho, el antiguo todavía se mantiene pero no se actualiza, quiero decir, ¿cómo podría proceder?
Carmine Tambascia
1
@CarmineTambascia si el paquete que está usando no está solucionando sus vulnerabilidades (abriría un problema / PR con la esperanza de que se solucione) - consideraría hacer su propia bifurcación del paquete (s), arreglar los vulns, en lugar del paquete afectado.
JBallin
¿Hay alguna forma de actualizar el paquete secundario? ¿En caso de que el paquete principal no se haya corregido en busca de vulnerabilidades?
Harshita
@Harshita vea la sección titulada "Si el padre no ha solucionado la vulnerabilidad"
JBallin
1
@Harshita, ¿te has comunicado con ellos? También les conviene corregir esas vulnerabilidades.
JBallin
6

Si tiene npm @ 6 o posterior, puede usarlo npm audit fixpara sus problemas de seguridad.

Ulysse BN
fuente
Hay toneladas de herramientas diferentes y no tienen las mismas bases de datos de vulnerabilidades. El que encontré más exhaustivo es Snytch.
Ulysse BN
2

Utilizar:

npm yo hoek

npm instalará la última versión de hoek y su package.lock.json se actualizará.

escorpión
fuente
0

Tuve este problema y descubrí que se debía a que el servidor en el que estaba ejecutando npm tenía una versión anterior de npm, package-lock.json solo es compatible con las versiones más recientes.

jvvw
fuente
0

Intentaste esto: ve a la raíz de tu proyecto, elimina el package-lock.jsonarchivo node_modulesy las .cachecarpetas, y luego npm install.

CakeL
fuente
0

Para verificar paquetes npm vulnerables, simplemente use los siguientes comandos:

npm audit

Para arreglar paquetes vulnerables de npm, simplemente use los siguientes comandos que también arreglarán package-lock.json:

npm audit fix
Jerry Chong
fuente
0

Edite package-lock.jsonmanualmente y actualice la versión del paquete vulnerable a la corregida y luego use

npm ci

Eso instalará los paquetes de acuerdo con package-lock.jsonignorando package.jsonprimero. Entonces usa

npm audit fix

nuevamente, para asegurarse de que esté bien hecho. Si no ayuda, utilice otras soluciones dadas.

Más información aquí:

https://blog.npmjs.org/post/171556855892/introducing-npm-ci-for-faster-more-reliable

o aquí: https://docs.npmjs.com/auditing-package-dependencies-for-security-vulnerabilities

Solitario
fuente
Una solución adicional podría ser: npmjs.com/package/npm-check-updates
Lonely
-3

Después de instalar nuevas dependencias, ejecute el siguiente comando para actualizar el archivo package-lock.json:

npm update package-lock.json
SA911
fuente