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
tmux-fuzzing — Fuzzing amélioré pour tmux avec OSS-Fuzz. Inclut des harnais personnalisés `cmd-fuzzer` et `argument-fuzzer` pour une meilleure couverture de code et un PoC pour `CVE-2020-27347`. | Kitploit
Outils/GitHubGitHub/lucadibello/tmux-fuzzing
Analyse des VulnérabilitésAnalyse de CodeFuzzingAnalyse de BinairesApprentissage et ÉducationLabs et Pratique
GitHublucadibello/tmux-fuzzing

tmux-fuzzing

Fuzzing amélioré pour tmux avec OSS-Fuzz. Inclut des harnais personnalisés `cmd-fuzzer` et `argument-fuzzer` pour une meilleure couverture de code et un PoC pour `CVE-2020-27347`.

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

Laboratoire de Fuzzing : Améliorer le fuzzing pour tmux

Sécurité logicielle @ EPFL, Printemps 2025

Résumé

Dans ce laboratoire, nous avons amélioré les efforts de fuzzing pour le multiplexeur de terminaux tmux au sein de l'infrastructure OSS-Fuzz de Google. Nous avons d'abord établi une référence en évaluant la couverture de ligne du harnais input-fuzzer existant, avec et sans son corpus de graines fourni, en notant une couverture initiale comparable. Ensuite, nous avons identifié deux régions de code significatives dans tmux mal exercées par le fuzzer de référence. Pour combler ces lacunes de couverture, nous avons développé et évalué deux nouveaux harnais de fuzzing ciblés, cmd-fuzzer et argument-fuzzer, démontrant leur capacité à améliorer la couverture dans ces zones auparavant sous-testées. Ces améliorations de fuzzing n'ayant pas découvert de nouvelles vulnérabilités critiques dans le délai imparti du projet, notre analyse des crashes s'est concentrée sur une vulnérabilité historique connue. Nous avons développé une preuve de concept (PoC) pour CVE-2020-27347 (un débordement de tampon basé sur la pile), analysé sa cause racine, discuté du correctif appliqué et évalué ses implications en matière de sécurité.

Aperçu du projet et objectifs

Ce projet visait à appliquer et améliorer les techniques de fuzzing sur le multiplexeur de terminaux open-source tmux, en utilisant le framework OSS-Fuzz. Le projet comprenait plusieurs étapes clés :

  1. Évaluation de base (Partie 1) :

    • Comprendre et évaluer le harnais input-fuzzer existant pour tmux.
    • Comparer ses performances de couverture de code lorsqu'il est exécuté avec son corpus de graines par défaut par rapport à un corpus de graines vide.
  2. Analyse des lacunes de couverture (Partie 2) :

    • Analyser les rapports de couverture de la Partie 1 pour identifier les régions de code significatives dans tmux qui ne sont pas suffisamment exercées par le input-fuzzer.
    • Se concentrer sur l'analyse des arguments (arguments.c) et la logique d'analyse et d'exécution des commandes (cmd-parse.c, modules cmd-*.c) comme domaines clés d'amélioration.
  3. Amélioration du fuzzer (Partie 3) :

    • Développer deux nouveaux harnais de fuzzing ciblés :
      • argument-fuzzer : Conçu spécifiquement pour tester la logique d'analyse des arguments en ligne de commande dans arguments.c.
      • cmd-fuzzer : Conçu pour tester les chemins d'analyse et d'exécution des commandes, ciblant et divers modules .

Structure du dépôt

La soumission finale est organisée comme suit (dans le répertoire submission/) :

