
PoC para CVE-2025-62518 demonstrando contrabando de arquivos tar via análise de cabeçalho PAX do tokio-tar, criando payloads maliciosos e um extrator vulnerável para mostrar injeção na cadeia de suprimentos.
Vídeo: https://youtu.be/EYBB4BHsp9E
./outputmalicious.tar simples com alguns exemplos de conteúdo contrabandeado, comentários explicam o que está sendo feito passo a passo e bloco a blocoUse o script de reprodução fornecido ou faça manualmente
Execute malicious-payload para gerar o payload
malicious.tarPassar este arquivo para nosso aplicativo vulnerable-extract resulta em:
/vulnerable-extract$ ll output/
total 12
drwxrwxr-x 2 airinei airinei 4096 Jan 19 22:40 ./
drwxrwxr-x 5 airinei airinei 4096 Jan 19 22:40 ../
-rw-rw-r-- 1 airinei airinei 0 Jan 1 1970 benign_file.txt
-rw-rw-r-- 1 airinei airinei 18 Jan 1 1970 sh_profile_hijack
Enquanto executamos o utilitário tar fornecido pelo nosso SO ((GNU tar) 1.35 neste caso) resulta em:
malicious-payload$ tar -tvf malicious.tar
---------- 0/0 1024 1970-01-01 02:00 benign_file.txt
Note que ele vê que o tamanho do arquivo é 1024
Alternativamente, usando astral-tokio-tar 0.5.6 em vez do abandonado tokio-tar 0.3.1 extrai o arquivo corretamente.
CVE-2025-62518 (TARmageddon) é uma vulnerabilidade de segurança encontrada na biblioteca Rust tokio-tar (vulnerabilidade Rust 😮). Este é um erro lógico na forma como os cabeçalhos do formato tar são analisados, permitindo que um atacante contrabandeie arquivos.
A falha existe na lógica de manipulação dos Cabeçalhos Estendidos PAX. Em um arquivo TAR, existem diferentes tipos de cabeçalho:
USTAR: O cabeçalho padrão contendo nome do arquivo, permissões e tamanho.PAX (Tipo x): Um cabeçalho de extensão usado para fornecer metadados (como um tamanho de arquivo muito grande) para o próximo arquivo no archive.Quando um cabeçalho PAX está presente, um analisador deve resolver o tamanho real do arquivo priorizando os metadados PAX sobre o cabeçalho USTAR padrão.
Mas POR QUE existem 2 tipos de cabeçalhos que têm prioridades para o que parece ser a mesma coisa? Porque o formato TAR é antigo (padronizado em 1988), e USTAR tem suas limitações (tamanho de até 8GB, nome de arquivo de até 256 caracteres). Isso é um problema, então o cabeçalho PAX foi adicionado em 2001 para permitir arquivos maiores e nomes de arquivo mais longos.
Em versões vulneráveis do tokio-tar, o analisador adota corretamente o tamanho do cabeçalho PAX para o leitor de conteúdo do arquivo, mas usa incorretamente o tamanho do cabeçalho USTAR para determinar onde o próximo cabeçalho de arquivo começa.
O cerne do problema é uma incompatibilidade de ponteiro. Quando a biblioteca vulnerável processa um arquivo, ela usa duas 'cabeças' internas diferentes para ler o fluxo:
Em um arquivo normal, essas duas cabeças concordam. Em TARmageddon, nós as forçamos a discordar. Ao definir o tamanho PAX como 1024 e o tamanho USTAR como 0, criamos um paradoxo:
benign_file.txt.0 no cabeçalho USTAR e pensa, "Já estou no final do arquivo." Ela permanece exatamente onde está.Consequentemente, a Cabeça do Analisador trata os dados dentro do bloco de 1024 bytes como o próximo conjunto de instruções. Se esses dados parecerem um cabeçalho TAR válido, a biblioteca 'descobrirá' e extrairá um segundo arquivo que tecnicamente não existe de acordo com a estrutura global do arquivo.
O Payload de Contrabando:
O payload é criado como uma sequência de blocos de 512 bytes. Aqui está o layout usado no gerador malicious-payload:
| Bloco | Função | Descrição |
|---|---|---|
| 1 e 2 | Metadados PAX | Afirma que o próximo arquivo tem 1024 bytes de comprimento. |
| 3 | Cabeçalho Base | benign.txt. Crucialmente define o tamanho como 0. |
| 4 | Cabeçalho Contrabandeado | backdoor.sh. Oculto dentro da área de 'dados'. |
| 5 | Dados Contrabandeados | O conteúdo malicioso (ex.: aliases de shell). |
| 6 e 7 | EOF | Terminação padrão de bloco nulo. |
Como as ferramentas padrão (como GNU tar) seguem corretamente o tamanho PAX, elas veem os Blocos 4 e 5 como dados binários inofensivos pertencentes a benign_file.txt. Elas nunca 'executam' o cabeçalho no Bloco 4.
Como essa crate com uma vulnerabilidade pode ser explorada, por que um arquivo contrabandeado em um archive importa?
Um atacante contrabandeia arquivos maliciosos para um sistema de build. Extrair isso seja para desenvolvimento ou em uma máquina de CI pode sobrescrever arquivos de build legítimos, comprometendo essa máquina e até enganando o sistema de build para assinar arquivos maliciosos.
Um scanner inspeciona um .tar, escaneando-o apenas no modo correto, arquivos indesejados podem estar presentes na extração, mas não foram escaneados.
Inspirado por este writeup