Maneira adequada de corrigir vulnerabilidade de segurança potencial em uma dependência definida em package-lock.json

88

O Github me deu este erro em um dos meus repositórios.

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.

A dependência não está definida em nosso package.jsonarquivo. No meu entendimento, não é uma boa prática excluir o package-lock.jsonarquivo e gerá-lo novamente. No entanto, não consigo ver nenhuma outra maneira de corrigir esse problema. Se eu descartar essa vulnerabilidade de segurança, ela aparecerá novamente alguns dias depois. Alguma ideia? Obrigado!

Kaito
fonte

Respostas:

67

Novo: agora, com npm @ 6 você pode executar diretamente

npm audit fix

Resposta antiga:

Você deve tentar identificar o nome do pacote problemático e, em seguida, executar

npm install package-name

substituindo o nome do pacote, obviamente.

Isso instalará a versão mais recente do pacote e, muitas vezes, a versão mais recente corrigiu o problema de segurança. Se você tiver uma restrição na versão (por exemplo: 1.2), você sempre pode tentar:

npm install package-name@^1.2

e a última versão corrigida será instalada

DevTheJo
fonte
1
... e para 'identificar o nome do pacote problemático', você pode executar npm ls vulnerability-name. Isso lista os dependentes de vulnerabilidade, que você pode atualizar / instalar. (como mencionado de forma pouco clara na resposta de @RileyManda)
Sjeiti
1
A correção de auditoria npm corrige esse problema para mim agora.
Kaito,
9
Ele irá adicionar package-nameem dependenciesde package.json. Eu não quero isso.
slideshowp2
7

Para resolver isso:

Solução 1: primeiro encontre a vulnerabilidade: Usando seu terminal: faça cd em seu projeto e execute "npm ls hoek"

E finalmente: npm install bcrypt @ latest

Em seguida, envie o projeto atualizado para git (ou seja, execute um novo commit).

Solução 2:

se a primeira opção / solução não resolver o problema. Altere a versão manualmente em seu pacote-lock.json. Altere sua versão manualmente de 2.16.3 para 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

Em seguida, atualize seu projeto no GitHub (commit / push) Apenas certifique-se de que cada ocorrência de versão hoek em sua versão package-lock.json seja alterada para 4.2.1

Alternativamente, se você descobrir uma maneira de alterar a versão hoek / atualizar hoek usando npm, tornará as coisas muito mais simples. (Algo como: npm update @ hoek..version ) .. ou desinstalar a dependência específica e reinstalá-la usando bower ou npm.

RileyManda
fonte
4

Eu estava tendo o mesmo problema com uma vulnerabilidade de segurança lodash, em um projeto que estava construindo com fio. Github sinalizou isso como questões de segurança.

Tentei a resposta de @rileymanda acima, usando um terminal: cd para o projeto e depois execute npm ls lodash.

Isso revelou que, no meu caso, o erro estava nos scripts de reação . O Quick Google para problemas com scripts de reação e lodash descobriu que esse era um problema conhecido.

Tentei várias coisas para consertar com fio - tudo sem sucesso. npm ls lodashainda mostrava a versão vulnerável de lodash em uso.

Depois de ler o blog de Matt Turnbull sobre melhorias no npm , mudei de yarn de volta para npm. (Excluir yarn.lock, excluir ./node_modules. Executar npm install). npm ls lodashagora mostrou as últimas versões de dependência sendo usadas - viva! Comprometido com o github, agora estava feliz porque a vulnerabilidade havia sumido.

Parece que o Yarn está lutando para resolver esses problemas (ou não é essa a intenção).

Se você está tendo esse problema ao construir com fio, tente alternar [voltar] para npm!

JohnSk
fonte
3

No meu entendimento, não é uma boa prática excluir o arquivo package-lock.json e gerá-lo novamente.

No entanto, isso é o que geralmente é feito neste caso.
Veja, por exemplo, o problema angular / angular-cli 8534 , que foi resolvido pelo PR 8535 .
Isso leva um projeto dependente frees-io/freestyle-opscenter-webclienta atualizar seu package-lock.json: PR 31 .

VonC
fonte
A regeneração de package-lock.json parece não resolver o problema
xianshenglu
@xianshenglu OK, vou deixar a resposta aqui, caso ajude outras pessoas.
VonC
Estou recebendo o aviso de bloqueio de pacote em um commit antigo. Como diabos vou consertar algo na história sem reescrevê-lo?
desagradável
@destoryer Que eu não sei: tente fazer uma nova pergunta com mais detalhes (SO, versão do npm, ...)
VonC
1
Isso resolveu meu problema. Obrigado pela dica.
Rica
1

vulnerabilidades de segurança conhecidas e devem ser atualizados.

Desde 23 de maio de 2019, agora você tem " Dependabot: correções de segurança automatizadas "

Por meio da integração do Dependabot, lançamos correções de segurança automatizadas como uma versão beta pública.

Correções de segurança automatizadas são solicitações de pull geradas pelo GitHub para corrigir vulnerabilidades de segurança.
Eles automatizam uma parte tediosa do fluxo de trabalho e tornam mais fácil para os desenvolvedores manterem suas dependências atualizadas.

Veja mais em " Configurando correções de segurança automatizadas "

Nota: Correções de segurança automáticas estão disponíveis em beta e estão sujeitas a alterações.

Você pode habilitar correções de segurança automáticas para qualquer repositório que use alertas de segurança e o gráfico de dependência.
Ativaremos automaticamente as correções de segurança automáticas em todos os repositórios que usam alertas de segurança e o gráfico de dependência nos próximos meses, a partir de maio de 2019.

VonC
fonte
Tive resultados mistos com aquele bot. Eu prefiro fazer manualmente npm audite / ou npm audit fix.
Fuhrmanator
@Fuhrmanator OK. Você mencionou medium.com/coinmonks/… em um comentário anterior?
VonC
0

Isso funciona para mim. desinstale todas as suas dependências e instale-o novamente

Por exemplo

em package.json veja a lista de suas dependências

{
"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 o comando para isso

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
fonte
0
  1. No GitHub, navegue até a página principal do repositório.
  2. No nome do seu repositório, clique em Segurança.
  3. Clique no alerta que deseja visualizar.
  4. Revise os detalhes da vulnerabilidade e, se disponível, a solicitação pull contendo a correção de segurança automatizada.
  5. Opcionalmente, se ainda não houver uma correção de segurança automatizada para o alerta, para criar uma solicitação pull para resolver a vulnerabilidade, clique em Criar correção de segurança automatizada.
  6. Quando você estiver pronto para atualizar sua dependência e resolver a vulnerabilidade, mescle a solicitação pull.

Veja detalhes

MD SHAYON
fonte
0

tente npm audit fix, vai resolver muitos avisos

então npm i [package.name]@xxx

por exemplo:

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

npm i [email protected]

Jun Du
fonte