
CodeQL detector pour la cause racine de CVE-2022-2869 (CWE-191 sous-dépassement non signé) utilisant une analyse de flux de contrôle/plages pour identifier les schémas vulnérables sans coder en dur des fonctions spécifiques.
Ce projet implémente un détecteur CodeQL général pour la faiblesse racine derrière CVE-2022-2869 : une soustraction non signée qui peut provoquer un dépassement inférieur (underflow) car le programme n'a pas établi de garde suffisante de borne inférieure/ordre avant l'opération arithmétique.
Le détecteur signale délibérément la cause racine (CWE-191) plutôt que de coder en dur tiffcrop.c, des noms de fonctions ou des noms de variables. Il utilise la bibliothèque standard Overflow de CodeQL, dont le raisonnement de garde repose sur l'analyse de flux de contrôle/plages. Il n'utilise pas l'ordre des numéros de lignes du code source comme substitut à la dominance du flux de contrôle.
UnsignedUnderflow.ql — détecteur principal à soumettre.report.md — explication de la vulnérabilité et de la requête.test/mini_tiffcrop_like.c — cas non sûrs de type CVE plus contrôles sûrs.test/mini_tiffcrop_variant.c — une variation structurellement différente plus contrôle sûr.test/EXPECTED_RESULTS.md — comportement positif/négatif attendu.original/ORIGINAL_VALIDATION.md — ce qui doit être démontré sur LibTIFF vulnérable.Depuis ce répertoire :
codeql pack install
Exemple sous Linux/WSL :
codeql database create db-tests \
--language=cpp \
--command="gcc -std=c11 -O0 -g test/mini_tiffcrop_like.c -o /tmp/test1 && gcc -std=c11 -O0 -g test/mini_tiffcrop_variant.c -o /tmp/test2"
Exécuter la requête :
codeql query run UnsignedUnderflow.ql --database=db-tests
La requête CodeQL est une analyse statique. ASan est une preuve facultative montrant la conséquence des variations personnalisées.
gcc -std=c11 -O0 -g -fsanitize=address test/mini_tiffcrop_like.c -o mini1
./mini1 # sûr
./mini1 unsafe-x2 # erreur mémoire attendue
gcc -std=c11 -O0 -g -fsanitize=address test/mini_tiffcrop_variant.c -o mini2
./mini2 # sûr
./mini2 unsafe # erreur mémoire attendue
Construisez une base de données CodeQL à partir d'une révision LibTIFF vulnérable (par exemple 4.3.0), puis exécutez exactement la même requête UnsignedUnderflow.ql contre cette base de données. Capturez le résultat dans tools/tiffcrop.c, en particulier computeInputPixelOffsets.
Le détecteur ne doit pas être modifié pour mentionner tiffcrop, computeInputPixelOffsets, x2 ou crop_width ; sinon il serait surajusté à une seule instance de CVE et échouerait à l'exigence de variation de l'exercice.