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
practice-22-23 — Analyse CVE-2017-9608 | Kitploit
Outils/GitHubGitHub/lacinquette/practice-22-23
Sécurité des ConteneursAnalyse des VulnérabilitésExploitationFuzzingAnalyse de BinairesApprentissage et Éducation
GitHublacinquette/practice-22-23

practice-22-23

Analyse CVE-2017-9608

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

Projet

Pour exécuter : ./script.sh

Dépôt GitHub - https://github.com/LaCinquette/practice-22-23

Déroulement

  1. Pour trouver une vulnérabilité, j'ai choisi le projet FFmpeg. J'ai trouvé ce commit qui répondait aux exigences, à savoir :

    • Correspondait au type CWE-476 - déréférencement de pointeur nul
  2. J'ai créé un Dockerfile dans lequel :

    1. J'ai choisi Ubuntu 22.04 comme image de base
    2. J'ai défini DEBIAN_FRONTEND=nointeractive pour éviter toute interaction avec la ligne de commande lors de l'installation des paquets et autres commandes
    3. J'ai installé les dépendances nécessaires indiquées dans le wiki officiel
    4. Je prépare l'espace de travail (dossier workdir)
    5. Je télécharge, décompresse et déplace le commit avec la vulnérabilité non corrigée dans l'espace de travail
    6. Je lance la construction du programme avec l'utilitaire make
    7. Je crée le script copy_out.sh qui recherche le fichier objet nécessaire contenant l'erreur et le copie dans le répertoire workspace/out
    8. Je laisse une instruction pour exécuter le script copy_out.sh, qui doit s'exécuter au démarrage du conteneur
  3. Pour automatiser, je crée le script script.sh qui construit l'image et lance le conteneur, puis récupère le fichier et le déplace dans le répertoire courant :

    1. Je supprime le dossier courant out (s'il existe)
    2. Je construis l'image nommée ffmpeg_image
    3. Je lance un conteneur à partir de l'image construite, en lui passant les paramètres suivants :
      • --rm pour supprimer automatiquement le conteneur à la fin
      • -v $PWD/out:/workspace/out pour monter un répertoire temporaire par lequel le fichier objet est transféré vers l'hôte
    4. Je copie le fichier nécessaire depuis le dossier out
    5. Je supprime le dossier out

Analyse de la vulnérabilité

Sources :

  • Commit avec l'erreur corrigée
  • Page sur GitHub concernant la vulnérabilité
  • Courrier d'un chercheur en sécurité sur la vulnérabilité

Analyse :

Problème :

  1. À l'aide de la commande ffmpeg -c:v dnxhd -i poc.mov -y output.ts, un fichier .mov spécialement conçu est fourni en entrée au programme
  2. Pour analyser le format DNxHD, la fonction dnxhd_parse est appelée dans le fichier dnxhd_parser
  3. Celle-ci appelle à son tour la fonction dnxhd_find_frame_end (dans le même fichier), qui, dans certaines conditions, ne trouve pas la fin et renvoie un nombre négatif qui n'est pas un code d'erreur
  4. Ce nombre, ainsi que d'autres paramètres, est ensuite transmis à la fonction ff_combine_frame (située dans le fichier parser) pour assembler les trames
  5. Comme ce nombre n'est pas un code d'erreur, ff_combine_frame l'interprète comme un décalage et tente de relire ces octets dans le tampon. Mais comme le tampon est vide à ce moment-là, un déréférencement de pointeur nul se produit, ce qui provoque une erreur de segmentation (Segmentation fault)

En assembleur :

0x08000d4e - début de la section

  1. movsxd rcx, dword [rbx + 0xc]

    Dans le registre rcx, on obtient une référence à pc->buffer

  2. add rcx, rdi

    On ajoute next à pc->buffer

  3. add rcx, qword [rbx]

    On ajoute pc->last_index à next et à pc->buffer

  4. movzx edi, byte [rcx]

    On calcule l'octet à l'adresse rcx, mais comme pc->buffer est initialement null, on obtient une erreur de segmentation

Solution :

Empêcher l'accès à une zone mémoire non allouée en traitant correctement le cas exceptionnel. Lorsqu'un nombre négatif d'octets restants est détecté, continuer le traitement du fichier en sautant la boucle.

Télécharger l’outil