Skip to content
KitploitKITPLOIT
ToolsBlog
Log in
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
CVE-2007-4559-lab — Eigenständiges Docker-Labor, das CVE-2007-4559 (TarSlip) Directory-Traversal über das Python-tarfile-Modul demonstriert. Enthält anfällige und gepatchte APIs, Payload-Generierung und ein interaktives Demo-Skript für die Sicherheitsschulung. | Kitploit
Tools/GitHubGitHub/jithinodattu/cve-2007-4559-lab
Statische AnalyseSchwachstellenanalyseCode-AnalyseWebanwendungs-ExploitationCTFLieferkettensicherheitLernen & BildungBinary-ExploitationLabs & Praxis
GitHubjithinodattu/cve-2007-4559-lab

CVE-2007-4559-lab

Eigenständiges Docker-Labor, das CVE-2007-4559 (TarSlip) Directory-Traversal über das Python-tarfile-Modul demonstriert. Enthält anfällige und gepatchte APIs, Payload-Generierung und ein interaktives Demo-Skript für die Sicherheitsschulung.

Repository anzeigen
15vor 5 MonatenNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

CVE-2007-4559 — TarSlip: Der 15 Jahre alte Verzeichnis-Traversal

Nur für Bildungszwecke. Diese Laborumgebung nutzt absichtlich Dateisystem-Schwachstellen in isolierten Docker-Containern aus. Nicht auf Systemen mit sensiblen Daten oder in Produktionsumgebungen ausführen.

Ein in sich geschlossenes Docker-Labor, das CVE-2007-4559 demonstriert – die berüchtigte „TarSlip“-Schwachstelle im Python tarfile-Modul – anhand einer konkreten, durchgängigen Angriffskette:

  1. Ein Angreifer lädt ein manipuliertes Tarball in eine Datei-Upload-API hoch.
  2. extractall() schreibt blind einen Tar-Eintrag mit dem Namen ../../../etc/passwd außerhalb des Extraktionsverzeichnisses und überschreibt dabei die echte Systemdatei.
  3. Das platzierte Passwort gewährt dem Angreifer Zugriff auf einen geschützten /admin-Endpunkt.
  4. Der gleiche Angriff wird dann gegen eine behobene API ausgeführt – und mit einer einzigen Codezeile blockiert.

Die Schwachstelle

Python's tarfile.extractall() reproduziert getreu jeden Eintrag in einem Tar-Archiv, einschließlich Einträge, deren Namen ../-Pfad-Traversal-Sequenzen enthalten. Es wurde nie als Sicherheitsgrenze konzipiert.

Tar-Eintragsname : ../../../etc/passwd
Extraktionsverz. : /shared/uploads/a1b2c3d4/

aufgelöster Pfad : /shared/uploads/a1b2c3d4/../../../etc/passwd
                 = /etc/passwd   ← Systemdatei überschrieben
Zeitachse
2007Fehler an das Python-Sicherheitsteam gemeldet
2007 – 2022Als „kein Sicherheitsproblem“ markiert – tarfile funktioniert „wie vorgesehen“
2022Trellix-Forscher durchsuchen GitHub und finden 350.000+ Repos, die extractall() auf nicht vertrauenswürdige Eingaben aufrufen
2022Öffentliche Offenlegung. CVE-2007-4559 taucht wieder auf. Branchenweite Hektik.
2023PEP 706 liefert filter='data' in Python 3.12 – der Fix ist ein einziges Argument

Was die Demo zeigt

Die Demo läuft in drei Abschnitten, die jeweils einen Tastendruck zum Fortfahren erfordern.

Abschnitt 1 – Basislinie

  • GET /admin → 401. Der Admin-Endpunkt existiert und ist geschützt. Der Angreifer kennt das Passwort nicht.
  • Hochladen von innocent.tar.gz → Dateien landen im Sandbox-Verzeichnis. Alles sieht normal aus.

Abschnitt 2 – Der Exploit

Angreifer erstellt tarslip_passwd.tar.gz
  └─ Eintrag: "../../../etc/passwd"
       Inhalt: admin:hacked:1001:...   ← platziertes Passwort
            │
            ▼
  POST /upload  (Multipart-Datei-Upload)
            │
            ▼
  extractall("/shared/uploads/{uuid}/")
  löst "../../../etc/passwd" auf → /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}

Ein HTTP-POST. Keine Shell. Kein RCE-Payload. Nur eine Tar-Datei.

Abschnitt 3 – Der Fix