root@kitploit:~
submission/
├── README.md                   # Ce fichier
├── part_1/                     # Fichiers pour la Partie 1 : Évaluation de base
│   ├── oss-fuzz.diff           # Diff pour supprimer le corpus de graines pour input-fuzzer
│   ├── project.diff            # (Probablement vide ou mineur pour la Partie 1)
│   ├── remove_seed_corpus.patch # Le fichier de patch effectif utilisé
│   ├── report/                 # Rapports de couverture HTML pour input-fuzzer
│   │   ├── w_corpus/
│   │   └── wo_corpus/
│   ├── run.w_corpus.sh         # Script pour exécuter input-fuzzer avec corpus
│   └── run.wo_corpus.sh        # Script pour exécuter input-fuzzer sans corpus
├── part_3/                     # Fichiers pour la Partie 3 : Améliorations du fuzzer
│   ├── coverage_noimprove/     # Couverture de référence (par ex., depuis input-fuzzer sans corpus)
│   │   └── ...
│   ├── improve1/               # Amélioration 1 : argument-fuzzer
│   │   ├── coverage_improve1/  # Rapport de couverture pour argument-fuzzer
│   │   ├── oss-fuzz.diff       # Changements de configuration OSS-Fuzz pour argument-fuzzer
│   │   ├── project.diff        # Changements Tmux pour argument-fuzzer (par ex., nouveau .cc, Makefile.am)
│   │   └── run.improve1.sh     # Script pour exécuter argument-fuzzer
│   └── improve2/               # Amélioration 2 : cmd-fuzzer
│       ├── coverage_improve2/  # Rapport de couverture pour cmd-fuzzer
│       ├── oss-fuzz.diff       # Changements de configuration OSS-Fuzz pour cmd-fuzzer
│       ├── project.diff        # Changements Tmux pour cmd-fuzzer
│       └── run.improve2.sh     # Script pour exécuter cmd-fuzzer
├── part_4/                     # Fichiers pour la Partie 4 : Analyse de crash (CVE-2020-27347)
│   ├── environment/            # Environnement Docker pour PoC
│   │   ├── Dockerfile
│   │   ├── run_tmux_cve_test.sh # Logique de test PoC principale
│   │   ├── test_fixed.sh
│   │   └── test_vulnerable.sh
│   └── run.poc.sh              # Script pour construire l'image Docker et exécuter les tests PoC
└── report.pdf                  # Le rapport de projet complet

(Note : Le répertoire scripts/ contenant _run_fuzz_core.sh est un helper et ferait partie de la racine si ce README se trouve à la vraie racine du projet aux côtés de submission/)

Configuration et utilisation

Toutes les campagnes de fuzzing et la reproduction du PoC CVE sont conçues pour être exécutées dans des environnements Docker orchestrés par des scripts shell.

Configuration et utilisation

Toutes les campagnes de fuzzing et la reproduction du PoC CVE sont conçues pour être exécutées dans des environnements Docker orchestrés par des scripts shell.

