
PoC محمي ومصدري فقط لاستغلال ثغرة CVE-2026-43499 في جهاز Humane AI Pin
GhostLock لـ Humane AI Pin هو إثبات مفهوم مفتوح المصدر لجذر مقيّد بنطاق الإقلاع (boot-scoped root) لبناء برنامج ثابت واحد محدد من نسخة البيع بالتجزئة. يستغل CVE-2026-43499، وهو ثغرة use-after-free في rtmutex بنواة Linux، من خلال صدفة ADB عادية مصرّح بها.
المشغّل ضيّق النطاق عن قصد. يتحقق من بصمة البرنامج الثابت الكاملة، وبناء النواة، والفتحة (slot)، ومعرّف المستخدم للصدفة (shell UID)، وحالة SELinux قبل أن يجهّز أي شيء. أي عدم تطابق يوقف التشغيل.
[!WARNING] هذا استغلال للنواة. قد يتسبب في panic أو إعادة تشغيل أو تعليق قوي للـ Pin. قد يتطلب التعليق القوي فصل الجهاز وانتظار نفاد البطارية. استخدمه فقط على Pin تملكه وتستطيع تحمّل استعادته. يختفي الجذر عند إعادة التشغيل.
| الخاصية | القيمة المقبولة |
|---|---|
| الجهاز | Humane AI Pin، وحدة بيع بالتجزئة |
| البرنامج الثابت | qti/atoll/atoll:12/SKQ1.230401.001/101.000470.45.20:user/release-keys |
| Android | 12 |
| النواة | 4.14.190-perf، بُنيت في Mon Nov 4 18:37:23 PST 2024 |
| الفتحة | _b فقط |
| المعمارية | aarch64 |
| الملف التعريفي | humane-aipin-45.20 |
| Kernel Image SHA-256 | d4f4e0deb20871fce207f1f095ba1934162081c2f10afaccbb2e6a1e938719fb |
| إعادة تشغيل المرشّح للإصدار | في انتظار إعادة التشغيل النهائية النظيفة عند الإقلاع |
يُرفض كل من الفتحة _a، والبرنامج الثابت الخاص بالمطوّرين، وإصدارات البرنامج الثابت القريبة، ومنتجات Qualcomm atoll الأخرى. راجع تفاصيل التوافق. بصمة Android المطابقة ليست كافية لتجاوز هذا الفحص: قد تحمل الفتحتان A/B صور إقلاع وتخطيطات نواة مختلفة تحت نفس هوية بناء مساحة المستخدم.
تحتاج إلى:
adb، وPython 3.10 أو أحدث، وmake، ومترجم C؛28.2.13676358 (r28c) لبناء الحمولة (payload).لا يحتوي هذا المستودع على مفتاح ADB خاص، أو صورة برنامج ثابت، أو صورة إقلاع، أو bugreport، أو سجل جهاز، أو حمولة مبنية مسبقًا.
ثبّت NDK المثبّتة (pinned) باستخدام أدوات سطر أوامر Android:
sdkmanager "ndk;28.2.13676358"
تأكد من أن ADB يرى الـ Pin بالفعل كـ device:
$ adb devices
List of devices attached
YOUR_SERIAL device
استنسخ المستودع، ثم استخدم نفس الرقم التسلسلي الصريح في كل أمر:
git clone https://github.com/TheAndersMadsen/humane-aipin-ghostlock.git
cd humane-aipin-ghostlock
./ghostlock check --serial YOUR_SERIAL
./ghostlock run --serial YOUR_SERIAL
./ghostlock verify --serial YOUR_SERIAL
check للقراءة فقط. يطبع البرنامج الثابت المكتشف، والنواة، والفتحة، وحدود الصدفة، وحالة SELinux، والبطارية، ومصدر الطاقة، وإصدار NDK.
run ينفّذ محاولة واحدة محروسة. يطلب منك كتابة ROOT YOUR_SERIAL، ويبني من المصدر، ويتحقق من تجزئة الحمولة بعد دفعها، ويلتقط bugreport للإقلاع الحالي لاستخلاص KASLR، ويحذف ذلك الـ bugreport الخام افتراضيًا، ويبدأ الاستغلال فقط بعد فحص مسبق كامل ثانٍ.
verify يطلب بشكل مستقل من وسيط الجذر المقيّد بنطاق الإقلاع تشغيل id وgetenforce.
التحقق الناجح يبدو هكذا:
uid=0(root) gid=0(root) groups=0(root) context=u:r:kernel:s0
SELinux: Permissive
Boot epoch: <redacted>; uptime: <redacted>s
سياق SELinux الدقيق خاص بالنواة والبرنامج الثابت. شرط القبول هو UID/GID 0 عبر الوسيط مع SELinux في وضع permissive على نفس الإقلاع.
بالنسبة للإقلاع الحالي، تقوم الحمولة بما يلي:
init_cred؛/data/local/tmp/su؛لا تكتب قسمًا (partition)، ولا تفتح الـ bootloader، ولا تثبّت وحدة (module)، ولا تعدّل verified boot، ولا تنشئ استمرارية عبر إعادة التشغيل، ولا تتصل بخدمة شبكة، ولا ترفع قياسات (telemetry).
شغّل أمر جذر من صدفة ADB أخرى باستخدام:
adb -s YOUR_SERIAL shell '/data/local/tmp/su -c id'
يسمح المشغّل بمحاولة واحدة لكل إقلاع نواة. إذا أبلغ عن فشل، أو مهلة، أو انقطاع، أو حالة غير مؤكدة، أو panic، أو إعادة تشغيل، فلا تعد المحاولة على ذلك الإقلاع. أعد التشغيل أولًا ثم شغّل check مرة أخرى.
إذا كان ADB لا يزال يستجيب:
adb -s YOUR_SERIAL reboot
إذا كان الـ Pin معلّقًا تعليقًا قويًا وADB لا يستجيب، افصل كل الطاقة الخارجية. لا يمتلك الجهاز المُختبَر من نسخة البيع بالتجزئة إعادة تشغيل قسرية موثوقة يمكن للمستخدم الوصول إليها، لذا قد تتطلب الاستعادة انتظار نفاد البطارية قبل إعادة توصيل الطاقة.
بعد إعادة تشغيل عادية، يختفي الجذر. قد تبقى الملفات المجهّزة خاملة تحت /data/local/tmp؛ يمكن لصدفة نظيفة إزالتها:
adb -s YOUR_SERIAL shell + 'rm -f /data/local/tmp/ghostlock-aipin.so /data/local/tmp/su + /data/local/tmp/.ghostlock-su.sock + /data/local/tmp/.ghostlock-aipin-attempt'
اقرأ SAFETY.md قبل استخدام PoC وTROUBLESHOOTING.md قبل إعادة محاولة تشغيل فاشل.
تُكتب سجلات التشغيل في دليل مؤقت بصلاحيات 0700. تحتوي على رقم تسلسلي للجهاز، وهوية الإقلاع، وعناوين النواة، وقياسات الاستغلال. لا تُرفق أبدًا ذلك الدليل أو bugreport خام من Android في مشكلة (issue).
أنشئ تقريرًا مختصرًا بدلًا من ذلك:
./ghostlock report /private/tmp/ghostlock-aipin-TIMESTAMP + --output ghostlock-report.json
راجع ملف JSON قبل مشاركته. يحذف المُنقّح (redactor) الأرقام التسلسلية، ومعرّفات الإقلاع، ومسارات المضيف، ومخرجات الأوامر الخام، وعناوين النواة. راجع PRIVACY.md.
ابنِ حمولة Android:
./ghostlock build
شغّل جميع اختبارات المضيف وعمليتي بناء مستقلتين:
./scripts/verify-release.sh
تُكتب الحمولة إلى:
source/build/humane-aipin-45.20/bin/preload.so
يتم تجاهل منتجات البناء بواسطة Git. يجب التحقق من أصول الإصدار مقابل المجاميع الاختبارية (checksums) المرفقة بإصدار GitHub المقابل.
يستخدم الاستغلال rt_mutex_waiter المعلّق على المكدس الخاص بالثغرة لتوجيه تحديث شجرة حمراء-سوداء مُتحكَّم به. يقوم KernelSnitch أولًا بتسريب عنوان mm_struct عبر توقيت futex-hash. ثم تُثبت بوابة perf-event من نفس PFN أن صفحة slab من الرتبة 3 المُحرَّرة قد استُعيدت ببيانات socket-buffer مُتحكَّم بها قبل أن يتمكن مُشغّل الإفساد (corruption trigger) من المتابعة. تُشتق قاعدة KASLR المرتبطة بالإقلاع من اثنين على الأقل من مراسي WARN المتوافقة للإقلاع الحالي. يحل مسار القراءة/الكتابة الناتج المهمة الحالية وينفّذ تغيير بيانات الاعتماد المقيّد بنطاق الإقلاع.
يحتوي الملف التعريفي للهدف فقط على الإزاحات (offsets) والرموز (symbols) التي يستهلكها هذا المسار. لا يتم توزيع Kernel Image وجدول الرموز الكامل. يصف TECHNICAL.md المراحل وبوابات الفشل الآمن (fail-closed gates).
هذا إصدار بحثي تجريبي لجهاز استهلاكي غير مدعوم. ليس أداة تجذير (rooting) عامة لنظام Android وليس تابعًا لـ Humane أو HP أو CosmOS.
الكود مرخّص بموجب Apache-2.0. يبدأ التنفيذ من عمل CyberMeowfia المرخّص بموجب Apache-2.0 من NebuSec؛ ويُوثَّق نقل AI Pin وأدوات الإصدار في PROVENANCE.md وTHIRD_PARTY_NOTICES.md.
يرجى قراءة SECURITY.md قبل الإبلاغ عن ثغرة أمنية أو مخاوف إساءة الاستخدام.