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-2026-29780 — Démontre une vulnérabilité de traversée de chemin dans un script d'exemple officiel d'eml-parser, permettant l'écriture arbitraire de fichiers via des noms de pièces jointes malveillants, avec PoC et correctif. | Kitploit
Outils/GitHubGitHub/redyank/cve-2026-29780
Analyse StatiqueAnalyse des VulnérabilitésAnalyse de CodeExploitationSécurité Web
GitHubredyank/cve-2026-29780

CVE-2026-29780

Démontre une vulnérabilité de traversée de chemin dans un script d'exemple officiel d'eml-parser, permettant l'écriture arbitraire de fichiers via des noms de pièces jointes malveillants, avec PoC et correctif.

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

Traversée de chemin dans un script d'exemple officiel conduisant à une écriture arbitraire de fichiers

Résumé

Le script d'exemple officiel examples/recursively_extract_attachments.py contient une vulnérabilité de traversée de chemin qui permet une écriture arbitraire de fichiers en dehors du répertoire de sortie prévu. Les noms de fichiers des pièces jointes extraits des e-mails analysés sont directement utilisés pour construire les chemins de fichiers de sortie sans aucune assainissement, permettant à un nom de fichier contrôlé par l'attaquant de s'échapper du répertoire cible.

Détails

Fichier : examples/recursively_extract_attachments.py Lignes : 61–64

root@kitploit:~
for a in m['attachment']:
    out_filepath = out_path / a['filename']  # No sanitization
    print(f'\tWriting attachment: {out_filepath}')
    with out_filepath.open('wb') as a_out:
        a_out.write(base64.b64decode(a['raw']))

La valeur est contrôlée par l'attaquant via des en-têtes de pièces jointes d'e-mails falsifiés :

a['filename']
root@kitploit:~
Content-Disposition: attachment; filename="../outside/pwned.txt"

Aucune normalisation de chemin ni validation des limites n'est effectuée avant l'écriture.

PoC

  1. Créez un fichier .eml malveillant :
root@kitploit:~
Content-Disposition: attachment; filename="../outside/pwned.txt"
  1. Exécutez le script d'exemple :
root@kitploit:~
python recursively_extract_attachments.py -p ./emails -o ./safe
  1. Attendu : ./safe/pwned.txt
  2. Réel : ./outside/pwned.txt ← écrit en dehors du répertoire prévu

Vérifié sur Kali Linux avec eml-parser installé via pip dans un environnement virtuel.

Impact

Cette vulnérabilité est limitée au script d'exemple uniquement et n'affecte pas la bibliothèque principale eml-parser. Cependant, comme le script fait partie du dépôt officiel et est susceptible d'être adapté pour une utilisation en production, un attaquant fournissant un e-mail falsifié pourrait réaliser une écriture arbitraire de fichiers dans le contexte d'exécution.

Les scénarios d'attaque potentiels incluent :

  • Injection de tâches cron : filename="../../etc/cron.d/backdoor"
  • Téléversement de web shell : filename="../../var/www/html/shell.php"
  • Injection de clés SSH : filename="../../home/user/.ssh/authorized_keys"

Correctif recommandé

root@kitploit:~
import os.path

for a in m['attachment']:
    filename = os.path.basename(a['filename'])
    out_filepath = out_path / filename

    if not out_filepath.resolve().is_relative_to(out_path.resolve()):
        print(f'[!] Skipping suspicious filename: {a["filename"]}')
        continue

    print(f'\tWriting attachment: {out_filepath}')
    with out_filepath.open('wb') as a_out:
        a_out.write(base64.b64decode(a['raw']))
Télécharger l’outil