
CodeQL 탐지기로, CVE-2022-2869의 근본 원인(CWE-191 부호 없는 언더플로)을 제어 흐름/범위 분석을 통해 특정 함수를 하드코딩하지 않고 취약 패턴을 식별합니다.
이 프로젝트는 CVE-2022-2869의 근본 취약점(부호 없는 뺄셈이 산술 연산 전에 충분한 하한/순서 가드를 설정하지 않아 언더플로가 발생할 수 있는 문제)에 대한 일반적인 CodeQL 탐지기를 구현합니다.
이 탐지기는 tiffcrop.c, 함수 이름 또는 변수 이름을 하드코딩하는 대신 근본 원인(CWE-191) 을 의도적으로 보고합니다. 가드 추론이 제어 흐름/범위 분석에 기반한 CodeQL의 표준 Overflow 라이브러리를 사용합니다. 제어 흐름 지배 관계를 대체하기 위해 소스 코드 줄 번호 순서를 사용하지 않습니다.
UnsignedUnderflow.ql — 제출할 기본 탐지기.report.md — 취약점 및 쿼리 설명.test/mini_tiffcrop_like.c — CVE 유사 비안전 사례 및 안전 대조군.test/mini_tiffcrop_variant.c — 구조적으로 다른 변형 및 안전 대조군.test/EXPECTED_RESULTS.md — 의도된 양성/음성 동작.original/ORIGINAL_VALIDATION.md — 취약한 LibTIFF에서 입증해야 할 사항.이 디렉터리에서:
codeql pack install
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"
쿼리 실행:
codeql query run UnsignedUnderflow.ql --database=db-tests
CodeQL 쿼리는 정적 분석입니다. ASan은 커스텀 변형의 결과를 보여주는 선택적 증거입니다.
gcc -std=c11 -O0 -g -fsanitize=address test/mini_tiffcrop_like.c -o mini1
./mini1 # 안전
./mini1 unsafe-x2 # 메모리 오류 예상
gcc -std=c11 -O0 -g -fsanitize=address test/mini_tiffcrop_variant.c -o mini2
./mini2 # 안전
./mini2 unsafe # 메모리 오류 예상
취약한 LibTIFF 리비전(예: 4.3.0)에서 CodeQL 데이터베이스를 구축한 다음, 해당 데이터베이스에 대해 동일한 UnsignedUnderflow.ql 쿼리를 정확히 실행합니다. tools/tiffcrop.c, 특히 computeInputPixelOffsets에서 결과를 확인합니다.
탐지기는 tiffcrop, computeInputPixelOffsets, x2 또는 crop_width를 언급하도록 수정되어서는 안 됩니다. 그렇게 하면 단일 CVE 인스턴스에 과적합되어 과제의 변형 요구 사항을 충족하지 못하게 됩니다.