
Prova de conceito demonstrando uma travessia de caminho por hardlink no pacote npm tar, permitindo a sobrescrita de arquivos fora do diretório de extração por meio de arquivos manipulados.
Pesquisa: Joshua van Rijswijk
Este repositório contém uma Prova de Conceito (PoC) para a CVE-2026-29786, uma vulnerabilidade no pacote npm tar que permite que um arquivo malicioso crie um hardlink apontando para fora do diretório de extração pretendido.
O problema ocorre quando um arquivo tar contém um alvo de link relativo à unidade como C:../target.txt. Devido à ordem em que a biblioteca realiza a validação e a normalização de caminhos durante a extração, a proteção contra travessia pode ser contornada.
Após a normalização, o caminho se torna ../target.txt, permitindo que o alvo do link escape do diretório de extração configurado.
Quando o arquivo extraído é gravado, o arquivo externo é modificado porque ambos os caminhos referenciam o mesmo hardlink.
A vulnerabilidade ocorre na lógica de extração responsável por lidar com caminhos absolutos (Unpack[STRIPABSOLUTEPATH]).
A detecção de travessia é realizada antes da remoção do caminho absoluto.
Exemplo de valor de cabeçalho malicioso
linkpath: C:../target.txt
Comportamento do processamento:
O caminho é dividido em segmentos para a detecção de travessia.
A verificação de travessia procura por segmentos "..".
Como o segmento aparece como "C:..", a verificação não é acionada.
A função stripAbsolutePath() remove posteriormente o prefixo da unidade (C:).
O caminho resultante se torna:
../target.txt
Isso permite que o caminho escape da raiz de extração pretendida.
Um atacante pode sobrescrever arquivos fora do diretório de extração com os privilégios do processo que realiza a extração.
Cenários reais potenciais incluem:
• Ferramentas de CLI que extraem arquivos tar não confiáveis • Pipelines de build que processam artefatos de terceiros • Serviços que importam arquivos tar fornecidos pelo usuário • Gerenciadores de pacotes ou sistemas de plugins que descompactam arquivos
npm install [email protected]
node poc.cjs
O script gera um arquivo tar malicioso e demonstra que gravar no arquivo extraído resulta na sobrescrita de um arquivo fora do diretório de extração.