
CodeQL كاشف للسبب الجذري لـ CVE-2022-2869 (CWE-191 تجاوز سفلي غير موقّع) باستخدام تحليل تدفق التحكم/النطاق لتحديد الأنماط القابلة للاستغلال دون ترميز دوال محددة بشكل ثابت.
ينفّذ هذا المشروع كاشف CodeQL عامًا للضعف الجذري الكامن خلف CVE-2022-2869: عملية طرح بدون إشارة قد تسبب تجاوزًا سفليًا (underflow) لأن البرنامج لم يُنشئ حارسًا كافيًا للحد الأدنى/الترتيب قبل العملية الحسابية.
يُبلّغ الكاشف عمدًا عن السبب الجذري (CWE-191) بدلًا من ترميز tiffcrop.c أو أسماء الدوال أو أسماء المتغيرات بشكل ثابت. يستخدم مكتبة Overflow القياسية في CodeQL، التي يعتمد استدلالها الحارس على تحليل تدفق التحكم/النطاق. لا يستخدم ترتيب أسطر الكود المصدري كبديل عن هيمنة تدفق التحكم.
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 # خطأ ذاكرة متوقع
أنشئ قاعدة بيانات CodeQL من مراجعة LibTIFF قابلة للاختراق (مثلًا 4.3.0)، ثم شغّل نفس استعلام UnsignedUnderflow.ql تمامًا على تلك القاعدة. التقط النتيجة في tools/tiffcrop.c، خاصةً computeInputPixelOffsets.
يجب ألا يُعدَّل الكاشف ليذكر tiffcrop أو computeInputPixelOffsets أو x2 أو crop_width؛ وإلا فسيُفرط في تكييفه مع حالة CVE واحدة وسيفشل في تلبية متطلب الاختلاف في المهمة.