Comment réparer un package npm vulnérable dans mon package-lock.json qui n'est pas répertorié dans package.json?

91

Github me dit qu'une dépendance dans mon fichier package-lock.json est vulnérable et obsolète. Le problème est que si je fais npm installou npm update, aucun d'eux ne met à jour la dépendance dans le fichier package-lock.json.

J'ai fait beaucoup de recherches sur Google à ce sujet, ainsi que supprimé le fichier et terminé npm install.

Si quelqu'un peut aider à résoudre ce problème, je l'apprécierais énormément. Le package en question est Hoek, que je n'ai pas réellement dans mon fichier package.json.

Merci d'avance.

Raph117
la source
2
essayez de supprimer votre package-lock.json et exécutez à nouveau npm install
Rishikesh Dhokare
1
Vous pouvez vérifier vos dépendances pour savoir laquelle dépend de hoek et mettre à jour celle-ci. (Mais vous pourriez aussi être malchanceux et cette dépendance n'a pas de version plus récente.)
Roland Starke
Je suggérerais la même chose de @RishikeshDhokare
xpto
J'ai fait ce que @RishikeshDhokare a dit. Problème résolu pour moi
melih sahin

Réponses:

41

On dirait que Hoek est une dépendance de l'une de vos dépendances (donc, un paquet que vous avez dans votre package.json l'exige de son propre package.json).

Vous avez déjà essayé de supprimer / réinstaller et mettre à jour les dépendances de votre projet sans succès, il semble donc que la dépendance de package en question ait une version explicite ou maximale spécifiée.

Sans voir le package.json pour chacune de vos dépendances, il serait difficile de vous conseiller davantage sur la façon de forcer une mise à jour.

Edit: pour vous aider à identifier quels packages utilisent quelles dépendances, vous pouvez utiliser la lscommande NPM : https://docs.npmjs.com/cli/ls

Par exemple, pour voir quels packages utilisent Hoek: npm ls hoek

Edit 2: Comme Ulysse BN le souligne correctement, si vous avez NPM version 6 ou ultérieure, vous pouvez utiliser npm audit fixpour demander à NPM d'essayer de corriger les vulnérabilités pour vous.

Edit 3: Ceux qui liront ceci devraient également consulter la réponse de JBallin ci-dessous. Il étend les informations que j'ai données ici et constitue (à mon avis) une réponse plus structurée qui répond mieux à la question d'OP. Cependant, si vous voulez une solution rapide, cette réponse devrait suffire.

Alex Mulchinock
la source
3
J'ai un problème similaire avec un package différent (Growl). Je suppose que c'est une version de quelque chose dans mon package.jsonqui dépend de la version spécifique (vulnérable) de Growl. Votre réponse est sur la bonne voie et vous pourriez peut-être la clouer si vous pouviez partager la commande qui montrera quel (s) paquet (s) package.jsondépendent du plus vulnérable affiché package-lock.json.
Fuhrmanator
Voir la réponse mise à jour. Si vous avez besoin d'aide supplémentaire, créez une nouvelle question. :)
Alex Mulchinock
Merci. Fait: stackoverflow.com/questions/50764225/…
Fuhrmanator
Etes-vous sûr qu'une question supplémentaire était justifiée? Ils semblent être des doublons.
JBallin
@JBallin ma réponse a été mise à jour plusieurs fois depuis. Il n'a peut-être pas été qualifié de double à l'origine.
Alex Mulchinock
24

TLDR: mettez à jour le package parent à l'aide de npm i $PARENT_PKG_NAME.


Remarque

Lors de la mise à jour des dépendances, vous devez consulter le CHANGELOG pour tout changement de rupture.

Diagnostic

npm auditrévélera à la fois le package vulnérable (notez que vous aurez besoin d'un fichier package-lock.json pour cela, vous devrez donc l'exécuter npm i), ainsi que le package dont il est une dépendance (le cas échéant). Notez que vous pouvez également utiliser npm ls $CHILD_PKG_NAMEpour voir ses dépendances parentes.

Tentative de correction rapide

npm audit fixet npm audit fix --forcevalent la peine d'essayer, mais parfois le correctif devra être fait manuellement (voir ci-dessous).

