
CodeQL detector para a causa raiz da CVE-2022-2869 (CWE-191 underflow sem sinal) usando análise de fluxo de controle/intervalo para identificar padrões vulneráveis sem codificar funções específicas.
Este projeto implementa um detector CodeQL genérico para a fraqueza raiz por trás da CVE-2022-2869: uma subtração sem sinal que pode sofrer underflow porque o programa não estabeleceu uma proteção suficiente de limite inferior/ordem antes da operação aritmética.
O detector relata deliberadamente a causa raiz (CWE-191) em vez de codificar diretamente tiffcrop.c, nomes de funções ou nomes de variáveis. Ele usa a biblioteca padrão Overflow do CodeQL, cujo raciocínio de proteção é baseado em análise de fluxo de controle/intervalo. Ele não usa a ordenação por número de linha do código-fonte como substituto para a dominância de fluxo de controle.
UnsignedUnderflow.ql — detector principal a ser submetido.report.md — explicação da vulnerabilidade e da consulta.test/mini_tiffcrop_like.c — casos inseguros semelhantes à CVE, além de controles seguros.test/mini_tiffcrop_variant.c — uma variação estruturalmente diferente, além de controle seguro.test/EXPECTED_RESULTS.md — comportamento positivo/negativo pretendido.original/ORIGINAL_VALIDATION.md — o que deve ser demonstrado no LibTIFF vulnerável.A partir deste diretório:
codeql pack install
Exemplo em 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"
Executar a consulta:
codeql query run UnsignedUnderflow.ql --database=db-tests
A consulta CodeQL é análise estática. ASan é uma evidência opcional que mostra a consequência das variações personalizadas.
gcc -std=c11 -O0 -g -fsanitize=address test/mini_tiffcrop_like.c -o mini1
./mini1 # seguro
./mini1 unsafe-x2 # erro de memória esperado
gcc -std=c11 -O0 -g -fsanitize=address test/mini_tiffcrop_variant.c -o mini2
./mini2 # seguro
./mini2 unsafe # erro de memória esperado
Construa um banco de dados CodeQL a partir de uma revisão vulnerável do LibTIFF (por exemplo, 4.3.0) e, em seguida, execute exatamente a mesma consulta UnsignedUnderflow.ql contra esse banco de dados. Capture o resultado em tools/tiffcrop.c, especialmente em computeInputPixelOffsets.
O detector não deve ser alterado para mencionar tiffcrop, computeInputPixelOffsets, x2 ou crop_width; caso contrário, ele ficaria superajustado a uma única instância da CVE e falharia no requisito de variação da tarefa.