
CVE-2015-1805 का उपयोग करने वाला HP Slate 7 2800 Android 4.1.1 रूटिंग किट।
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 | 32-bit ARM EABI5 |
| 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-bit ARM EABI5, static, unstripped | 2,722,320 बाइट्स | CVE का शोषण करता है, uid 0 प्राप्त करता है, और इंस्टॉलर लॉन्च करता है |
bin/hp-slate7-install-root | ELF 32-bit ARM EABI5, static, stripped | 22,596 बाइट्स | अस्थायी रूप से /system को rw रीमाउंट करता है, su इंस्टॉल करता है, और ro बहाल करता है |
bin/hp-slate7-su | ELF 32-bit 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 पुराने Linux कर्नेल के pipe_read() और pipe_write() कार्यान्वयनों में एक दोष है। जब एक परमाणु प्रति विफल हो जाती है, तो कोड गलत तरीके से iovec ऐरे को पार करना जारी रखता है, संभावित रूप से एक पॉइंटर को उसकी सीमा से परे ले जाता है। परिणामस्वरूप, एक स्थानीय विशेषाधिकार-रहित प्रक्रिया मेमोरी को दूषित कर सकती है, कर्नेल को क्रैश कर सकती है, या अपने विशेषाधिकारों को बढ़ा सकती है। तंत्र का विस्तृत विवरण oss-security पर प्रकाशित किया गया था। फिक्स, अन्य स्थानों के अलावा, अपस्ट्रीम Linux कमिट 637b58c और f0d1bec में पाए जा सकते हैं।
टैबलेट का 3.0.8+ कर्नेल भेद्य साबित हुआ। कर्नेल मेमोरी को संशोधित करने से पहले, उसी रेस को एक हानिरहित प्रोब के साथ अलग से परीक्षण किया गया था, जिसके दोनों लेखन लक्ष्य परीक्षण प्रक्रिया की सामान्य मेमोरी में स्थित थे। इसने CVE-2015-1805: VULNERABLE रिपोर्ट किया, और टैबलेट ADB पर सुलभ बना रहा।
readv(), मेमोरी मैपिंग परिवर्तनों और कर्नेल के भेद्य पाइप कोड में एक बड़े iovec ऐरे के प्रसंस्करण के बीच एक रेस बनाता है।sys_call_table में अप्रयुक्त प्रविष्टि 222 को शोषण प्रक्रिया में एक छोटे ARM ट्रैम्पोलिन के पते से बदल देता है।0xffff0008 पर उच्च वेक्टर के माध्यम से गणना किया जाता है। सत्यापित डिवाइस पर, निर्देश 0xe59ff410 है, और इसका लिटरल vector_swi = 0xc04d0d40 की ओर इंगित करता है।vector_swi और sys_call_table को आधिकारिक HP ओपन सोर्स 1.05.10 कर्नेल संग्रह (संग्रह SHA-256: dd69f0468973714fd9ba22cdfea7e96f39f651ee51b9cb537728d9dcadbafda2) से rk30_t7h_dvt_defconfig डेफकॉन्फ़िग के साथ स्वतंत्र रूप से असेंबल किया गया था। उनका ऑफसेट 0xc4 है। इंस्टॉल किए गए फर्मवेयर में न तो OABI है और न ही seccomp, इसलिए तालिका का अंतिम रनटाइम पता 0xc04d0e04 है।sp प्राप्त करता है, इसे 8,192-बाइट कर्नेल स्टैक आकार में संरेखित करता है, और ऑफसेट 8 पर केवल thread_info.addr_limit में -1 लिखता है। इसमें कोई बाहरी कॉल, प्रोलॉग या कंपाइलर रनटाइम कोड नहीं है।sys_ni_syscall हैं; सत्यापित कर्नेल पर बहाल किया गया पॉइंटर 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() फ़ंक्शन -O0 पर आधुनिक Clang के साथ असंगत था: एक प्रारंभिक प्रोटोटाइप ने sp रजिस्टर के बजाय एक अप्रारंभिक शब्द पढ़ा और कर्नेल को क्रैश कर सकता था। इस रिपॉज़िटरी में, इसे एक सत्यापित नेकेड ARM ट्रैम्पोलिन से बदल दिया गया है। प्रारंभिक बाइनरी रिपॉज़िटरी में शामिल नहीं है।
bin/ से तैयार फ़ाइलों का उपयोग करने के लिएadb;आपको Android NDK, Java, Python, fastboot, अनलॉक किया बूटलोडर, कस्टम रिकवरी, रूटिंग APK या नेटवर्क एक्सेस की आवश्यकता नहीं है। शोषण और पेलोड स्थिर रूप से लिंक किए गए हैं।