Skip to content
KitploitKITPLOIT
FerramentasExploitsBlog
Log in
Enviar
FerramentasExploitsBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
CVE-2025-4138-4517-POC — CVE-2025-4138 / CVE-2025-4517 — Bypass do filtro de symlink PATH_MAX no tarfile do Python | Kitploit
Ferramentas/GitHubGitHub/desertdemons/cve-2025-4138-4517-poc
Escalada de PrivilégiosGeração de PayloadsAnálise de VulnerabilidadesExploraçãoTestes de PenetraçãoAprendizado e EducaçãoExploração de Binários
GitHub

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar
desertdemons/cve-2025-4138-4517-poc

CVE-2025-4138-4517-POC

CVE-2025-4138 / CVE-2025-4517 — Bypass do filtro de symlink PATH_MAX no tarfile do Python

Ver Repositório
17214há 3 mesesAinda não revisado

CVE-2025-4138 CVE-2025-4517 CVSS 9.4 Python Afetado

CVE-2025-4138 / CVE-2025-4517
Bypass de filtro do Python tarfile via escape de symlink PATH_MAX

Escrita arbitrária de arquivos através da extração com filter="data" / filter="tar"

Tipo CWE-22 Plataforma Linguagem Licença Estrelas Forks Último Commit


Índice

  • Visão Geral
  • Detalhes da Vulnerabilidade
  • Como Funciona
  • Versões Afetadas
  • Padrão de Código Afetado
  • Instalação
  • Uso
    • Início Rápido — Injeção de Chave SSH
    • Ataques Predefinidos
    • Alvo Personalizado
  • Prova de Conceito — Verificação Segura
  • Análise Técnica Aprofundada
    • PATH_MAX e os.path.realpath()
    • Construção da Cadeia de Symlinks
    • Mecanismo de Bypass do Filtro
    • Estágios de Exploração
  • Cenários de Ataque no Mundo Real
  • Detecção
  • Mitigação
  • CVEs Relacionados
  • Linha do Tempo
  • Referências
  • Créditos
  • Aviso Legal
  • Licença

Visão Geral

Uma vulnerabilidade crítica no módulo tarfile do Python permite que um atacante contorne os filtros de extração ("data" e "tar") e escreva arquivos arbitrários fora do diretório de extração pretendido. Quando um processo privilegiado (por exemplo, um script de backup em nível de root, pipeline de CI/CD ou instalador de pacotes) extrai um arquivo tar controlado pelo atacante usando o parâmetro supostamente seguro filter="data", este exploit alcança escrita arbitrária completa de arquivos como esse usuário privilegiado — normalmente escalando para root.

A causa raiz é uma peculiaridade comportamental em os.path.realpath(): ela silenciosamente interrompe a resolução de symlinks quando o caminho totalmente expandido excede PATH_MAX (4096 bytes no Linux, 1024 no macOS). O filtro do tarfile depende de realpath() para verificações de segurança, mas o kernel resolve symlinks de forma independente durante a extração — criando uma janela TOCTOU (Time-of-Check-to-Time-of-Use) que possibilita a fuga do diretório.


Detalhes da Vulnerabilidade

CampoValor
IDs CVECVE-2025-4138, CVE-2025-4517
CVSS v3.19.4 (Crítico) — AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:L
CWECWE-22 — Limitação Imprópria de um Nome de Caminho a um Diretório Restrito
Tipo de VulnerabilidadePath Traversal via Symlink / Bypass de Filtro
ImpactoEscrita arbitrária de arquivos → escalonamento de privilégios, escape de sandbox, adulteração de dados
Vetor de AtaqueEntregar um arquivo tar malicioso a qualquer aplicação que use tarfile.extractall() com filtros
AfetadoPython 3.12.0 – 3.12.10, 3.13.0 – 3.13.3
Corrigido EmPython 3.9.23, 3.10.18, 3.11.13, 3.12.11, 3.13.4
CorreçãoCPython PR #135037
AvisoGHSA-hgqp-3mmf-7h8f
RelatorCaleb Brown — Google Security Research

Como Funciona```

                ┌───────────────────────────────────────────┐
                │         Malicious Tar Structure            │
                └───────────────────────────────────────────┘

Stage 1 ── Build symlink chain that inflates the resolved path past PATH_MAX

ddd...ddd/              (directory, 247 chars)
a  →  ddd...ddd         (symlink,   1 char name → 247 char dir)
ddd...ddd/ddd...ddd/    (nested directory)
b  →  ddd...ddd         (symlink)
...  ×16 levels

Short path (symlinks):   a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p       ~31 chars
Resolved path (dirs):    ddd…/ddd…/ddd…/ddd…/ddd…/ddd…/…      ~3968 chars
                                                           ↑ nearing PATH_MAX

Stage 2 ── Final symlink exceeds PATH_MAX → realpath() stops resolving

a/b/c/…/p/lll…lll  →  ../../../../../../../../../../../../../../../../..
                        (16 levels of ".." — traverses back to extraction root)

┌─────────────────────────────────────────────────────────────────┐
│  os.path.realpath()  CANNOT expand this  →  filter says "OK" ✓ │
│  Linux kernel         DOES follow chain  →  actually escapes ✗ │
└─────────────────────────────────────────────────────────────────┘

Stage 3 ── Escape symlink resolves to arbitrary filesystem path

escape  →  <overflow_link>/../../../../../../../root

Stage 4 ── Create intermediate directories through the escape

escape/.ssh/            (directory, mode 0700 — created by tar extraction)

Stage 5 ── Write payload through the escaped symlink

escape/.ssh/authorized_keys  →  writes to /root/.ssh/authorized_keys  🔓
---

## Versões Afetadas

| Versão do Python | Intervalo Vulnerável | Versão Corrigida | Status |
|:--|:--|:--|:--|
| 3.13 | 3.13.0 – 3.13.3 | **3.13.4** | ✅ Corrigido |
| 3.12 | 3.12.0 – 3.12.10 | **3.12.11** | ✅ Corrigido |
| 3.11 | 3.11.4 – 3.11.12 | **3.11.13** | ✅ Corrigido |
| 3.10 | 3.10.12 – 3.10.17 | **3.10.18** | ✅ Corrigido |
| 3.9 | 3.9.17 – 3.9.22 | **3.9.23** | ✅ Corrigido |
| 3.8 | 3.8.17 – 3.8.20 | — | ❌ Fim de Vida |
| 3.14+ | Filtro padrão alterado para `"data"` | Verifique a mais recente | ⚠️ Maior exposição |

> **Nota:** O Python 3.14+ alterou o parâmetro padrão `filter` de nenhuma filtragem para `"data"`, o que significa que aplicações que anteriormente não possuíam filtro (e, portanto, já eram inseguras) agora usam o filtro vulnerável por padrão.

---

## Padrão de Código Afetado

Qualquer aplicação que faça isso em uma versão vulnerável do Python é explorável:```python
import tarfile

# VULNERABLE — filter="data" can be bypassed
with tarfile.open("untrusted_archive.tar", "r") as tar:
    tar.extractall(path="/some/directory", filter="data")
Baixar ferramenta