Come posso riparare un pacchetto npm vulnerabile nel mio package-lock.json che non è elencato in package.json?


92

Github mi sta dicendo che una dipendenza nel mio file package-lock.json è vulnerabile e obsoleta. Il problema è che se faccio npm installo npm update, nessuno dei due aggiorna la dipendenza nel file package-lock.json.

Ho fatto molte ricerche su Google su questo, così come ho cancellato il file e fatto npm install.

Se qualcuno può aiutare a risolvere questo problema, lo apprezzerei enormemente. Il pacchetto in questione è Hoek, che in realtà non ho nel mio file package.json.

Molte grazie in anticipo.


2
prova a eliminare il tuo pacchetto-lock.json ed esegui di nuovo l'installazione di npm
Rishikesh Dhokare

1
Potresti controllare le tue dipendenze per scoprire quale dipende da hoek e aggiornarla. (Ma potresti anche essere sfortunato e quella dipendenza non ha una versione più recente.)
Roland Starke

Suggerirei lo stesso di @RishikeshDhokare
xpto

Ho fatto come ha detto @RishikeshDhokare. Problema risolto per me stesso
melih sahin

Risposte:


41

Sembra che Hoek sia una dipendenza di una delle tue dipendenze (quindi, un pacchetto che hai nel tuo package.json lo richiede dal suo package.json).

Hai già provato a eliminare / reinstallare e aggiornare le dipendenze del tuo progetto senza successo, quindi sembra che la dipendenza del pacchetto in questione abbia una versione esplicita o massima specificata.

Senza vedere il package.json per ciascuna delle tue dipendenze, sarebbe difficile fornire ulteriori consigli su come forzare un aggiornamento.

Modifica: per identificare i pacchetti che utilizzano le dipendenze, è possibile utilizzare il lscomando di NPM : https://docs.npmjs.com/cli/ls

Ad esempio, per vedere quali pacchetti utilizzano Hoek: npm ls hoek

Modifica 2: come correttamente sottolineato da Ulysse BN, se si dispone della versione 6 o successiva di NPM, è possibile utilizzare npm audit fixper chiedere a NPM di tentare di risolvere le vulnerabilità.

Modifica 3: coloro che leggono questo dovrebbero anche controllare la risposta di JBallin di seguito. Espande le informazioni che ho fornito qui ed è (a mio parere) una risposta più strutturata che affronta meglio la domanda di OP. Tuttavia, se vuoi una soluzione rapida, questa risposta dovrebbe essere sufficiente.


3
Ho un problema simile con un pacchetto diverso (Growl). Immagino sia una versione di qualcosa nel mio package.jsonche dipende dalla versione specifica (vulnerabile) di Growl. La tua risposta è sulla strada giusta e potresti forse inchiodarla se potessi condividere il comando che mostrerà quali pacchetti package.jsondipendono da quello vulnerabile mostrato in package-lock.json.
Fuhrmanator

Vedi risposta aggiornata. Se hai bisogno di ulteriore aiuto, crea una nuova domanda. :)
Alex Mulchinock


Sei sicuro che fosse giustificata un'ulteriore domanda? Sembrano duplicati.
JBallin

@JBallin la mia risposta è stata aggiornata più volte da allora. Potrebbe non essere stato qualificato come duplicato originariamente.
Alex Mulchinock

25

TLDR: aggiorna il pacchetto padre utilizzando npm i $PARENT_PKG_NAME.


Nota

Quando si aggiornano le dipendenze, è necessario esaminare il CHANGELOG per eventuali modifiche sostanziali.

Diagnosi

npm auditrivelerà sia il pacchetto vulnerabile (nota che avrai bisogno di un file package-lock.json per questo, quindi dovrai eseguire npm i), sia il pacchetto di cui è una dipendenza (se applicabile). Nota che puoi anche usare npm ls $CHILD_PKG_NAMEper vedere le sue dipendenze padre.

Tentativo di riparazione rapida

npm audit fixe npm audit fix --forcevale la pena provare, ma a volte la correzione dovrà essere eseguita manualmente (vedi sotto).

