Skip to content
KitploitKITPLOIT
HerramientasBlog
Log in
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2007-4559-lab — Laboratorio Docker autocontenido que demuestra la vulnerabilidad de traversal de directorios CVE-2007-4559 (TarSlip) a través del módulo tarfile de Python. Incluye APIs vulnerables y corregidas, generación de payloads y un script de demostración interactivo para educación en seguridad. | Kitploit
Herramientas/GitHubGitHub/jithinodattu/cve-2007-4559-lab
Análisis EstáticoAnálisis de VulnerabilidadesAnálisis de CódigoExplotación de Aplicaciones WebCTFSeguridad de Cadena de SuministroAprendizaje y EducaciónExplotación de BinariosLabs y Práctica
GitHubjithinodattu/cve-2007-4559-lab

CVE-2007-4559-lab

Ver Repositorio
15hace 5 mesesAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →

Acerca de

Laboratorio Docker autocontenido que demuestra la vulnerabilidad de traversal de directorios CVE-2007-4559 (TarSlip) a través del módulo tarfile de Python. Incluye APIs vulnerables y corregidas, generación de payloads y un script de demostración interactivo para educación en seguridad.

Compartir

CVE-2007-4559 — TarSlip: El Ataque de Recorrido de Directorios de 15 Años

Solo con fines educativos. Este laboratorio explota intencionalmente vulnerabilidades del sistema de archivos dentro de contenedores Docker aislados. No lo ejecute en ningún sistema con datos sensibles o en entornos de producción.

Un laboratorio Docker autocontenido que demuestra la CVE-2007-4559 — la infame vulnerabilidad "TarSlip" en el módulo tarfile de Python — a través de una cadena de ataque concreta de principio a fin:

  1. Un atacante sube un tarball manipulado a una API de carga de archivos.
  2. extractall() escribe ciegamente una entrada tar llamada ../../../etc/passwd fuera del directorio de extracción, sobrescribiendo el archivo real del sistema.
  3. La contraseña plantada concede al atacante acceso a un endpoint /admin protegido.
  4. El mismo ataque se ejecuta luego contra una API corregida — y se bloquea con una línea de código.

La vulnerabilidad

tarfile.extractall() de Python reproduce fielmente cada entrada en un archivo tar, incluyendo aquellas cuyos nombres contienen secuencias de recorrido de directorio (../). Nunca fue diseñado para ser un límite de seguridad.

nombre de entrada tar : ../../../etc/passwd
directorio de extracción : /shared/uploads/a1b2c3d4/

ruta resuelta  : /shared/uploads/a1b2c3d4/../../../etc/passwd
               = /etc/passwd   ← archivo del sistema sobrescrito
Línea de tiempo
2007Error reportado al equipo de seguridad de Python
2007 – 2022Marcado como "no es un problema de seguridad" — tarfile "funciona como se espera"
2022Investigadores de Trellix escanean GitHub y encuentran más de 350,000 repos que llaman a extractall() con entradas no confiables
2022Divulgación pública. La CVE-2007-4559 resurge. Caos en toda la industria.
2023PEP 706 incluye filter='data' en Python 3.12 — la corrección es un solo argumento

Lo que muestra la demostración

La demostración se ejecuta en tres tiempos, cada uno requiere una pulsación de tecla para avanzar.

Tiempo 1 — Base

  • GET /admin → 401. El endpoint admin existe y está protegido. El atacante no conoce la contraseña.
  • Subir innocent.tar.gz → los archivos caen dentro del directorio sandbox. Todo parece normal.

Tiempo 2 — El Exploit

Atacante crea tarslip_passwd.tar.gz
  └─ entrada: "../../../etc/passwd"
       contenido: admin:hacked:1001:...   ← contraseña plantada
            │
            ▼
  POST /upload  (carga de archivo multipart)
            │
            ▼
  extractall("/shared/uploads/{uuid}/")
  resuelve "../../../etc/passwd" → /etc/passwd   ← CVE-2007-4559
            │
            ▼
  GET /admin   Authorization: Basic admin:hacked
            │
            ▼
  HTTP 200 — "¡Bienvenido, admin! Tienes acceso completo de administrador."
  flag: CVE-2007-4559{tarslip_passwd_overwrite_to_admin_rce}

