Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
cheese — CVE-2025-21479 دليل المفهوم، أعتقد | Kitploit
أدوات/GitHubGitHub/zhuowei/cheese
أمان أندرويدأمان الأنظمة المدمجةتصعيد الامتيازاتتحليل الثغرات الأمنيةالاستغلالالهندسة العكسيةأمن الجوالأمن الأجهزةتحليل البرامج الثابتةاستغلال الملفات الثنائية
GitHubzhuowei/cheese
268595منذ سنة واحدةتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

cheese

CVE-2025-21479 دليل المفهوم، أعتقد

عرض المستودع

اختراق جذر لـ Quest 3/3S لتحديث 7 أغسطس 2025 والإصدارات الأقدم، استنادًا إلى CVE-2025-21479.

screenshot of Magisk, Cheese, and Termux with a root shell

تحذير:

  • التجذير خطير. إذا تسببت في تلف Quest 3/3S، فلا توجد طريقة لإصلاحه.

  • هذا يعطل كل الأمان عند التجذير المؤقت.

  • لا تقم بتشغيل تطبيقات أو تصفح مواقع لا تثق بها.

  • لا تكتب على قسم الإقلاع أو النظام. سوف يتلف الجهاز.

  • لا تستخدم ميزة "تثبيت" في Magisk.

  • قد ترغب في عمل نسخة احتياطية من deviceKey و Meta Access Token و Oculus Access Token بعد التجذير.

تحميل

يمكنك تنزيل APK من قسم الإصدارات.

دليل التجذير

راجع دليل FreeXR لتجذير Quest 3/3S.

انضم إلى FreeXR على Discord لمزيد من المعلومات.

الإصدارات المدعومة

  • Quest 3: v79 5115411.12900.520 (7 أغسطس 2025) وما دونه، حتى الإصدار v71 تقريبًا.
  • Quest 3S: v79 117688.9900.610 (6 أغسطس 2025) وما دونه، حتى الإصدار v71 تقريبًا.

لا يتم دعم الإصدارات الأحدث. (يمكن دعم الإصدارات الأقدم بمزيد من العمل.)

الإصدارات غير المدعومة

قامت Meta بتصحيح CVE-2025-21479 في هذه الإصدارات وأي إصدارات أحدث. لن يتم دعمها أبدًا.

  • Quest 3: v79 5115411.13420.520 (10 أغسطس 2025)
  • Quest 3S: v79 117688.10380.610 (10 أغسطس 2025)

يحتوي على كود من:

  • adrenaline من Project Zero
  • adreno_user من m-y-mo
  • Freedreno من Mesa
  • shellcode من Longterm Security
  • Magisk من topjohnwu ومطوري Magisk.

المصدر

يحتوي هذا المستودع على الكود المصدري للأمر التنفيذي cheese.

يحتوي مستودع cheese-app على الكود المصدري للتطبيق.

شكر

يعتمد هذا على كتابات باحثين آخرين عن معالج Adreno GPU: يستخدم هذا كودًا من:

  • Project Zero/Ben Hawkes's Adrenaline
  • GitHub Security/Man Yue Mo's adreno_user
  • Freedreno/Rob Clark's kilroy

معلومات إضافية عن برنامج Adreno GPU الثابت، بما في ذلك كيفية مقارنة البرنامج الثابت وكيفية عمله، مأخوذة من توثيق afuc لمشروع Freedreno بواسطة Rob Clark و Connor Abbott ومساهمين آخرين في Freedreno/Turnip.

شكر للمطورين في XRBreak و FreeXR على كل مساعداتهم ومساهماتهم.

====

إثبات المفهوم لـ CVE-2025-21479، يوضح أنه يؤثر فقط على أجهزة Adreno A7xx (Snapdragon 8 Gen 1 / XR2 Gen 2 والإصدارات الأحدث).

هذا يختبر فقط ما إذا كان الجهاز معرضًا للخطر - لتحقيق أي شيء مثير للاهتمام، سيتطلب الأمر مزيدًا من الجهد.

على أجهزة Adreno A7xx غير المصححة، يجب أن يطبع هذا:

root@kitploit:~
0 0

وإذا قمت بتشغيل adb bugreport، في نواة dmesg، سترى:

