A empresa GitHub divulgou detalhes sobre sete vulnerabilidades nos pacotes tar e @npmcli/arborist, que fornecem funções para trabalhar com arquivos tar e calcular a árvore de dependências no Node.js. As vulnerabilidades permitem que, ao descompactar um arquivo especialmente formatado, arquivos fora do diretório raiz onde a descompactação ocorre sejam sobrescritos, conforme permitido pelas permissões de acesso atuais. Os problemas possibilitam a execução de código arbitrário no sistema, por exemplo, através da adição de comandos em ~/ .bashrc ou ~/ .profile durante a operação por um usuário não privilegiado ou pela substituição de arquivos do sistema ao ser executado com privilégios de root.
O perigo das vulnerabilidades é agravado pelo fato de que o código problemático é utilizado no gerenciador de pacotes npm durante operações com pacotes npm, permitindo que um ataque seja direcionado aos usuários ao hospedar um pacote npm especialmente formatado em um repositório, cujo processamento na máquina executará o código do invasor. O ataque é possível mesmo ao instalar pacotes no modo "--ignore-scripts", que desabilita a execução de scripts incorporados. No total, o npm é afetado por quatro vulnerabilidades (CVE-2021-32804, CVE-2021-37713, CVE-2021-39134 e CVE-2021-39135) das sete. As duas primeiras estão relacionadas ao pacote tar, e as outras duas ao pacote @npmcli/arborist.
A vulnerabilidade mais crítica, CVE-2021-32804, ocorre porque, ao limpar os caminhos absolutos especificados no arquivo tar, os caracteres repetidos " / " são processados incorretamente — apenas o primeiro caractere é removido, enquanto os demais permanecem. Por exemplo, o caminho " /home/user/.bashrc " será transformado em " home/user/.bashrc ", enquanto o caminho " //home/user/.bashrc " se tornará " /home/user/.bashrc ". A segunda vulnerabilidade, CVE-2021-37713, se manifesta apenas na plataforma Windows e está relacionada à limpeza inadequada de caminhos relativos que incluem um caractere de disco não separado (" C:some\path ") e uma sequência para voltar ao diretório anterior (" C:../foo ").
As vulnerabilidades CVE-2021-39134 e CVE-2021-39135 são específicas para o módulo @npmcli/arborist. O primeiro problema ocorre apenas em sistemas que não diferenciam maiúsculas de minúsculas no sistema de arquivos (macOS e Windows) e permite gravar arquivos em qualquer parte do sistema de arquivos, especificando nas dependências dois módulos ‘»foo»: «file:/some/path»‘ e ‘FOO: «file:foo.tgz»‘, o processamento dos quais resultará na exclusão do conteúdo do diretório /some/path e na gravação do conteúdo de foo.tgz nele. O segundo problema permite sobrescrever arquivos por meio da manipulação de links simbólicos.
As vulnerabilidades foram corrigidas nas versões Node.js 12.22.6 e 14.17.6, npm CLI 6.14.15 e 7.21.0, bem como em versões específicas do pacote tar 4.4.19, 5.0.11 e 6.1.10. Após obter informações sobre o problema no âmbito da iniciativa 'bug bounty', o GitHub pagou US$ 14.500 aos pesquisadores e escaneou o conteúdo do repositório, onde não foram encontradas tentativas de exploração das vulnerabilidades. Para se proteger contra os problemas mencionados, o GitHub também introduziu uma proibição de publicação de pacotes NPM no repositório que incluam links simbólicos, links rígidos e caminhos absolutos.
Fonte: opennet.ru