Correzione manuale

Molto probabilmente il pacchetto genitore avrà già corretto le loro dipendenze (puoi verificarlo andando sul loro GitHub e rivedendo i commit recenti - o semplicemente vedendo se questo lo risolve), quindi puoi semplicemente eseguire npm i $PARENT_PKG_NAME @$NEW_VERSIONe aggiornerà il tuo blocco del pacchetto .json.

Se il genitore non ha risolto la vulnerabilità

Se il manutentore non sembra essere reattivo, potresti prendere in considerazione l'utilizzo di un pacchetto alternativo che realizza la stessa cosa o il fork del pacchetto e l'aggiornamento tu stesso della vulnerabilità.

Verifica correzione

Ora puoi verificare che abbia funzionato eseguendo npm audite assicurandoti che non siano presenti vulnerabilità. Effettua il commit delle modifiche, inviali su GitHub, aggiorna le notifiche / avvisi e dovrebbero essere spariti!


E se nel mio caso la correzione rapida non funziona né il manuale in questa risposta in quanto il genitore è un framework che nell'aggiornamento ha cambiato completamente l'API e si è sbarazzato anche di quella libreria? Questo perché il fraemwork genitore usa ancora la vecchia libreria. Effettivamente il vecchio è ancora mantenuto ma non aggiornato, intendo come potrei procedere?
Carmine Tambascia

1
@CarmineTambascia se il pacchetto che stai utilizzando non risolve le sue vulnerabilità (aprirei un problema / PR nella speranza che venga risolto) - prenderei in considerazione la possibilità di creare il tuo fork dei pacchetti, correggere i vulns, in luogo del pacco interessato.
JBallin

c'è un modo per aggiornare il pacchetto figlio? Nel caso in cui il pacchetto principale non è stato corretto per le vulnerabilità?
Harshita

@Harshita vedere la sezione intitolata "Se il genitore non ha risolto la vulnerabilità"
JBallin

1
@Harshita li hai contattati? È nel loro interesse correggere anche queste vulnerabilità.
JBallin

6

Se hai npm @ 6 o successivo, puoi usarlo npm audit fixper i tuoi problemi di sicurezza.


1
Esistono tantissimi strumenti diversi e non hanno gli stessi database di vulnerabilità. Quello che ho trovato più esaustivo è Snytch.
Ulysse BN

2

Uso:

npm ho hoek

npm installerà l'ultima versione di hoek e il tuo package.lock.json verrà aggiornato.


2

Modificare package-lock.jsonmanualmente e aggiornare la versione del pacchetto vulnerabile a quella corretta, quindi utilizzare

npm ci

Ciò installerà i pacchetti in base a package-lock.jsonignorando package.jsonprima. Quindi usa

npm audit fix

di nuovo, per essere sicuri che sia fatto correttamente. Se non aiuta, allora usa altre soluzioni date.

Maggiori informazioni qui:

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

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


Un'ulteriore soluzione potrebbe essere: npmjs.com/package/npm-check-updates
Lonely

Questa è una buona soluzione alternativa. Se questo viene fatto all'interno di un pacchetto che deve essere pubblicato, allora non funzionerà perché il file package-lock.json non viene pubblicato, ma per l'utilizzo di un pacchetto localmente, questa potrebbe essere la soluzione migliore di npm audit fixnon è un'opzione .
rpivovar

1

Per controllare i pacchetti npm vulnerabili, usa i seguenti comandi:

npm audit

Per correggere i pacchetti npm vulnerabili, usa semplicemente i seguenti comandi che correggeranno anche package-lock.json:

npm audit fix

0

Ho avuto questo problema e ho scoperto che era perché il server su cui stavo eseguendo npm aveva una vecchia versione di npm su di esso - package-lock.json è supportato solo dalle versioni più recenti.


0

hai provato questo: vai alla radice del tuo progetto, elimina il package-lock.jsonfile node_modulese le .cachecartelle e poi npm install.


-4

Dopo aver installato nuove dipendenze, eseguire il seguente comando per aggiornare il file package-lock.json:

npm update package-lock.json
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.