root@kitploit:~
<2>[146532.566695][  T933] kgsl kgsl-3d0: GPU PAGE FAULT: addr = 4000031004 pid= 0 name=(null) drawctxt=1111638594 context pid = 0
<2>[146532.566756][  T933] kgsl kgsl-3d0: context=gfx3d_user TTBR0=0x1234567841414141 (write unknown fault)
<2>[146532.566783][  T933] kgsl kgsl-3d0: FAULTING BLOCK: CP

على أجهزة Adreno A6xx، يطبع هذا:

root@kitploit:~
41414141 42424242

https://notnow.dev/notice/AvIZRBttG7DsDhx9hw

يجب أن يطبع أجهزة Adreno A7xx المصححة (مثل أجهزة Samsung بعد تحديث أمان مايو 2025) هذا أيضًا، لكنني لم أختبره.

كيفية الاستخدام

root@kitploit:~
# تعديل المسار ليشير إلى Android NDK الخاص بك
bash build.sh
adb push cheese /data/local/tmp
adb shell /data/local/tmp/cheese

كيف يعمل

https://notnow.dev/notice/Av4sfoQjyrxogkZ6Ya

يقوم هذا بتشغيل مخزن أوامر على معالج Adreno GPU (باستخدام نسخة معدلة من كود Adrenaline لمشروع Project Zero)

قم بتشغيل CP_SET_MODE - هذا يتيح تشغيل حالات الرسم فورًا.

قم بتشغيل CP_SET_DRAW_STATE - هذا يضبط IB_LEVEL إلى 0x4، ثم يستدعي مخزن تعليمات.

داخل CP_SET_DRAW_STATE، قم بتشغيل CP_SMMU_TABLE_UPDATE.

إليك معالجة البرنامج الثابت لـ CP_SMMU_TABLE_UPDATE:

root@kitploit:~
CP_SMMU_TABLE_UPDATE:
// احصل على مستوى IB
and $02, $12, 0x3
// إذا لم يكن 0 (مخزن الحلقة kernel)، اذهب إلى CP_NOP
brne $02, 0x0, #l1873
<كود تعديل SMMU الفعلي >

إذن، مع IB_LEVEL=4، إخفاء 4 بـ 3 يعطيك 0، مما يجتاز الفحص الخاص بمخزن الحلقة kernel.

لذا يمكنك تغيير جداول الصفحات ويؤدي ذلك إلى فشل GPU.

كيف قارنت التصحيح

قارنت عدة برامج ثابتة لـ Samsung Galaxy باستخدام مفكك afuc لمشروع Freedreno.

كان البرنامج الثابت لـ Galaxy S24 الأكثر فائدة، حيث أن برنامج GPU الثابت الخاص به يختلف بإصدار واحد فقط - وهو التصحيح الأمني:

https://notnow.dev/notice/AuueszvUVUQnWqMQeO

https://notnow.dev/notice/Av0kDfOUPKhqHyjyxE

البرنامج الثابت لـ Galaxy S24: gen70900_sqe.fw

  • تحديث أبريل (S921USQU4BYD9): v675
  • تحديث مايو (S921USQS4BYE4): v676

https://notnow.dev/notice/Av0a7wUouVSa3EKkE4

مقارنة برنامج Adreno الثابت لـ Galaxy S24 بين v675 و v676 تظهر نوعًا واحدًا من الاختلاف:

root@kitploit:~
        0163: b80300a4  CP_ME_INIT:
        0163: b80300a4  fxn355:
        0163: b80300a4  cread $03, [$00 + 0x0a4]
-       0164: 2a440003  and $04, $12, 0x3
+       0164: 2a440007  and $04, $12, 0x7
        0165: 98641813  ushr $03, $03, $04
        0166: c860004a  brne $03, b0, #l432
        0167: 01000000  nop

كل وصول إلى $12 الآن يستخدم 0x7 بدلاً من 0x3. لا توجد تغييرات أخرى.

https://gist.github.com/zhuowei/46a68b9ee53589cdeaa40c11d15d895f

يبدو أن المسجل $12 هو مستوى IB: https://gitlab.freedesktop.org/mesa/mesa/-/blob/c0f56fc64cad946d5c4fda509ef3056994c183d9/src/freedreno/afuc/README.rst#id23 https://gitlab.freedesktop.org/mesa/mesa/-/blob/c0f56fc64cad946d5c4fda509ef3056994c183d9/src/freedreno/afuc/README.rst#id29

