Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

FluxContactConfidentialité© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2007-4559-lab — Laboratoire Docker autonome démontrant CVE-2007-4559 (TarSlip) une traversée de répertoire via le module tarfile de Python. Inclut des API vulnérables et corrigées, la génération de payload, et un script de démonstration interactif pour l'éducation en sécurité. | Kitploit
Outils/GitHubGitHub/jithinodattu/cve-2007-4559-lab
Analyse StatiqueAnalyse des VulnérabilitésAnalyse de CodeExploitation d'Applications WebCTFSécurité de la Chaîne LogistiqueApprentissage et ÉducationExploitation de BinairesLabs et Pratique
GitHubjithinodattu/cve-2007-4559-lab

CVE-2007-4559-lab

Laboratoire Docker autonome démontrant CVE-2007-4559 (TarSlip) une traversée de répertoire via le module tarfile de Python. Inclut des API vulnérables et corrigées, la génération de payload, et un script de démonstration interactif pour l'éducation en sécurité.

Voir le dépôt
15il y a 5 moisPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

CVE-2007-4559 — TarSlip : L'attaque par traversée de répertoire vieille de 15 ans

Usage éducatif uniquement. Ce laboratoire exploite intentionnellement des vulnérabilités du système de fichiers dans des conteneurs Docker isolés. Ne pas exécuter sur un système contenant des données sensibles ou dans des environnements de production.

Un laboratoire Docker autonome qui démontre CVE-2007-4559 — la fameuse vulnérabilité « TarSlip » dans le module tarfile de Python — à travers une chaîne d'attaque concrète de bout en bout :

  1. Un attaquant téléverse une archive tar malveillante vers une API de téléversement de fichiers.
  2. extractall() écrit aveuglément une entrée tar nommée ../../../etc/passwd en dehors du répertoire d'extraction, écrasant le véritable fichier système.
  3. Le mot de passe ainsi implanté accorde à l'attaquant l'accès à un point de terminaison /admin protégé.
  4. La même attaque est ensuite exécutée contre une API corrigée — et bloquée par une seule ligne de code.

La vulnérabilité

La méthode tarfile.extractall() de Python reproduit fidèlement chaque entrée d'une archive tar, y compris celles dont les noms contiennent des séquences de traversée de chemin ../. Elle n'a jamais été conçue pour être une barrière de sécurité.

tar entry name : ../../../etc/passwd
extraction dir : /shared/uploads/a1b2c3d4/

resolved path  : /shared/uploads/a1b2c3d4/../../../etc/passwd
               = /etc/passwd   ← system file overwritten
Chronologie
2007Bug signalé à l'équipe de sécurité Python
2007 – 2022Marqué comme « non critique pour la sécurité » — tarfile fonctionne comme prévu
2022Les chercheurs de Trellix scannent GitHub et trouvent plus de 350 000 dépôts qui appellent extractall() sur des entrées non fiables
2022Divulgation publique. CVE-2007-4559 refait surface. Agitation à l'échelle de l'industrie.
2023La PEP 706 livre filter='data' dans Python 3.12 — le correctif est un seul argument

Ce que montre la démo

La démo se déroule en trois temps, chacun nécessitant une pression de touche pour avancer.

Temps 1 — Référence

  • GET /admin → 401. Le point de terminaison admin existe et est protégé. L'attaquant ne connaît pas le mot de passe.
  • Téléversement de innocent.tar.gz → les fichiers atterrissent dans le répertoire sandbox. Tout semble normal.

Temps 2 — L'exploitation

Attacker crafts tarslip_passwd.tar.gz
  └─ entry: "../../../etc/passwd"
       content: admin:hacked:1001:...   ← planted password
            │
            ▼
  POST /upload  (multipart file upload)
            │
            ▼
  extractall("/shared/uploads/{uuid}/")
  resolves "../../../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}

Un seul POST HTTP. Pas de shell. Pas de payload RCE. Juste un fichier tar.

Temps 3 — Le correctif

La même archive tar est téléversée vers l'API corrigée, qui passe filter='data' à extractall(). Python lève une exception tarfile.OutsideDestinationError — la traversée est bloquée, /etc/passwd reste intact, et /admin reste verrouillé.

# Vulnerable — default before Python 3.14
tar.extractall(extraction_dir)

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

Un seul argument. Quinze ans pour arriver.


Architecture

Quatre services sur un réseau pont Docker isolé (tarslip-net). Rien n'atteint 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                │
│  └─────────────────┘                                     │
└─────────────────────────────────────────────────────────┘
ServiceImageRôlePort hôte
vulnerable-apipython:3.11.3-slimAPI de téléversement Flask + /admin protégé par authentification via /etc/passwd8000
fixed-apipython:3.12-slimMême code + USE_SAFE_EXTRACTION=true8000
file-servernginx:alpineListe des répertoires de fichiers extraits8080
attackerpython:3.12-slimGénérateur de payload + pilote de démo—

Les API vulnérable et corrigée utilisent un code source identique. La seule différence est la variable d'environnement USE_SAFE_EXTRACTION=true sur le conteneur corrigé, qui active le seul argument filter='data'.


Structure du dépôt

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                   # seeds admin:s3cr3t_Adm1nPass into /etc/passwd
│   └── requirements.txt
├── file-server/
│   ├── Dockerfile
│   └── nginx.conf
└── attacker/
    ├── craft_malicious.py           # generates innocent.tar.gz + tarslip_passwd.tar.gz
    ├── demo.py                      # four-mode CLI driver (craft/baseline/exploit/verify)
    ├── Dockerfile
    └── requirements.txt

Prérequis

  • Docker 20.10+ avec le plugin Compose (docker compose version)
  • macOS / Linux — le script shell utilise bash
  • Les ports 8000 et 8080 libres sur votre hôte

Exécution de la démo

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

Le script est entièrement interactif. Il affiche un récit avant chaque étape et attend Entrée pour continuer. Aucune connaissance préalable de Docker n'est nécessaire pour suivre.

Ce que chaque point d'arrêt couvre

PauseRécit affichéAction sur Entrée
1Chronologie de CVE, ce que sont les trois tempsConstruire la pile vulnérable
2Rôles des conteneurs, mot de passe admin initialGénérer les payloads
3Ce qu'il y a dans chaque archive tarTemps 1 — référence
4Pourquoi /admin est 401, à quoi ressemble une extraction normaleTemps 2 — exploitation
5Le calcul exact de la traversée, ce qui est écraséPasser à la pile corrigée
6Ce que fait filter='data' et pourquoi ça fonctionneTemps 3 — vérification
7Points clés à retenir + schéma plus large de ZipSlipDémantèlement

Exécution individuelle des temps

Si vous voulez avancer manuellement :

Télécharger l’outil