
Honor 80 GT (MagicOS 8.0.0.128, kernel 5.10.168) إثبات مفهوم لتصعيد الامتيازات: GhostLock (CVE-2026-43499) + تحميل وحدة KernelSU مخصصة
الإنجليزية | 中文
استغلال محلي لتصعيد الصلاحيات على Honor 80 GT (AGT-AN00)، CVE-2026-43499 — وهو ثغرة استخدام-بعد-التحرير (use-after-free) في مسار remove_waiter الخاص بـ rtmutex في النواة — بالإضافة إلى حل مصاحب لتحميل وحدات نواة KernelSU.
من حيث المبدأ، تنطبق الثغرة والتقنيات المذكورة هنا على كل إصدارات MagicOS حتى 9.0.0.220. الإصدارات المُكيَّفة:
| MagicOS | النواة | الحالة |
|---|---|---|
| 8.0.0.128 | 5.10.168 | تم التحقق |
| 8.0.0.160 | 5.10.209 | تم التحقق |
| 9.0.0.157 | 5.10.209 | تم التحقق |
| 9.0.0.200SP1 | 5.10.236 | تم التحقق |
| 9.0.0.220SP2 / SP4 | 5.10.236 | تم التحقق على الجهاز (يحمل SP4 نفس صورة الإقلاع مثل SP2) |
من المتوقع أن تعمل الإصدارات الأخرى في سلسلة 9.0 بعد إعادة توليد جدول الإزاحات (src/targets/) وإعادة التحقق من خانة حامل الـ kstack.
⚠️ تحذير
- لأغراض البحث الأمني على جهازك الخاص فقط.
- الاستخدام على مسؤوليتك الخاصة. لا يأتي هذا البرنامج مع أي ضمان من أي نوع (انظر LICENSE). من الناحية النظرية، لا ينبغي أن يؤدي مجرد تشغيله إلى تعطيل جهازك أو فقدان بياناتك، لكن قم بعمل نسخة احتياطية أولًا على أي حال؛ كل ما يحدث — سواء من تشغيل هذا الكود أو من أي شيء تفعله بصلاحية الجذر التي يمنحها — هو مسؤوليتك أنت، وليست مسؤولية المؤلفين.
- يعدّل الاستغلال ذاكرة النواة عبر ثغرة UAF. تؤدي المحاولة الفاشلة إلى إعادة تشغيل الجهاز؛ وتعيد إعادة التشغيل كل شيء إلى حالته الأصلية. النجاح ليس مضمونًا 100% في كل تشغيل — فقط أعد المحاولة.
- الجذر يعني سيطرة كاملة على الجهاز — استخدمه بحذر. هذا المشروع يمنحك الجذر فقط؛ وميض الصور، أو كتابة الأقسام، أو تعطيل وسائل الحماية، أو تثبيت وحدات غير مختبرة بعد ذلك يمكن أن يُعطّل الجهاز بشكل دائم، وهذا يقع على عاتقك.
exploit/ GhostLock PoC source (Android arm64) + build system
src/ exploit core: futex UAF, KASLR slide, sysctl boot_id hijack,
arbitrary R/W, cred/SELinux/sig_enforce writes, KSU load
src/targets/ per-firmware offset tables (target.h)
ksu/ custom kernelsu.ko build (MagicOS kernel + device config) and the
PC-side adb load driver
tools/ on-device load helpers: load_ko.c / kmsg_dumper.c (built from
source), policy rules, loader template (+ where to get the
binaries)
المتطلبات: Docker وأدوات Android Platform Tools.
حزم مُجمَّعة مسبقًا لكل إصدار برنامج ثابت: احصل على الحزمة المطابقة لإصدار MagicOS لديك من Releases، وفك ضغطها على الحاسوب المضيف، ثم شغّل:
./setup.sh # PC, with adb: checks the kernel version, pushes
# everything, runs the chain, retries on the
# occasional miss
لا يتوفر حاسوب؟ فك ضغط الحزمة على الهاتف وشغّل نفس السكربت من صدفة Shizuku (rish) — إذ يكتشف مكانه وينفذ الباقي محليًا:
sh /sdcard/ghostlock-<version>/setup.sh
بدلًا من ذلك، ابنِ من المصدر:
# 1. Build the device exploit binary
cd exploit && ./docker-build.sh bin # exploit_static (8.0.0.128)
# 8.0.0.160: ./docker-build.sh PROJECT=annap-AGT-AN00_8.0.0.160 bin
# (./docker-build.sh ondevice builds the static binary with the default
# env config baked in; first run pulls the NDK, ~1.2GB)
# 2. Obtain/build the KSU bundle binaries into ksu/tools/ —
# see ksu/tools/README.md (kernelsu_h80gt.ko: ksu/README.md — build it
# against the opensource tree matching your firmware's kernel sublevel;
# ksud: shipped in the repo; magiskpolicy: shipped in the repo; load_ko/kmsg_dumper:
# ./docker-build.sh tools)
# 3. Enable ADB debugging on the phone, then
bash ../ksu/ksu_load_ko.sh
# 8.0.0.160: PROJECT=annap-AGT-AN00_8.0.0.160 bash ../ksu/ksu_load_ko.sh
يقود السكربت السلسلة بأكملها عبر adb: GhostLock (الجذر + الوضع المتساهل + قلب قيمة sig_enforce)، وحقن سياسة SELinux عبر magiskpolicy، وربط (bind-mount) kallsyms مزيّف، وload_ko (init_module)، ثم مراحل تشغيل ksud، مع استعادة وضع الإلزام في SELinux كخطوة أخيرة تمامًا. انتظر ظهور kernelsu في /proc/modules، ثم افتح مدير KernelSU (الذي يعرض "Working <LKM> [Jailbreak mode]").
CONFIG_MODULE_SIG_FORCE=y — يمنع علم sig_enforce وقت التشغيل تحميل الوحدات غير الموقَّعة؛ يقلب الاستغلال قيمته مؤقتًا إلى 0 (يعيد سكربت المُحمِّل ضبطه إلى 1 بمجرد تحميل الوحدة).commit_creds وأخواتها من /proc/kallsyms، لذلك لا يمكن لمُحمِّل النواة حلّ الرموز غير المعرَّفة في الوحدة .ko. يقوم التدفق بربط (bind-mount) kallsyms مزيّف بحيث تُدرَج الرموز المزالة في بدايته مع عناوينها الفعلية وقت التشغيل (عنوان الربط + إزاحة KASLR).android12-5.10_kernelsu.ko القياسي من GKI مباشرة. يعيد ksu/ بناء KernelSU v3.2.5 مقابل شفرة مصدر نواة MagicOS المطابقة للمستوى الفرعي للبرنامج الثابت وإعداد نواة الجهاز نفسه. انظر ksu/README.md.السلسلة الكاملة (UAF ← KASLR ← قراءة/كتابة اعتباطية ← cred ← وضع SELinux المتساهل ← sig_enforce ← تشغيل KernelSU، مع استعادة وضع الإلزام وboot_id) تم التحقق منها على جهاز حقيقي لكل إصدار في الجدول أعلاه. قد تخطئ المحاولة في مرحلة مبكرة وتُعيد تشغيل الهاتف (في حوالي ربع الحالات)؛ يعيد سكربت الإعداد المحاولة تلقائيًا، أو فقط أعد تشغيله مرة أخرى.
exploit/، ووثائق المستوى الأعلى) مرخّصة بموجب رخصة Apache 2.0 (انظر LICENSE)، تمامًا مثل إثبات المفهوم الأصلي IonStack الذي اشتُق منه هذا النقل.ksu/ مرخّصة بموجب GPL-2.0 (انظر ksu/LICENSE): init-h80gt.patch ومجموعة سياسات ksu_rules.annotated مشتقّة من دليل kernel/ في KernelSU، وهذا الدليل مرخّص بموجب GPL-2.0.