
هذا دليل على المفهوم لـ CVE-2025-38352، وهي ثغرة في تطبيق مؤقتات POSIX CPU في نواة لينكس. تذكر نشرة أندرويد لشهر سبتمبر 2025 أن هذه الثغرة قد استُخدمت في استغلال محدود وموجه في البرية.
يحتوي هذا المستودع فقط على إثبات المفهوم الذي يُشغّل الثغرة.
لقد قمت منذ ذلك الحين بكتابة استغلال كامل لهذه الثغرة. يمكنك العثور على التفاصيل في الرابط أدناه.
https://github.com/farazsth98/chronomaly

يعتمد إثبات المفهوم حقًا على كيفية استهلاك وقت وحدة المعالجة المركزية بواسطة استدعاء النظام getpid.
لتحقيق ذلك، حرصت على جعل إثبات المفهوم غير مرتبط بالنظام قدر الإمكان - أي أنه يجب أن يعمل على نظامك حتى لو كان استدعاء النظام getpid يستهلك وقتًا أكثر/أقل بكثير من نظامي.
هذا هو إثبات مفهوم لـ CVE-2025-38352، وهي ثغرة سباق (race condition) في تطبيق موقّعات وحدة المعالجة المركزية POSIX في نواة لينكس. ذكرت نشرة أندرويد لشهر سبتمبر 2025 أنه تم استخدام هذه الثغرة في استغلال محدود وموجه في البرية.
تم كتابته لـ LTS 6.12.33، ويتطلب إيقاف تشغيل CONFIG_POSIX_CPU_TIMERS_TASK_WORK في تكوين النواة. بالإضافة إلى ذلك، قمت أيضًا بتشغيل الاستباقية الكاملة (CONFIG_PREEMPT=y) لأن هذا ما تستخدمه نواة أندرويد.
بمجرد الفوز بالسباق، يؤدي ذلك إلى استخدام بعد التحرير (use-after-free) لهيكل struct k_itimer.
لمزيد من المعلومات حول إعداد بيئة الاختبار، يرجى الرجوع إلى منشور المدونة المرتبط أعلاه، وتحديدًا قسم "ملخص بيئة الاختبار".
ملاحظة: لا يلزم وجود تصحيحات لكي يعمل إثبات المفهوم هذا (أضع هذا هنا لأن إثبات المفهوم السابق كان يحتاج نوعًا ما إلى mdelay بقيمة 500 مللي ثانية 😅).
لقد نجح إثبات المفهوم دائمًا بالنسبة لي في غضون 100 محاولة (لم يصل فعليًا إلى أكثر من 60 محاولة). يمكن تحسين الموثوقية في بعض الأماكن برأيي، لكنني سأعمل على ذلك لاحقًا.
يحتوي الملف profiler_patch.diff على تصحيح لتطبيق بعض كود التوصيف (profiling) على handle_posix_cpu_timers(). وهو مفيد لمعرفة كيفية توسيع نافذة السباق، حيث يطبع مقدار وقت التنفيذ المستخدم من قبل تكرار قائمة firing هنا.
قم بتجميعه باستخدام Makefile المرفق وقم بتشغيله بـ /poc.
إذا كنت ترغب في تشغيل الملف الشخصي (profiler)، قم بتجميعه بنفس طريقة إثبات المفهوم.
تواصل معي على تويتر أو أي مكان آخر إذا كان لديك أي أسئلة.