Un solo HTTP POST. Sin shell. Sin payload RCE. Solo un archivo tar.

Tiempo 3 — La Corrección

El mismo tarball se sube a la API corregida, que pasa filter='data' a extractall(). Python lanza tarfile.OutsideDestinationError — el recorrido se bloquea, /etc/passwd no se toca, y /admin permanece bloqueado.

# Vulnerable — predeterminado antes de Python 3.14
tar.extractall(extraction_dir)

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

Un argumento. Quince años para implementarse.


Arquitectura

Cuatro servicios en una red bridge Docker aislada (tarslip-net). Nada llega a internet.

┌─────────────────────────────────────────────────────────┐
│                    tarslip-net (bridge)                  │
│                                                          │
│  ┌─────────────────┐      ┌──────────────────────────┐  │
│  │  vulnerable-api │      │       file-server        │  │
│  │  python:3.11.3  │      │       nginx:alpine       │  │
│  │  puerto 8000    │      │       puerto 8080 (host) │  │
│  │                 │      │                          │  │
│  │  POST /upload   │      │  Sirve /shared a través  │  │
│  │  GET  /admin    │      │  de HTTP — navegar       │  │
│  │  GET  /health   │      │  visualmente extracciones│  │
│  └────────┬────────┘      └────────────┬─────────────┘  │
│           │  volumen de almacenamiento compartido       │
│           └────────────────────────────────────────────┘ │
│                                                          │
│  ┌─────────────────┐                                     │
│  │    attacker     │                                     │
│  │  python:3.12    │  (sin puerto host — solo interno)   │
│  │                 │                                     │
│  │  craft_malicious.py  — genera tarballs                │
│  │  demo.py             — impulsa la demostración        │
│  └─────────────────┘                                     │
└─────────────────────────────────────────────────────────┘
ServicioImagenRolPuerto host
vulnerable-apipython:3.11.3-slimAPI Flask de carga + /admin protegido por autenticación /etc/passwd8000
fixed-apipython:3.12-slimMismo código + USE_SAFE_EXTRACTION=true8000
file-servernginx:alpineListado de directorios de archivos extraídos8080
attackerpython:3.12-slimGenerador de payload + controlador de demostración—

Las API vulnerable y corregida usan código fuente idéntico. La única diferencia es la variable de entorno USE_SAFE_EXTRACTION=true en el contenedor corregido, que activa el único argumento filter='data'.


Estructura del repositorio

CVE-2007-4559-lab/
├── run_demo.sh                      ← empezar aquí
├── docker-compose.vulnerable.yml
├── docker-compose.fixed.yml
├── vulnerable-api/
│   ├── app.py                       # API Flask: /upload + /admin + /health
│   ├── Dockerfile                   # siembra admin:s3cr3t_Adm1nPass en /etc/passwd
│   └── requirements.txt
├── file-server/
│   ├── Dockerfile
│   └── nginx.conf
└── attacker/
    ├── craft_malicious.py           # genera innocent.tar.gz + tarslip_passwd.tar.gz
    ├── demo.py                      # controlador CLI de cuatro modos (craft/baseline/exploit/verify)
    ├── Dockerfile
    └── requirements.txt

Requisitos previos

  • Docker 20.10+ con el plugin Compose (docker compose version)
  • macOS / Linux — el script de shell usa bash
  • Puertos 8000 y 8080 libres en su máquina host

Ejecutar la demostración

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

El script es completamente interactivo. Imprime una narrativa antes de cada paso y espera Enter para avanzar. No se necesita conocimiento previo de Docker para seguirlo.

Lo que cubre cada punto de pausa

PausaNarrativa mostradaAcción al presionar Enter
1Línea de tiempo de la CVE, qué son los tres tiemposConstruir stack vulnerable
2Roles de los contenedores, contraseña admin sembradaGenerar payloads
3Qué hay dentro de cada tarballTiempo 1 — base
4Por qué /admin es 401, cómo se ve la extracción normalTiempo 2 — exploit
5El cálculo exacto del recorrido, qué se sobrescribeCambiar a stack corregido
6Qué hace filter='data' y por qué funcionaTiempo 3 — verificar
7Conclusiones clave + patrón ZipSlip más amplioDesmontaje

Ejecutar tiempos individualmente

Si desea avanzar manualmente:

# Stack vulnerable
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
Descargar herramienta