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-2007-4559-lab — Laboratório Docker autocontido demonstrando a travessia de diretório CVE-2007-4559 (TarSlip) via o módulo tarfile do Python. Inclui APIs vulneráveis e corrigidas, geração de payload e um script de demonstração interativo para educação em segurança. | Kitploit
Ferramentas/GitHubGitHub/jithinodattu/cve-2007-4559-lab
Análise EstáticaAnálise de VulnerabilidadesAnálise de CódigoExploração de Aplicações WebCTFSegurança da Cadeia de SuprimentosAprendizado e EducaçãoExploração de BináriosLabs e Prática
GitHubjithinodattu/cve-2007-4559-lab

CVE-2007-4559-lab

Laboratório Docker autocontido demonstrando a travessia de diretório CVE-2007-4559 (TarSlip) via o módulo tarfile do Python. Inclui APIs vulneráveis e corrigidas, geração de payload e um script de demonstração interativo para educação em segurança.

Ver Repositório
15há 5 mesesAinda não revisado

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

CVE-2007-4559 — TarSlip: A travessia de diretórios de 15 anos

Apenas para uso educacional. Este laboratório explora intencionalmente vulnerabilidades do sistema de arquivos dentro de contêineres Docker isolados. Não execute em nenhum sistema com dados sensíveis ou em ambientes de produção.

Um laboratório Docker autocontido que demonstra CVE-2007-4559 — a infame vulnerabilidade "TarSlip" no módulo tarfile do Python — através de uma cadeia de ataque concreta, de ponta a ponta:

  1. Um atacante envia um tarball malicioso para uma API de upload de arquivos.
  2. extractall() escreve cegamente uma entrada tar nomeada ../../../etc/passwd fora do diretório de extração, sobrescrevendo o arquivo real do sistema.
  3. A senha plantada concede ao atacante acesso a um endpoint /admin protegido.
  4. O mesmo ataque é então executado contra uma API corrigida — e bloqueado com uma linha de código.

A vulnerabilidade

tarfile.extractall() do Python reproduz fielmente todas as entradas de um arquivo tar, incluindo entradas cujos nomes contêm sequências de travessia de diretório ../. Ele nunca foi projetado para ser uma fronteira de segurança.

nome da entrada tar : ../../../etc/passwd
diretório de extração : /shared/uploads/a1b2c3d4/

caminho resolvido  : /shared/uploads/a1b2c3d4/../../../etc/passwd
               = /etc/passwd   ← arquivo do sistema sobrescrito
Linha do tempo
2007Bug reportado à equipe de segurança do Python
2007 – 2022Marcado como "não é um problema de segurança" — tarfile está "funcionando conforme o esperado"
2022Pesquisadores da Trellix escaneiam GitHub e encontram mais de 350.000 repositórios chamando extractall() em entrada não confiável
2022Divulgação pública. CVE-2007-4559 ressurge. Correria em toda a indústria.
2023PEP 706 envia filter='data' no Python 3.12 — a correção é um único argumento

O que a demonstração mostra

A demonstração é executada em três movimentos, cada um exigindo uma tecla para avançar.

Movimento 1 — Linha de Base

  • GET /admin → 401. O endpoint admin existe e está protegido. O atacante não sabe a senha.
  • Upload de innocent.tar.gz → os arquivos caem dentro do diretório sandbox. Tudo parece normal.

Movimento 2 — O Exploit

Atacante cria tarslip_passwd.tar.gz
  └─ entrada: "../../../etc/passwd"
       conteúdo: admin:hacked:1001:...   ← senha plantada
            │
            ▼
  POST /upload  (upload de arquivo multipart)
            │
            ▼
  extractall("/shared/uploads/{uuid}/")
  resolve "../../../etc/passwd" → /etc/passwd   ← CVE-2007-4559
            │
            ▼
  GET /admin   Authorization: Basic admin:hacked
            │
            ▼
  HTTP 200 — "Welcome, admin! You have full admin access."
  flag: CVE-2007-4559{tarslip_passwd_overwrite_to_admin_rce}

Um único HTTP POST. Nenhum shell. Nenhum payload RCE. Apenas um arquivo tar.

Movimento 3 — A Correção

O mesmo tarball é enviado para a API corrigida, que passa filter='data' para extractall(). O Python lança tarfile.OutsideDestinationError — a travessia é bloqueada, /etc/passwd permanece intocado e /admin permanece bloqueado.

# Vulnerável — padrão antes do Python 3.14
tar.extractall(extraction_dir)

