Skip to main content

Vulnerabilidade grave de segurança na extração de arquivos ZIP do Bower

Escrito por
Severe Security Vulnerability in Bowers Zip and Tar Archive Extraction tumb

31 de janeiro de 2019

0 minutos de leitura

No início deste mês, foi descoberto que o Bower, um gerenciador de pacotes web popular, está vulnerável durante a extração de arquivos compactados. Até o momento, identificamos dois incidentes de segurança relacionados a ele, e já há versões com correções disponíveis:

  • Gravações arbitrárias de arquivos, com potencial para injeção de comandos remota, foram corrigidas no Bower 1.8.6. O problema foi causado pelas vulnerabilidades Zip Slip encontradas na dependência Zip Slip decompress-zip, uma dependência de código aberto usada pelo Bower.

  • Gravações arbitrárias de arquivos causadas por vulnerabilidades em links simbólicos (symlinks) em arquivos .tar.gz — exploráveis devido à forma como o Bower extrai esses arquivos — foram corrigidas no Bower 1.8.8.

O Webpack, o yarn e o registro do npm podem ter mudado o cenário para o Bower, mas ele ainda é usado. Embora hoje existam gerenciadores de pacotes mais populares e o npm seja, na prática, o registro padrão para JavaScript, muita gente ainda depende do Bower, que registra quase 2 milhões de downloads por mês. Isso mostra a gravidade desse problema de segurança.

Em 1º de janeiro de 2019, um pesquisador de segurança chamado skyn3t reportou ao grupo de trabalho de segurança do Node.js, no HackerOne, uma gravação arbitrária de arquivos causada pela validação inadequada de symlinks, decorrente da forma como o Bower extrai arquivos tar.

Pouco depois da triagem do bug, Adam Stankiewicz, da equipe principal do Bower, foi convidado a analisar o relatório e confirmou o problema rapidamente. A correção foi incluída na versão 1.8.8 do Bower.

Travessia maliciosa de caminhos durante a extração de arquivos compactados

Se um agente mal-intencionado criasse um arquivo ZIP especialmente preparado para um pacote instalado com o Bower, isso poderia causar uma travessia de caminhos e fazer com que os arquivos fossem extraídos fora do diretório raiz previsto para a descompactação.

A prova de conceito (POC) a seguir vem de um relatório de segurança divulgado por skyn3t ao programa do grupo de trabalho de segurança do Node.js no HackerOne. Ela mostra como o tratamento inseguro de symlinks pode resultar em gravações arbitrárias de arquivos.

O arquivo malicioso do pacote

O arquivo precisa criar um symlink para um diretório e, em seguida, colocar um arquivo nesse diretório de destino. Mas, para reproduzir essa estrutura de diretórios, precisamos criar manualmente um arquivo compactado malicioso.

Vamos começar criando um diretório para o pacote malicioso, um arquivo package.json padrão para o Bower e um symlink para /tmp:

mkdir malicious-package
cd malicious-package
npm init -y
ln -s /tmp mySpecialDirectory

Agora podemos criar um arquivo tar para esse pacote, tomando o cuidado de não compactá-lo:

tar -cvf malicious-package.tar malicious-package
Terminal exibindo comandos que criam um link simbólico e compactam um pacote malicioso contendo package.json e mySpecialDirectory.

A parte complicada é colocar um arquivo sob nosso controle no diretório /tmp e, essencialmente, em mySpecialDirectory/ dentro do arquivo. Esse nome de arquivo já está sendo usado por um link, então não podemos simplesmente reutilizá-lo em nosso próprio sistema de arquivos.

Para contornar esse desafio, vamos recorrer à funcionalidade padrão dos arquivos tar: manipular os dados dentro do arquivo. Arquivos tar permitem atualizar um arquivo existente, por exemplo, adicionando mais arquivos. Assim, podemos criar uma rota de escape.

Vamos excluir o link, criar um diretório em seu lugar e colocar nele nosso próprio arquivo. Em seguida, adicionaremos apenas esse arquivo ao arquivo tar usando a funcionalidade de atualização:

rm mySpecialDirectory
mkdir mySpecialDirectory
echo “abc” > mySpecialDirectory/ssmaliciousFile
cd ..
tar -rvf malicious-package.tar malicious-package/mySpecialDirectory/ssmaliciousFile

Como mostra a captura de tela, o conteúdo do arquivo inclui um symlink para o diretório /tmp e também um link para um arquivo malicioso que criamos:

