
إثبات المفهوم لـ CVE-2021-33624
قم بالتجميع باستخدام
gcc -pthread -o bpf_spectre_type_confusion bpf_spectre_type_confusion.c -Wall -ggdb -std=gnu99
وقم بالتنفيذ باستخدام
(sudo) ./bpf_spectre_type_confusion 1 2 ffffffffa4925620 0x10
حيث 1 و 2 هما خيطا معالجة (CPU threads) يعملان على نواتين ماديتين منفصلتين، وffffffffa4925620 هو عنوان الذاكرة المستهدف الذي نريد تسريبه، و0x10 هو عدد البايتات المطلوب تسريبها. تم إصلاح الثغرة، لكن لا يزال من الممكن ملاحظة النتائج بتنفيذ الكود بصلاحيات sudo، لأن الإجراءات المضادة تُطبَّق فقط في حالة عدم استخدام sudo.
يمكن الحصول على عنوان المثال للتسريب من sudo cat /proc/kallsyms | grep core_pattern، ويمكن رؤية النتيجة المتوقعة باستخدام cat /proc/sys/kernel/core_pattern
اكتشف Piotr أثناء بحثه استخدام تعليمات DIV (المصحَّحة داخليًا لتتضمن فرعًا لتفادي استثناءات القسمة على صفر) لتضليل مُنبئ الفروع (branch predictor). المرجع https://www.openwall.com/lists/oss-security/2021/06/21/1
شكر خاص إلى Jann Horn، الذي طور الأساس لكود الاستغلال هذا في بحثه الأولي (https://bugs.chromium.org/p/project-zero/issues/detail?id=1711)