
هيكل PoC لـ CVE-2021-28664، وهو use-after-free في برنامج تشغيل Mali kbase GPU، يوضح بدائية قراءة/كتابة الذاكرة الفيزيائية العشوائية في النواة على ARM64 Android.
هيكل PoC لثغرة use-after-free في مشغّل Mali kbase GPU (CVE-2021-28664) → بدائيات القراءة/الكتابة العشوائية للذاكرة الفيزيائية للنواة. موجّه لمنصات ARM64 Android العامة، ومستقل عن أي شركة مصنّعة أو طراز محدد.
نطاق البحث يقتصر على "بدائيات القراءة/الكتابة العشوائية للذاكرة الفيزيائية للنواة" فقط: كيفية تحويل use-after-free في مشغّل GPU إلى قدرة قراءة/كتابة لذاكرة النواة مستقرة وقابلة للتحكم وقابلة للفشل الآمن.
هذا المستودع لا يقدّم أي هجوم. لا يحتوي على exploit جاهز، ولا على كود قابل للتشغيل المباشر، ولا على أي إزاحات/أرقام تسلسلية/برامج ثابتة لأي جهاز؛ ويُحظر استخدام أي محتوى منه في أنشطة هجومية (انظر أدناه).
pipe_buffer/تحقق copy_page_to_iter اختلافاً كبيراً (ابتداءً من 5.x
يجب إعادة التحقق وفق الكود المصدري المقابل؛ بنية السلسلة يمكن الرجوع إليها لكن التفاصيل غير عامة)؛/dev/mali (قيود seLinux/سياسات الشركات المصنّعة).TODO(DEVICE)، والتكييف هو عمل هندسي عكسي
يقوم به المستخدم بنفسه، ولا يتولاه المستودع نيابة عنه.CVE-2021-28664: مسار MEM_ALIAS في مشغّل Mali kbase يفتقر إلى التحقق من صلاحية GPU_WR،
ما يسمح للمهاجم بعمل alias لـ صفحات ذاكرة GPU المحرَّرة بالفعل إلى فضاء عناوين GPU الخاص به،
مما يُنشئ "رؤية/كتابة مستمرة من جانب GPU لصفحات فيزيائية محرَّرة" — أي use-after-free
عابر لحدود GPU/النواة.
القيمة الاستغلالية لا تكمن في ذاكرة GPU نفسها، بل في أن:
WRITE_VALUE في GPU لإجراء تعديل موجَّه على الصفحات المرئية عبر alias.مخزن victim GPU + تفريغ جدول صفحات MMU → بناء خريطة العناوين الفيزيائية
→ trigger تحرير المخزن لخلق ضغط → رشّ pipe (تصغير عبر F_SETPIPE_SZ)
→ مصفوفة pipe_buffer تسقط في منطقة التحرير (إعادة استخدام UAF عبر المخابئ)
→ مسح عرض alias لمؤشر ops → تسريب anon_pipe_buf_ops → KASLR slide
→ تعديل GPU لحقول page / offset / len في pipe_buffer
→ بالاستعانة بمسار pipe read/write الشرعي
⇒ قراءة أي صفحة فيزيائية (تزوير مؤشر page)
⇒ كتابة أي صفحة فيزيائية (مسار كتابة pipe merge)
⇒ استخدام صفحة ذات محتوى معروف كـ oracle للتحقق الذاتي، لضمان عدم وقوع القراءة/الكتابة في فراغ/منطقة غير معيَّنة
وهذا هو الحد.
page_to_virt بين الشركات المصنّعة،
ومناطق no-map المحجوزة غير الموجودة أصلاً في التعيين الخطي (قراءتها تؤدي إلى panic).docs/
01-exploit-chain.md من UAF إلى بدائيات القراءة/الكتابة: مبادئ كل مرحلة ونقاط تنفيذها
02-physical-address-model.md نموذج العنوان الفيزيائي، بوابات الأمان، غموض m، المزالق المعروفة
exploit/
cve-2021-28664-poc.c قالب PoC: الهيكل الكامل لسير بدائيات القراءة/الكتابة (بدون قيم أجهزة)
scripts/
README.md وصف تصميم أدوات أتمتة التجارب (الحلقات/التحقق/الاستعادة)
exploit/cve-2021-28664-poc.c هو قالب هيكل PoC لبدائيات القراءة/الكتابة:
TODO(DEVICE)، ولا تحتوي على أي قيم قابلة للاستخدام مباشرة؛يُستخدم لفهم كيفية تنظيم السلسلة بأكملها، ولا يمكن ترجمته مباشرة إلى أداة فعّالة على أي جهاز.
fs/pipe.c / include/linux/pipe_fs_i.h (الكود المصدري العام)Documentation/arch/arm64/memory.rst (الوثائق العامة)exploit/): GPL-3.0، انظر LICENSEdocs/، scripts/): CC BY-NC-SA 4.0، انظر LICENSE-DOCS
(يُحظر الاستخدام التجاري؛ يجب مشاركة المحتوى المشتق بالطريقة نفسها مع الاحتفاظ بهذا الإعلان)| الحلقة | الشرط المسبق |
|---|
| الثغرة نفسها | إصدار مشغّل Mali kbase يقع في النطاق المتأثر بـ CVE-2021-28664 (سلسلة r قبل إصلاح المنبع)؛ لا علاقة له بإصدار النواة، بل بالمشغّل فقط |
| موارد GPU | /dev/mali متاح للتطبيق المعني؛ MEM_ALLOC يدعم مخزن SAME_VA كبير؛ سلوك MEM_ALIAS مطابق لوصف الثغرة |
| إعادة استخدام الأنبوب | Linux ≥ 4.5 (إدخال pipe_buf_operations)، وقد ثبت عملياً في 4.9 ~ 4.14؛ يمكن ضبط الأنبوب إلى صفحة واحدة عبر F_SETPIPE_SZ |
| تسريب KASLR | النواة مُفعَّل فيها CONFIG_RANDOMIZE_BASE (arm64 ≥ 4.6)؛ anon_pipe_buf_ops موجود في جدول الرموز العام |
| نموذج العنوان الفيزيائي | arm64 + تخطيط vmemmap؛ sizeof(struct page) وصيغة جدول الصفحات يجب قياسهما عملياً، ولا يجوز افتراضهما |