Terminal exibindo comandos tar que criam um arquivo de pacote malicioso com um diretório vinculado por link simbólico e um arquivo suspeito.

É importante observar que arquivos compactados não podem ser manipulados da mesma forma que arquivos tar. Por isso, vamos compactar o arquivo com gzip agora, depois de prepará-lo para o ataque:

gzip malicious-package.tar

Como iniciar a instalação pelo Bower

Agora que temos um arquivo tar.gz no diretório inicial, em ~/tmp, vamos executar uma instalação do Bower a partir do sistema de arquivos local para demonstrar como o pacote é extraído:

Terminal mostrando o Bower 1.8.7 instalando um pacote malicioso e listando o arquivo /tmp/ssmaliciousFile criado

Como podemos ver, a instalação usa o Bower 1.8.7. Ao instalar o pacote malicioso, o arquivo malicioso sob nosso controle foi instalado no diretório /tmp do sistema.

Como corrigir a vulnerabilidade

O Bower é compatível com estes tipos de arquivo: tar, tar.gz e ZIP. Uma vulnerabilidade semelhante que afetava pacotes ZIP já havia sido corrigida com a correção de decompress-zip, mas tar e tar.gz continuavam vulneráveis.

A correção aplicada para as vulnerabilidades em tar e tar.gz mitigou o problema ao ignorar quaisquer symlinks nos pacotes instalados. Desde então, uma nova versão do Bower, a 1.8.8, foi lançada para que os usuários possam atualizar e reduzir o risco de segurança.

No início de 2018, a equipe de pesquisa de segurança da Snyk cunhou o termo para a vulnerabilidade de segurança Zip Slip após realizar uma pesquisa abrangente sobre exploração durante a extração de arquivos compactados, que pode resultar em gravações arbitrárias de arquivos. Em casos críticos, isso também pode levar à execução remota de comandos e à sobrescrita de arquivos confidenciais de configuração do sistema.

A pesquisa sobre Zip Slip levou à descoberta de milhares de projetos vulneráveis em diversos ecossistemas, incluindo projetos da Apache, Pivotal, Amazon e outras empresas.

Em resumo

Vimos como criar deliberadamente um pacote malicioso capaz de provocar a gravação arbitrária de arquivos. Mas o problema não se limita ao download de pacotes maliciosos. Se um pacote for obtido por um meio inseguro, como uma conexão sem HTTPS, é possível realizar um ataque man-in-the-middle.

Problemas na extração de arquivos não são novidade e podem remontar a um artigo da Phrack de 1991, que explicava como invadir um BBS usando vetores de ataque baseados na extração de arquivos ZIP. É provável que continuemos encontrando vulnerabilidades Zip Slip em bibliotecas e aplicações à medida que as pesquisas nessa área avançarem.

Lembre-se: mesmo que symlinks sejam permitidos, trabalhar com arquivos compactados controlados pelo usuário é perigoso. Trate-os com o devido cuidado, assim como qualquer outra entrada fornecida pelo usuário.

Principais conclusões

  • Atualize para o Bower 1.8.8 o quanto antes.

  • Consulte nossa folha de dicas sobre Zip Slip para ver referências a códigos vulneráveis em diferentes ecossistemas de linguagens de programação e saber como evitar vulnerabilidades semelhantes em seu código.

Leia mais

illustration hero ai
Blog

PHP corrige duas vulnerabilidades críticas de RCE sem autenticação (CVE-2026-109618, CVE-2026-109619): atualize agora

Duas falhas críticas no ciclo de requisições do PHP podem permitir execução remota de código sem autenticação. Atualize para uma versão corrigida ou instale um backport do fornecedor para versões mais antigas.

blog feature ai lilac
Blog

Transforme seu backlog de vulnerabilidades em pull requests com remediação agentiva

O Evo Remediation Agent está em Open Preview e traz a resolução automatizada de dependências para o Evo Agentic AppSec. Agora, as equipes de AppSec podem executar campanhas contínuas de remediação

AI Background min crop
Blog

A IA está acionando todos os riscos que você aceitou: sete insights do painel de segurança de IA sem filtros

A IA está tornando os ataques mais baratos e rápidos, expondo riscos que as organizações já carregam. Quatro líderes de segurança explicam por que a defesa na velocidade das máquinas e a correção mais rápida são essenciais.