# Corrigido — PEP 706 (Python 3.12+)
tar.extractall(extraction_dir, filter='data')

Um argumento. Quinze anos para ser enviado.


Arquitetura

Quatro serviços em uma rede bridge Docker isolada (tarslip-net). Nada alcança a internet.

┌─────────────────────────────────────────────────────────┐
│                    tarslip-net (bridge)                  │
│                                                          │
│  ┌─────────────────┐      ┌──────────────────────────┐  │
│  │  vulnerable-api │      │       file-server        │  │
│  │  python:3.11.3  │      │       nginx:alpine       │  │
│  │  porta 8000      │      │       porta 8080 (host)   │  │
│  │                 │      │                          │  │
│  │  POST /upload   │      │  Serve /shared via       │  │
│  │  GET  /admin    │      │  HTTP — navegue pelas    │  │
│  │  GET  /health   │      │  extrações visualmente   │  │
│  └────────┬────────┘      └────────────┬─────────────┘  │
│           │  volume shared-storage     │                 │
│           └────────────────────────────┘                 │
│                                                          │
│  ┌─────────────────┐                                     │
│  │    attacker     │                                     │
│  │  python:3.12    │  (sem porta no host — apenas interno)│
│  │                 │                                     │
│  │  craft_malicious.py  — gera tarballs                  │
│  │  demo.py             — conduz a demonstração          │
│  └─────────────────┘                                     │
└─────────────────────────────────────────────────────────┘
ServiçoImagemFunçãoPorta do host
vulnerable-apipython:3.11.3-slimAPI Flask de upload + /admin protegido por autenticação /etc/passwd8000
fixed-apipython:3.12-slimMesmo código + USE_SAFE_EXTRACTION=true8000
file-servernginx:alpineListagem de diretório dos arquivos extraídos8080
attackerpython:3.12-slimGerador de payload + condutor da demonstração—

As APIs vulnerável e corrigida usam código-fonte idêntico. A única diferença é a variável de ambiente USE_SAFE_EXTRACTION=true no contêiner corrigido, que ativa o único argumento filter='data'.


Estrutura do repositório

CVE-2007-4559-lab/
├── run_demo.sh                      ← comece aqui
├── docker-compose.vulnerable.yml
├── docker-compose.fixed.yml
├── vulnerable-api/
│   ├── app.py                       # API Flask: /upload + /admin + /health
│   ├── Dockerfile                   # insere admin:s3cr3t_Adm1nPass no /etc/passwd
│   └── requirements.txt
├── file-server/
│   ├── Dockerfile
│   └── nginx.conf
└── attacker/
    ├── craft_malicious.py           # gera innocent.tar.gz + tarslip_passwd.tar.gz
    ├── demo.py                      # driver CLI com quatro modos (craft/baseline/exploit/verify)
    ├── Dockerfile
    └── requirements.txt

Pré-requisitos

  • Docker 20.10+ com o plugin Compose (docker compose version)
  • macOS / Linux — o script shell usa bash
  • Portas 8000 e 8080 livres no seu host

Executando a demonstração

git clone https://github.com/seu-usuario/CVE-2007-4559-lab.git
cd CVE-2007-4559-lab
bash run_demo.sh

O script é totalmente interativo. Ele imprime uma narrativa antes de cada etapa e aguarda Enter para avançar. Nenhum conhecimento prévio de Docker é necessário para acompanhar.

O que cada ponto de pausa cobre

PausaNarrativa exibidaAção ao pressionar Enter
1Linha do tempo CVE, o que são os três movimentosConstrói pilha vulnerável
2Funções dos contêineres, senha admin inseridaGera payloads
3O que há dentro de cada tarballMovimento 1 — linha de base
4Por que /admin é 401, como é a extração normalMovimento 2 — exploit
5A matemática exata da travessia, o que é sobrescritoTroca para pilha corrigida
6O que filter='data' faz e por que funcionaMovimento 3 — verificação
7Principais conclusões + padrão ZipSlip mais amploDesmontagem

Executando movimentos individualmente

Se quiser avançar manualmente:

# Pilha vulnerável
docker compose -f docker-compose.vulnerable.yml up --build -d
docker compose -f docker-compose.vulnerable.yml exec attacker python craft_malicious.py
docker compose -f docker-compose.vulnerable.yml exec attacker python demo.py baseline
docker compose -f docker-compose.vulnerable.yml exec attacker python demo.py exploit
Baixar ferramenta