
CVE-2025-4138 - Escrita arbitrária de arquivos fora do diretório de extração
filter="data" BypassEscrita arbitrária de arquivos fora do diretório de extração através de cadeia de symlink PATH_MAX.
Repórter: Caleb Brown (Google)
O filtro de dados do tarfile do Python valida destinos de symlink usando os.path.realpath(). Quando o caminho resolvido excede PATH_MAX (4096 bytes no Linux), realpath() para silenciosamente de resolver e anexa componentes restantes — incluindo ../ — como strings literais. O filtro vê um caminho seguro; o kernel segue a travessia real.
O exploit constrói um tar com quatro etapas:
a→ddd..., b→ddd...). Infla o caminho resolvido para ~3968 bytes.../ × 16 no final da cadeia. realpath() estoura e não consegue resolver. O kernel volta para a raiz da extração./, e para baixo até o diretório alvo.ssh-keygen -t ed25519 -f /tmp/key -N ""
python3 CVE-2025-4138_tarfile_filter_bypass.py \
-o evil.tar \
-t /root/.ssh/authorized_keys \
-p /tmp/key.pub \
-m 0600
| Flag | Descrição |
|---|---|
-o |
Apenas para uso autorizado em testes de segurança e CTF.
| Caminho do tar de saída |
-t | Caminho absoluto do arquivo a escrever no alvo |
-p | Arquivo local a usar como conteúdo do payload |
-m | Permissões de arquivo octal (padrão: 0644) |