Vulnerabilidade no NPM que leva à substituição de arquivos no sistema

O GitHub revelou detalhes de sete vulnerabilidades nos pacotes tar e @npmcli/arborist, que fornecem funções para trabalhar com arquivos tar e calcular a árvore de dependências em Node.js. As vulnerabilidades permitem, ao descompactar um arquivo especialmente projetado, sobrescrever arquivos fora do diretório raiz no qual a descompactação é realizada, na medida em que os direitos de acesso atuais permitirem. Os problemas permitem organizar a execução de código arbitrário no sistema, por exemplo, adicionando comandos a ~/.bashrc ou ~/.profile quando uma operação é executada por um usuário sem privilégios, ou substituindo arquivos do sistema ao executar como raiz.

O perigo de vulnerabilidades é agravado pelo fato de o código problemático ser utilizado no gerenciador de pacotes npm ao realizar operações com pacotes npm, o que permite organizar um ataque aos usuários colocando um pacote npm especialmente projetado no repositório, o processamento dos quais executará o código do invasor no sistema. O ataque é possível mesmo ao instalar pacotes no modo “-ignore-scripts”, que desativa a execução de scripts integrados. No total, o npm afeta quatro vulnerabilidades (CVE-2021-32804, CVE-2021-37713, CVE-2021-39134 e CVE-2021-39135) de sete. Os dois primeiros problemas dizem respeito ao pacote tar, e os dois restantes dizem respeito ao pacote @npmcli/arborist.

A vulnerabilidade mais perigosa, CVE-2021-32804, é causada pelo fato de que, ao limpar caminhos absolutos especificados em um arquivo tar, caracteres “/” duplicados são processados ​​incorretamente – apenas o primeiro caractere é removido, enquanto o restante permanece. Por exemplo, o caminho "/home/user/.bashrc" será convertido para "home/user/.bashrc" e o caminho "//home/user/.bashrc" para "/home/user/.bashrc". A segunda vulnerabilidade, CVE-2021-37713, aparece apenas na plataforma Windows e está associada à limpeza incorreta de caminhos relativos que incluem um caractere de unidade indelimitado (“C:some\path”) e uma sequência para retornar ao diretório anterior ( “C:../foo”) .

As vulnerabilidades CVE-2021-39134 e CVE-2021-39135 são específicas do módulo @npmcli/arborist. O primeiro problema aparece apenas em sistemas que não distinguem maiúsculas e minúsculas de caracteres no sistema de arquivos (macOS e Windows) e permite gravar arquivos em uma parte arbitrária do sistema de arquivos especificando dois módulos '"foo" entre as dependências : "file:/some/path"' e ' FOO: "file:foo.tgz"', cujo processamento levará à exclusão do conteúdo do diretório /some/path e à gravação do conteúdo de foo.tgz nele. O segundo problema permite que os arquivos sejam sobrescritos através da manipulação de links simbólicos.

As vulnerabilidades são resolvidas nas versões 12.22.6 e 14.17.6 do Node.js, npm CLI 6.14.15 e 7.21.0 e nas versões individuais do pacote tar 4.4.19, 5.0.11 e 6.1.10. Depois de receber informações sobre o problema como parte da iniciativa “bug bounty”, o GitHub pagou aos pesquisadores US$ 14500 e examinou o conteúdo do repositório, que não revelou tentativas de explorar vulnerabilidades. Para se proteger contra esses problemas, o GitHub também proibiu a publicação de pacotes NPM que incluem links simbólicos, links físicos e caminhos absolutos para o repositório.

Fonte: opennet.ru

Adicionar um comentário