
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`.
Sécurité logicielle @ EPFL, Printemps 2025
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é.
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 :
Évaluation de base (Partie 1) :
input-fuzzer existant pour tmux.Analyse des lacunes de couverture (Partie 2) :
tmux qui ne sont pas suffisamment exercées par le input-fuzzer.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.Amélioration du fuzzer (Partie 3) :
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 cmd-parse.c et divers modules cmd-*.c.Analyse de crash (Partie 4) :
tmux (CVE-2020-27347) a été sélectionnée pour une analyse approfondie.La soumission finale est organisée comme suit (dans le répertoire submission/) :
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/)
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.
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 :
bash et client git.[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 :
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).PROJECT, HARNESS, LABEL, les chemins vers les correctifs spécifiques au projet et les répertoires de sortie)._run_fuzz_core.sh, qui gère ensuite :
tmux).submission/.