Correction manuelle

Très probablement, le package parent aura déjà corrigé ses dépendances (vous pouvez le vérifier en accédant à son GitHub et en examinant les récents commits - ou simplement en voyant si cela le corrige), vous pouvez donc simplement exécuter npm i $PARENT_PKG_NAME @$NEW_VERSIONet il mettra à jour votre package-lock .json.

Si le parent n'a pas corrigé la vulnérabilité

Si le responsable ne semble pas réactif, vous pouvez envisager d'utiliser un autre package qui accomplit la même chose ou de forger le package et de mettre à jour la vulnérabilité vous-même.

Vérifier le correctif

Vous pouvez maintenant vérifier que cela a fonctionné en exécutant npm auditet en vous assurant qu'aucune vulnérabilité n'apparaît. Validez vos modifications, transférez-les sur GitHub, actualisez vos notifications / alertes et elles devraient disparaître!

JBallin
la source
Qu'en est-il du fait que dans mon cas, le correctif rapide ne fonctionne pas non plus le manuel de cette réponse car le parent est un cadre qui dans la mise à jour a complètement changé l'API et se débarrasse même de cette bibliothèque? Ceci parce que le système parent utilise toujours l'ancienne bibliothèque. En effet l'ancien est toujours maintenu mais pas mis à jour, je veux dire comment je pourrais procéder?
Carmine Tambascia le
1
@CarmineTambascia si le paquet que vous utilisez ne corrige pas ses vulnérabilités (j'ouvrirais un problème / PR dans l'espoir qu'il serait corrigé) - j'envisagerais de créer votre propre fork du (des) paquet (s), corriger les vulns, en lieu du colis concerné.
JBallin le
existe-t-il un moyen de mettre à jour le package enfant? Dans le cas où le package parent n'a pas été corrigé pour les vulnérabilités?
Harshita le
@Harshita voir la section intitulée "Si le parent n'a pas corrigé la vulnérabilité"
JBallin
1
@Harshita les avez-vous contactés? Il est dans leur intérêt de corriger également ces vulnérabilités.
JBallin
6

Si vous avez npm @ 6 ou version ultérieure, vous pouvez l'utiliser npm audit fixpour vos problèmes de sécurité.

Ulysse BN
la source
Il existe des tonnes d'outils différents et ils n'ont pas les mêmes bases de données de vulnérabilités. Celui que j'ai trouvé le plus exhaustif est Snytch.
Ulysse BN
2

Utilisation:

npm je hoek

npm installera la dernière version de hoek et votre package.lock.json sera mis à jour.

Scorpion
la source
0

J'ai eu ce problème et j'ai trouvé que c'était parce que le serveur sur lequel j'exécutais npm avait une ancienne version de npm sur it- package-lock.json n'est pris en charge que par les versions plus récentes.

jvvw
la source
0

avez-vous essayé ceci: accédez à la racine de votre projet, supprimez le package-lock.jsonfichier node_moduleset les .cachedossiers, puis npm install.

CakeL
la source
0

Pour vérifier les packages npm vulnérables, utilisez simplement les commandes suivantes:

npm audit

Pour réparer les paquets npm vulnérables, utilisez simplement les commandes suivantes qui corrigent également package-lock.json:

npm audit fix
Jerry Chong
la source
0

Modifiez package-lock.jsonmanuellement et mettez à jour la version du package vulnérable vers la version fixe, puis utilisez

npm ci

Cela installera les packages selon package-lock.jsonen ignorant d' package.jsonabord. Ensuite, utilisez

npm audit fix

encore une fois, pour être sûr que c'est bien fait. Si cela ne vous aide pas, utilisez d'autres solutions données.

Plus d'informations ici:

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

ou ici: https://docs.npmjs.com/auditing-package-dependencies-for-security-vulnerabilities

solitaire
la source
Une solution supplémentaire pourrait être: npmjs.com/package/npm-check-updates
Lonely
-3

Après avoir installé de nouvelles dépendances, exécutez la commande suivante pour mettre à jour le fichier package-lock.json:

npm update package-lock.json
SA911
la source