Como faço para corrigir um pacote npm vulnerável em meu package-lock.json que não está listado no package.json?


92

O Github está me dizendo que uma dependência em meu arquivo package-lock.json é vulnerável e desatualizado. O problema é que se eu fizer npm installou npm updatenenhum deles atualizar a dependência no arquivo package-lock.json.

Eu pesquisei muito sobre isso, excluí o arquivo e pronto npm install.

Se alguém puder ajudar a resolver isso, eu agradeço muito. O pacote em questão é Hoek, que eu realmente não tenho em meu arquivo package.json.

Muito obrigado antecipadamente.


2
tente deletar seu pacote-lock.json e execute npm install novamente
Rishikesh Dhokare

1
Você pode verificar suas dependências para descobrir qual delas depende do hoek e atualizar essa. (Mas você também pode estar sem sorte e essa dependência não tem uma versão mais recente.)
Roland Starke

Eu sugeriria o mesmo de @RishikeshDhokare
xpto

Fiz o que @RishikeshDhokare disse. Problema resolvido por mim mesmo
melih sahin

Respostas:


41

Parece que Hoek é uma dependência de uma de suas dependências (portanto, um pacote que você tem em seu package.json o requer de seu próprio package.json).

Você já tentou deletar / reinstalar e atualizar as dependências do seu projeto sem sucesso, então parece que a dependência do pacote em questão tem uma versão explícita ou máxima especificada.

Sem ver o package.json para cada uma de suas dependências, seria difícil aconselhar mais sobre como forçar uma atualização.

Editar: para ajudá-lo a identificar quais pacotes estão usando quais dependências, você pode usar o lscomando do NPM : https://docs.npmjs.com/cli/ls

Por exemplo, para ver quais pacotes estão usando Hoek: npm ls hoek

Edição 2: Como Ulysse BN corretamente aponta, se você tiver o NPM versão 6 ou posterior, você pode usar npm audit fixpara pedir ao NPM para tentar corrigir as vulnerabilidades para você.

Edição 3: Aqueles que estão lendo isso também devem verificar a resposta de JBallin abaixo. Ele amplia as informações que forneci aqui e é (na minha opinião) uma resposta mais estruturada que aborda melhor a pergunta do OP. No entanto - se você deseja uma solução rápida - esta resposta deve bastar.


3
Estou tendo um problema semelhante com um pacote diferente (Growl). Suponho que seja alguma versão de algo no meu package.jsonque depende da versão específica (vulnerável) do Growl. Sua resposta está no caminho certo e você talvez pudesse acertá-la se pudesse compartilhar o comando que mostrará quais pacotes package.jsondependem do vulnerável que aparece package-lock.json.
Fuhrmanator

Veja a resposta atualizada. Se precisar de ajuda adicional - crie uma nova pergunta. :)
Alex Mulchinock


Tem certeza de que uma pergunta adicional se justifica? Eles parecem duplicatas.
JBallin de

@JBallin minha resposta foi atualizada várias vezes desde então. Pode não ter sido qualificado como uma duplicata originalmente.
Alex Mulchinock

25

TLDR: Atualize o pacote pai usando npm i $PARENT_PKG_NAME.


Nota

Ao atualizar dependências, você deve revisar o CHANGELOG para quaisquer alterações importantes.

Diagnóstico

npm auditrevelará o pacote vulnerável (observe que você precisará de um arquivo package-lock.json para isso, portanto, será necessário executá-lo npm i), bem como o pacote do qual ele depende (se aplicável). Observe que você também pode usar npm ls $CHILD_PKG_NAMEpara ver suas dependências pai.

Tentativa de correção rápida

npm audit fixe npm audit fix --forcevale a pena tentar, mas às vezes a correção precisará ser feita manualmente (veja abaixo).

Correção manual

Muito provavelmente o pacote pai já terá corrigido suas dependências (você pode verificar isso acessando o GitHub e revisando os commits recentes - ou apenas vendo se isso corrige), então você pode apenas executar npm i $PARENT_PKG_NAME @$NEW_VERSIONe ele atualizará seu bloqueio de pacote .json.

Se o pai não corrigiu a vulnerabilidade

Se o mantenedor não parece estar respondendo, você pode considerar o uso de um pacote alternativo que realiza a mesma coisa ou bifurcação do pacote e atualização da vulnerabilidade você mesmo.

Verificar correção

Agora você pode verificar se funcionou executando npm audite garantindo que nenhuma vulnerabilidade apareça. Faça o commit de suas alterações, envie-as para o GitHub, atualize suas notificações / alertas e elas terão sumido!


Que tal como no meu caso o Quick Fix não funciona nem o manual nesta resposta já que o pai é um framework que na atualização mudou completamente API e até se livrar dessa biblioteca? Isso porque o pai do grupo ainda usa a biblioteca antiga. Na verdade o antigo ainda é mantido, mas não atualizado, quero dizer, como eu poderia proceder?
Carmine Tambascia

1
@CarmineTambascia se o pacote que você está usando não está corrigindo suas vulnerabilidades (eu abriria um problema / PR na esperança de que fosse corrigido) - Eu consideraria fazer sua própria bifurcação do (s) pacote (s), consertar os vulns, em local do pacote afetado.
JBallin de

existe uma maneira de atualizar o pacote filho? No caso de o pacote pai não ter sido corrigido para vulnerabilidades?
Harshita

@Harshita consulte a seção intitulada "Se o pai não corrigiu a vulnerabilidade"
JBallin

1
@Harshita, você entrou em contato com eles? É do interesse deles corrigir essas vulnerabilidades também.
JBallin

6

Se você tiver o npm @ 6 ou posterior, poderá usar npm audit fixpara solucionar seus problemas de segurança.


1
Existem toneladas de ferramentas diferentes e elas não têm os mesmos bancos de dados de vulnerabilidade. O que achei mais exaustivo é o Snytch.
Ulysse BN

2

Usar:

npm eu hoek

O npm instalará a versão mais recente do hoek e seu package.lock.json será atualizado.


2

Edite package-lock.jsonmanualmente e atualize a versão do pacote vulnerável para a corrigida e, em seguida, use

npm ci

Isso instalará os pacotes de acordo com package-lock.json, ignorando package.jsonprimeiro. Então use

npm audit fix

novamente, para ter certeza de que foi feito corretamente. Se não ajudar, use outras soluções fornecidas.

Mais informações aqui:

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

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


Uma solução adicional poderia ser: npmjs.com/package/npm-check-updates
Lonely

Esta é uma boa solução alternativa. Se isso for feito dentro de um pacote que deve ser publicado, então não funcionará porque o arquivo package-lock.json não é publicado, mas para usar um pacote localmente, esta pode ser a melhor solução npm audit fixou não é uma opção .
rpivovar

1

Para verificar os pacotes npm vulneráveis, basta usar os seguintes comandos:

npm audit

Para consertar pacotes npm vulneráveis, basta usar os seguintes comandos que também consertarão o package-lock.json:

npm audit fix

0

Eu tive esse problema e descobri que era porque o servidor no qual eu estava executando o npm tinha uma versão antiga do npm nele - o pacote-lock.json é compatível apenas com as versões mais recentes.


0

você tentou isto: vá para a raiz do seu projeto, exclua o package-lock.jsonarquivo node_modulese as .cachepastas, e então npm install.


-4

Depois de instalar novas dependências, execute o seguinte comando para atualizar o arquivo package-lock.json:

npm update package-lock.json
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.