
CodeQL detector para la causa raíz de CVE-2022-2869 (CWE-191 desbordamiento inferior sin signo) mediante análisis de flujo de control/rango para identificar patrones vulnerables sin codificar funciones específicas.
Este proyecto implementa un detector CodeQL general para la debilidad raíz detrás de CVE-2022-2869: una resta sin signo que puede desbordarse por debajo (underflow) porque el programa no ha establecido una guarda suficiente de límite inferior/orden antes de la operación aritmética.
El detector informa deliberadamente la causa raíz (CWE-191) en lugar de codificar de forma fija tiffcrop.c, nombres de funciones o nombres de variables. Utiliza la biblioteca estándar Overflow de CodeQL, cuyo razonamiento de guardas se basa en análisis de flujo de control/rangos. No utiliza el orden de números de línea del código fuente como sustituto del dominio del flujo de control.
UnsignedUnderflow.ql — detector principal para enviar.report.md — explicación de la vulnerabilidad y de la consulta.test/mini_tiffcrop_like.c — casos inseguros similares a CVE más controles seguros.test/mini_tiffcrop_variant.c — una variación estructuralmente diferente más control seguro.test/EXPECTED_RESULTS.md — comportamiento positivo/negativo previsto.original/ORIGINAL_VALIDATION.md — lo que debe demostrarse en LibTIFF vulnerable.Desde este directorio:
codeql pack install
Ejemplo en 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"
Ejecutar la consulta:
codeql query run UnsignedUnderflow.ql --database=db-tests
La consulta CodeQL es análisis estático. ASan es evidencia opcional que muestra la consecuencia de las variaciones personalizadas.
gcc -std=c11 -O0 -g -fsanitize=address test/mini_tiffcrop_like.c -o mini1
./mini1 # seguro
./mini1 unsafe-x2 # error de memoria esperado
gcc -std=c11 -O0 -g -fsanitize=address test/mini_tiffcrop_variant.c -o mini2
./mini2 # seguro
./mini2 unsafe # error de memoria esperado
Construya una base de datos CodeQL a partir de una revisión vulnerable de LibTIFF (por ejemplo, 4.3.0) y luego ejecute exactamente la misma consulta UnsignedUnderflow.ql contra esa base de datos. Capture el resultado en tools/tiffcrop.c, especialmente en computeInputPixelOffsets.
El detector no debe modificarse para mencionar tiffcrop, computeInputPixelOffsets, x2 o crop_width; de lo contrario, estaría sobreajustado a una única instancia de CVE y fallaría el requisito de variación de la tarea.