Prérequis :

  • Docker installé et en cours d'exécution sur un système de type Unix.
  • Shell bash et client git.
  • Clés SSH configurées pour [email protected] si les scripts doivent cloner oss-fuzz (ils tentent de cloner si oss-fuzz/ n'est pas trouvé à la racine du projet). Alternativement, vous pouvez pré-cloner https://github.com/google/oss-fuzz.git dans la racine du projet.

Architecture générale des scripts : Le projet utilise un script centralisé, scripts/_run_fuzz_core.sh (non inclus dans le répertoire submission/ mais faisant partie de la structure globale du projet supposée par ce README). Les scripts d'exécution individuels situés dans submission/part_1/, submission/part_3/improve1/, submission/part_3/improve2/ et submission/part_4/ sont responsables de :

  1. Configurer l'environnement de test spécifique en appliquant des correctifs oss-fuzz.diff spécifiques à l'exécution sur un checkout propre du dépôt oss-fuzz (attendu à ../../oss-fuzz par rapport à la plupart des scripts d'exécution).
  2. Exporter les variables de configuration (comme PROJECT, HARNESS, LABEL, les chemins vers les correctifs spécifiques au projet et les répertoires de sortie).
  3. Invoquer le script _run_fuzz_core.sh, qui gère ensuite :
    • L'application d'un correctif optionnel au niveau du projet (par exemple, pour ajouter de nouvelles sources de fuzzer à tmux).
    • La construction de l'image Docker OSS-Fuzz (si signalé).
    • La construction du ou des fuzzers spécifiés avec le sanitizer choisi.
    • L'exécution du fuzzer pendant la durée configurée (généralement 4 heures).
    • La génération et l'exportation du corpus et des rapports de couverture HTML vers les emplacements désignés dans la structure du répertoire submission/.

Exécution des scripts : Il est généralement recommandé d'exécuter les scripts d'exécution depuis le répertoire racine du projet pour garantir une résolution correcte des chemins relatifs pour oss-fuzz/ et les répertoires de sortie.

1. Partie 1 : Évaluation de base (input-fuzzer) Ces scripts évaluent le input-fuzzer existant pour tmux.

root@kitploit:~
# Depuis le répertoire racine du projet :
./submission/part_1/run.w_corpus.sh  # Exécuter input-fuzzer avec le corpus de graines par défaut
./submission/part_1/run.wo_corpus.sh # Exécuter input-fuzzer sans corpus de graines

run.w_corpus.sh utilise le comportement par défaut de tmux concernant les graines. run.wo_corpus.sh applique submission/part_1/remove_seed_corpus.patch (via son oss-fuzz.diff local qui ferait référence à ce correctif ou intégrerait ses modifications) au oss-fuzz/projects/tmux/build.sh pour garantir qu'aucun corpus de graines initial n'est utilisé. Les rapports de couverture sont exportés vers submission/part_1/report/w_corpus/ et submission/part_1/report/wo_corpus/ respectivement.

2. Partie 3 : Améliorations du fuzzer (input-fuzzer)

  • Amélioration 1 (argument-fuzzer) : Cible arguments.c.

    root@kitploit:~
    # Depuis le répertoire racine du projet :
    ./submission/part_3/improve1/run.improve1.sh
    
  • Amélioration 2 (cmd-fuzzer) : Cible cmd-parse.c et l'exécution des commandes.

    root@kitploit:~
    # Depuis le répertoire racine du projet :
    ./submission/part_3/improve2/run.improve2.sh
    

Chaque script run.improveX.sh applique son oss-fuzz.diff local et définit PROJECT_PATCH_FILE vers son project.diff local (qui ajoute le nouveau code du fuzzer à tmux et met à jour Makefile.am). Les rapports de couverture sont exportés vers les répertoires respectifs submission/part_3/improveX/coverage_improveX/. Le répertoire submission/part_3/coverage_noimprove/ contient la couverture de référence de la Partie 1 pour comparaison.

3. Partie 4 : Reproduction du PoC pour CVE-2020-27347

root@kitploit:~
# Depuis le répertoire racine du projet :
./submission/part_4/run.poc.sh

Ce script construit une image Docker dédiée (à partir de submission/part_4/environment/Dockerfile) et teste tmux 3.1b (vulnérable) par rapport au commit corrigé a868bac.

Principales conclusions et résultats

(Des explications détaillées, des figures et des tableaux se trouvent dans le fichier report.pdf complet)

Partie 1 (Évaluation de base - input-fuzzer)

  • Avec le corpus de graines par défaut : 14,00 % de couverture de ligne (7281/51997 lignes), 24,44 % de couverture de fonction.
  • Sans corpus de graines : 13,94 % de couverture de ligne (7248/51997 lignes), 24,31 % de couverture de fonction.
  • L'impact du corpus de graines initial était mineur pour le input-fuzzer existant.
  • Des portions importantes de tmux, notamment l'analyse des arguments (arguments.c), l'analyse/exécution des commandes (cmd-parse.c, cmd-*.c), et la logique client/serveur (client.c, server.c), étaient largement inexploitées (par exemple, arguments.c à ~5,8 % de couverture de ligne).

Partie 3 (Améliorations du fuzzer)

  • argument-fuzzer (ciblant arguments.c) : A atteint 66,62 % de couverture de ligne pour arguments.c, une augmentation substantielle par rapport aux ~5,8 % de référence.
  • cmd-fuzzer (ciblant l'analyse et l'exécution des commandes) : A augmenté la couverture de ligne pour cmd-parse.c à 42,58 % (contre ~27 %) et la couverture de fonction à 77,78 %.
  • La couverture de arguments.c a également augmenté à 45,54 % grâce à ce fuzzer.
  • cmd.c a atteint 39,14 % de couverture de ligne.
  • A atteint une couverture nouvelle ou significativement améliorée dans divers modules cmd-*.c (par exemple, cmd-bind-key.c, cmd-set-options.c à 50 % de couverture de fonction) et les routines de gestion des touches (key-string.c à 30 % de couverture de ligne, key-bindings.c à 6,05 % de couverture de ligne).

Partie 4 (Analyse de CVE-2020-27347)

  • A reproduit avec succès CVE-2020-27347 (débordement de tampon de pile dans l'analyse des séquences d'échappement SGR) sur tmux 3.1b (commit 6a33a12) en utilisant la charge utile \033[::::::7::1:2:3::5:6:7:m.
  • A confirmé que le commit a868bac de tmux (qui inclut le correctif et mène à la version 3.1c) n'était pas sensible au crash.
  • La vulnérabilité, exploitable en écrivant une séquence conçue dans un TTY de volet, conduit à un déni de service et a un potentiel d'exécution de code arbitraire. Elle est classée comme de gravité élevée (CVSS 7.8).

Défis rencontrés

  • Assurer un démarrage correct de tmux dans un environnement Docker scripté, en particulier pour éviter les erreurs « not a terminal », a nécessité l'utilisation de sessions détachées pour le PoC CVE.
  • La gestion de l'état git (garantir des clonages complets, des réinitialisations propres avant d'appliquer les correctifs) dans différents scénarios de test était essentielle pour des builds reproductibles de versions spécifiques de tmux.
  • Le développement de nouveaux harnais de fuzzing efficaces (argument-fuzzer, cmd-fuzzer) a nécessité une bonne compréhension de la logique interne d'analyse des arguments et des commandes de tmux pour cibler des chemins de code spécifiques non exercés.

Travaux futurs

  • Améliorer davantage le cmd-fuzzer pour couvrir un plus large éventail de modules cmd-*.c, en particulier ceux traitant d'interactions d'état complexes comme les manipulations de fenêtres, de mise en page ou de volets.
  • Étudier des stratégies de fuzzing pour le protocole de communication client-serveur de tmux, impliquant potentiellement un mock d'environnement plus complexe.
  • Explorer l'utilisation du fuzzing sensible à la structure pour le langage de commande tmux, éventuellement en tirant parti des définitions grammaticales de cmd-parse.y pour générer des séquences de commandes syntaxiquement valides et plus complexes.

Liens utiles

  • Projet tmux
  • OSS-Fuzz
  • CVE-2020-27347
  • Rapport de projet PDF (Chemin relatif à la racine du projet)
Télécharger l’outil
cmd-parse.c
cmd-*.c
  • Évaluer l'efficacité de ces nouveaux harnais en mesurant leur couverture de code atteinte et en la comparant à la référence.
  • Analyse de crash (Partie 4) :

    • Comme aucune nouvelle vulnérabilité critique n'a été découverte par les fuzzers améliorés dans le délai imparti du projet, une vulnérabilité connue préexistante dans tmux (CVE-2020-27347) a été sélectionnée pour une analyse approfondie.
    • Cela a impliqué le développement d'une preuve de concept (PoC) pour reproduire le crash, l'analyse de sa cause racine, la compréhension du correctif appliqué et l'évaluation de ses implications en matière de sécurité.