الذي يحدد أي قائمة من أوامر الرسم سيتم قراءتها. https://gitlab.freedesktop.org/mesa/mesa/-/blob/c0f56fc64cad946d5c4fda509ef3056994c183d9/src/freedreno/afuc/README.rst#id31

يدعم جهاز Adreno 7xx 5 قوائم (RB (مخزن الحلقة kernel، متميز)، IB1، IB2، IB3، أو SDS): https://cs.android.com/android/platform/superproject/main/+/main:external/mesa3d/src/freedreno/registers/adreno/adreno_control_regs.xml;l=327;drc=c0867f48117dc2c18b1ae689235cb1f60b237600

https://notnow.dev/notice/Av0kDfOUPKhqHyjyxE

أعتقد أن هذا الاختلاف هو CVE-2025-21479. يبدو أنه يؤثر فقط على أجهزة Adreno A7xx (Snapdragon 8 Gen 1 وما فوق). ربما يكون نشرة Qualcomm خاطئة؟

  • لدى A6xx 4 مستويات IB: RB، IB1، IB2، SDS: SDS=0x3
  • يضيف A7xx IB3: الآن هناك 5 مستويات IB: RB، IB1، IB2، IB3، SDS=0x4.
  • SDS الآن 0x4، لذا الإخفاء بـ 0x3 يعطي 0x0.

أعتقد، على جهاز Adreno A7xx:

  • إذا تمكنت من تشغيل أوامر عند مستوى IB 4 (SDS) باستخدام CP_SET_DRAW_STATE
  • والعثور على أمر يفحص مستوى IB = RB (مخزن الحلقة الذي يوفره kernel)، مثل CP_SMMU_TABLE_UPDATE
  • يمكنك خداعه لتجاوز الفحص

وفقًا لمدونة Project Zero، فإن تعليمة CP_INDIRECT_BUFFER تستدعي مخزنًا غير مباشر من تعليمات معالج التحكم،

عندما يريد تطبيق استخدام GPU، سيحتوي RB (مخزن الحلقة kernel) على أمر CP_INDIRECT_BUFFER يستدعي مخزنًا غير مباشر يوفره المستخدم - IB1. يمكن لهذا المخزن المستخدم استدعاء مخازنه غير المباشرة الخاصة: IB2. على A7xx، يوجد أيضًا IB3.

بالإضافة إلى ذلك، على كل من A6xx و A7xx، يوجد SDS، الذي لا يتم الدخول إليه بواسطة المخزن غير المباشر، بل بواسطة CP_SET_DRAW_STATE.

https://cs.android.com/android/platform/superproject/+/android15-qpr2-release:external/mesa3d/src/freedreno/decode/cffdec.c;l=3030;drc=0dc791ed57dacf9fe3df694d7f285a8d9f942fa7 https://cs.android.com/android/platform/superproject/+/android15-qpr2-release:external/mesa3d/src/freedreno/decode/cffdec.c;l=2283;drc=0dc791ed57dacf9fe3df694d7f285a8d9f942fa7

يمتلك A6xx RB، IB1، IB2، SDS. يقوم CP_SET_DRAW_STATE بتعيين مستوى IB إلى 0x3: في a650_sqe.fw.v114 من برنامج Galaxy Fold 3 الثابت:

root@kitploit:~
mov $03, 0x3
or $12, $12, 0x20
call #fxn1132 // يوجد فتحة تفرع، لذا هذا لا ينفذ بعد...
cwrite $03, [$00 + @IB_LEVEL]

لكن A7xx الآن يمتلك RB، IB1، IB2، IB3، أو SDS. يقوم CP_SET_DRAW_STATE الآن بتعيين مستوى IB إلى 0x4:

root@kitploit:~
mov $03, 0x4
cwrite $03, [$00 + @IB_LEVEL]

0x4 & 0x3 = 0x0.

https://cs.android.com/android/platform/superproject/main/+/main:external/mesa3d/src/freedreno/registers/adreno/adreno_control_regs.xml;l=327;drc=c0867f48117dc2c18b1ae689235cb1f60b237600

لذا، سيعتقد الكود الذي يفحص مستوى IB الحالي أن SDS (تعيين حالة الرسم) هو RB (مخزن الحلقة kernel)، وسيسمح بأوامر مثل CP_SMMU_TABLE_UPDATE بالتنفيذ.

تنزيل الأداة