Como consertar vulnerabilidades npm manualmente?

98

Quando eu corro npm install, diz found 33 vulnerabilities (2 low, 31 moderate) run `npm audit fix` to fix them, or `npm audit` for details.

No entanto, npm audit fixsaídasup to date in 11s fixed 0 of 33 vulnerabilities in 24653 scanned packages 33 vulnerabilities required manual review and could not be updated

Isso reviewsignifica que não deve ser consertado pelo usuário?

Quando eu executo, npm auditele me dá uma lista de tabelas, semelhante a esta:

┌───────────────┬──────────────────────────────────────────────────────────────┐
│ Low           │ Prototype Pollution                                          │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package       │ lodash                                                       │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Patched in    │ >=4.17.5                                                     │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ browser-sync [dev]                                           │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path          │ browser-sync > easy-extender > lodash                        │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info     │ https://nodesecurity.io/advisories/577                       │
└───────────────┴──────────────────────────────────────────────────────────────┘

Neste exemplo, a seção de correção da página vinculada diz Update to version 4.17.5 or later.. No entanto, /node_modules/browser-sync/package.jsonexistem linhas:

"devDependencies": {
    "lodash-cli": "4.17.5",
}

e não mais dependências de lodash. Portanto, já deve ser v4.17.5. Eu também verifiquei /node_modules/lodash/lodash.jsonqual tem var VERSION = '4.17.10';linha. No /node_modules/lodash/package.jsonexistem estas linhas:

  "_from": "lodash@^4.17.4",
  "_id": "[email protected]",

Eu acredito que a versão mostrada em "_id", não em "_from", então as versões estão corretas, mas a vulnerabilidade ainda aparece na lista de auditoria.

Ainda sou novo no node.js e essas mensagens me confundem muito. Existe alguma maneira de consertar manualmente ou me livrar dessas mensagens, com as quais não posso fazer nada?

Jakupov
fonte

Respostas:

35

lodash-cliem devDependenciesnão afeta como browser-syncfunciona em seu projeto, devDependenciessão ignorados quando um pacote é instalado como uma dependência.

O que o auditrelatório diz é easy-extenderque tem lodashdependência:

browser-sync > easy-extender > lodash        

Ele depende Lodash 3 , enquanto o problema foi corrigido no Lodash 4. O problema poderia ser corrigido por bifurcação easy-extender, atualizá-lo e instalá-lo em vez do pacote de registro público NPM. Mas não há nenhum problema real com essa dependência.

audita importância do relatório deve ser avaliada manualmente. Mesmo que a dependência aninhada tenha risco de segurança, isso não significa que um recurso que apresenta esse risco foi usado. Isso também não significa que, mesmo se usado, apresenta risco real devido à forma como é usado.

browser-syncé uma ferramenta de desenvolvimento que não é usada na produção, não há tantos cenários onde suas vulnerabilidades possam ser exploradas. E o Prototype Pollution não é uma vulnerabilidade, apenas um aviso de que um pacote não segue as boas práticas, pode ser ignorado.

Geralmente, esta é a maneira de corrigir as vulnerabilidades relatadas:

  • Faça uma verificação de sanidade
  • Caso seja um problema real, verifique o repositório do pacote vulnerável para problemas existentes e PRs
  • Caso não haja nenhum, envie um problema
  • Bifurque um repositório ou use o PR existente como dependência git até que seja corrigido na versão do NPM
  • No caso de dependências aninhadas, faça isso em vários níveis de aninhamento

Na maioria das vezes, espera-se que você não vá além de uma verificação de sanidade.

patch-packagepode ajudar a corrigir dependências aninhadas no local, mas isso não afetará o auditrelatório.

Estus Flask
fonte
Eu não prestei atenção à seção Path, e ela realmente usa Lodash v3.10.1, obrigado. Mas a sincronização do navegador é apenas um exemplo, o último da lista. Portanto, posso ignorar 2 vulnerabilidades baixas, mas posso ignorar 31 vulnerabilidades moderadas? Suponho que não deva modificar nada no node_modules, então bifurcar e consertar é a única maneira de se livrar deles? E como novo usuário, não tenho capacidade para fazer isso? Devo enviar aos desenvolvedores de pacotes sobre eles?
Jakupov
4
mas posso ignorar 31 moderados? - é disso que se trata a 'verificação de sanidade', use seu julgamento. Quanto mais atenção você presta ao que esses relatórios realmente dizem, melhor desenvolvedor você pode se tornar, em termos de segurança. Devo enviar aos desenvolvedores de pacotes sobre eles? - você provavelmente deveria (pelo menos para calar a boca audit), a resposta responde a isso. As pessoas viviam sem npm auditalguma forma. As chances de que causem problemas reais de segurança ao aplicativo são muito baixas, mas sem saber o que são e como são usados ​​em seu aplicativo, não posso garantir isso.
Estus Flask
Obrigado! Demorou para escrever o comentário, então não vi a parte editada antes de comentar.
Jakupov
6

Se você estiver absolutamente certo de que deseja pular a auditoria, pode fazê-lo anexando --no-audit

 npm install --no-audit
Tjad Clark
fonte
3

'npm audit fix' irá incrementar a versão da dependência no package.json, o que pode levar à quebra do código. Portanto, a melhor maneira é abrir o package-lock.json e atualizar as versões de dependência / subdependência para a versão necessária. Mantenha o pacote-lock.json no repositório.

Às vezes, as vulnerabilidades são de pacotes de desenvolvimento. Nesse caso, ignore essas vulnerabilidades, pois elas não estão sendo detectadas na produção.

nik
fonte
-3

A maior parte do problema ocorrido no meu sistema foi devido ao pacote npm. Eu tentei,

npm un npm

Você não precisa instalar novamente.

Basta executar o programa novamente. Funcionou para mim

Gaurav Rana
fonte