Das gleiche Tarball wird in die behobene API hochgeladen, die filter='data' an extractall() übergibt. Python wirft tarfile.OutsideDestinationError – der Traversal wird blockiert, /etc/passwd bleibt unberührt und /admin bleibt gesperrt.

# Verwundbar – Standard vor Python 3.14
tar.extractall(extraction_dir)

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

Ein Argument. Fünfzehn Jahre bis zur Auslieferung.


Architektur

Vier Dienste in einem isolierten Docker-Bridge-Netzwerk (tarslip-net). Kein Zugriff auf das Internet.

┌─────────────────────────────────────────────────────────┐
│                    tarslip-net (bridge)                  │
│                                                          │
│  ┌─────────────────┐      ┌──────────────────────────┐  │
│  │  vulnerable-api │      │       file-server        │  │
│  │  python:3.11.3  │      │       nginx:alpine       │  │
│  │  port 8000      │      │       port 8080 (host)   │  │
│  │                 │      │                          │  │
│  │  POST /upload   │      │  Serves /shared over     │  │
│  │  GET  /admin    │      │  HTTP — browse extracts  │  │
│  │  GET  /health   │      │  visually                │  │
│  └────────┬────────┘      └────────────┬─────────────┘  │
│           │  shared-storage volume     │                 │
│           └────────────────────────────┘                 │
│                                                          │
│  ┌─────────────────┐                                     │
│  │    attacker     │                                     │
│  │  python:3.12    │  (no host port — internal only)     │
│  │                 │                                     │
│  │  craft_malicious.py  — generates tarballs             │
│  │  demo.py             — drives the demo                │
│  └─────────────────┘                                     │
└─────────────────────────────────────────────────────────┘
DienstImageRolleHost-Port
vulnerable-apipython:3.11.3-slimFlask-Upload-API + /admin geschützt durch /etc/passwd-Auth8000
fixed-apipython:3.12-slimGleicher Code + USE_SAFE_EXTRACTION=true8000
file-servernginx:alpineVerzeichnislisting extrahierter Dateien8080
attackerpython:3.12-slimPayload-Generator + Demo-Treiber—

Die verwundbare und die behobene API verwenden identischen Quellcode. Der einzige Unterschied ist die Umgebungsvariable USE_SAFE_EXTRACTION=true auf dem behobenen Container, die das einzelne filter='data'-Argument umschaltet.


Repository-Struktur

CVE-2007-4559-lab/
├── run_demo.sh                      ← start here
├── docker-compose.vulnerable.yml
├── docker-compose.fixed.yml
├── vulnerable-api/
│   ├── app.py                       # Flask-API: /upload + /admin + /health
│   ├── Dockerfile                   # seedet admin:s3cr3t_Adm1nPass in /etc/passwd
│   └── requirements.txt
├── file-server/
│   ├── Dockerfile
│   └── nginx.conf
└── attacker/
    ├── craft_malicious.py           # erzeugt innocent.tar.gz + tarslip_passwd.tar.gz
    ├── demo.py                      # CLI-Treiber mit vier Modi (craft/baseline/exploit/verify)
    ├── Dockerfile
    └── requirements.txt

Voraussetzungen

  • Docker 20.10+ mit dem Compose-Plugin (docker compose version)
  • macOS / Linux – das Shell-Skript verwendet bash
  • Die Ports 8000 und 8080 auf Ihrem Host müssen frei sein

Demo ausführen

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

Das Skript ist vollständig interaktiv. Es zeigt vor jedem Schritt eine Erläuterung an und wartet auf Eingabetaste, um fortzufahren. Für das Mitverfolgen sind keine Docker-Kenntnisse erforderlich.

Was jeder Haltepunkt abdeckt

HaltAngezeigte ErläuterungAktion bei Eingabetaste
1CVE-Zeitachse, Beschreibung der drei AbschnitteVerwundbaren Stack bauen
2Rollen der Container, eingesetztes Admin-PasswortPayloads generieren
3Inhalt jedes TarballsAbschnitt 1 – Basislinie
4Warum /admin 401 ist, wie normale Extraktion aussiehtAbschnitt 2 – Exploit
5Die genaue Traversal-Berechnung, was überschrieben wirdZum behobenen Stack wechseln
6Was filter='data' bewirkt und warum es funktioniertAbschnitt 3 – Verifikation
7Wichtige Erkenntnisse + allgemeines ZipSlip-MusterAufräumen

Einzelne Abschnitte ausführen

Für manuelles Durchgehen:

# Verwundbarer Stack
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
Tool herunterladen