
عدة تجذير لجهاز 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
| الملف | الصيغة | الحجم | الغرض |
|---|---|---|---|
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 |
المجاميع الاختبارية 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، لذا فإن
عنوان الجدول النهائي وقت التشغيل هو 0xc04d0e04.sp الحالي،
ويحاذيه مع حجم مكدس النواة البالغ 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 للقراءة فقط.كانت الدالة الأصلية 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.