
Rooting-Kit für HP Slate 7 2800 mit Android 4.1.1 unter Verwendung von CVE-2015-1805.
English | Русский
Dieses Repository enthält ein vollständiges, eigenständiges Kit zur Erlangung dauerhafter Root-Zugriffsrechte auf dem HP Slate 7 2800 mit Firmware 1.05.18 und Kernel Linux 3.0.8+ durch Ausnutzung der lokalen Schwachstelle CVE-2015-1805. Das Kit wurde auf dem tatsächlichen Tablet ausgeführt, und das Ergebnis wurde aus einer frischen ADB-Sitzung sowie nach einem normalen Neustart verifiziert.
Dies ist kein universelles Android-Rooting-Tool. Der Exploit ist spezifisch für diese HP-Kernel-Konfiguration. Führen Sie ihn nicht auf einem anderen Modell, einer anderen Firmware oder einer anderen Kernel-Version aus.
| Parameter | Verifizierter Wert |
|---|---|
| Hersteller und Modell | HP Slate 7 2800 |
| Android | 4.1.1, API 16, Build JRO03H |
| Produkt / Gerät | t7h / pine |
| Prozessor | Rockchip RK3066, ARMv7 |
| Build-Fingerprint | hp/t7h/pine:4.1.1/JRO03H/v1.05.18_user:user/release-keys |
| Kernel | 3.0.8+ #13 SMP PREEMPT Tue Jul 28 15:24:30 CST 2015 |
| ABI | 32-Bit-ARM-EABI5 |
| SELinux | nicht in der Kernel-Konfiguration vorhanden (CONFIG_SECURITY ist deaktiviert) |
/system-Partition | ext4, standardmäßig schreibgeschützt eingehängt |
Sie können das Gerät prüfen, ohne Änderungen vorzunehmen:
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
Alternativ verwenden Sie das folgende Skript. Es verweigert die Ausführung, wenn entweder der Fingerprint oder die Kernel-Version nicht übereinstimmt:
./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
| Datei | Format | Größe | Zweck |
|---|---|---|---|
bin/hp-slate7-cve-2015-1805-root | ELF 32-Bit-ARM-EABI5, statisch, nicht gestrippt | 2.722.320 Byte | Nutzt die CVE aus, erlangt uid 0 und startet den Installer |
bin/hp-slate7-install-root | ELF 32-Bit-ARM-EABI5, statisch, gestrippt | 22.596 Byte | Hängt /system vorübergehend rw ein, installiert su und stellt ro wieder her |
bin/hp-slate7-su | ELF 32-Bit-ARM-EABI5, statisch, gestrippt | 656 Byte | Ruft setresgid(0,0,0) und setresuid(0,0,0) auf und startet dann /system/bin/sh |
SHA-256-Prüfsummen der verifizierten Binaries:
6bf8ea09efb9f409dfc7aa5efbc3108e5c1a19fc5b07ae913328ef4639a7644f bin/hp-slate7-cve-2015-1805-root
4857c71efc846636afc5b50d7f3c971c6eb68d3760f652086f2a38c5dc50bc4a bin/hp-slate7-install-root
40626e555f71b71aa5ef7a727e9f6be55e552ef998ae3f49e9390f3e213c610e bin/hp-slate7-su
Überprüfung unter macOS:
shasum -a 256 -c SHA256SUMS
Überprüfung unter Linux:
sha256sum -c SHA256SUMS
Verwenden Sie auf dem Tablet die Dateien aus bin/: Es handelt sich um exakt die Bytes, die auf dem Gerät verifiziert wurden. Das Verzeichnis build/ ist für lokale Neubauten gedacht und wird nicht von Git verfolgt.
CVE-2015-1805 ist ein Fehler in den pipe_read()- und pipe_write()-Implementierungen älterer Linux-Kernel. Wenn eine atomare Kopie fehlschlägt, fährt der Code fälschlicherweise mit dem Durchlaufen des iovec-Arrays fort und kann dabei einen Zeiger über dessen Grenzen hinaus verschieben. Dadurch kann ein lokaler Prozess ohne Privilegien Speicher beschädigen, den Kernel zum Absturz bringen oder seine Privilegien erweitern. Eine detaillierte Erklärung des Mechanismus wurde auf oss-security veröffentlicht. Die Korrekturen finden sich unter anderem in den Upstream-Linux-Commits 637b58c und f0d1bec.
Der 3.0.8+-Kernel des Tablets erwies sich als verwundbar. Vor der Änderung von Kernel-Speicher wurde dieselbe Race-Bedingung separat mit einer harmlosen Sonde getestet, deren beide Schreibziele sich im normalen Speicher des Testprozesses befanden. Sie meldete CVE-2015-1805: VULNERABLE, und das Tablet blieb über ADB erreichbar.
readv(), Änderungen am Speicher-Mapping und der Verarbeitung eines großen iovec-Arrays im verwundbaren Pipe-Code des Kernels.sys_call_table durch die Adresse eines kleinen ARM-Trampolins im Exploit-Prozess.0xffff0008 berechnet. Auf dem verifizierten Gerät lautet die Instruktion 0xe59ff410, und ihr Literal zeigt auf vector_swi = 0xc04d0d40.vector_swi und sys_call_table wurden unabhängig aus dem offiziellen HP-Open-Source-Kernelarchiv 1.05.10 (Archiv-SHA-256: dd69f0468973714fd9ba22cdfea7e96f39f651ee51b9cb537728d9dcadbafda2) mit der Defconfig rk30_t7h_dvt_defconfig assembliert. Ihr Offset beträgt 0xc4. Die installierte Firmware besitzt weder OABI noch seccomp, daher lautet die endgültige Laufzeitadresse der Tabelle 0xc04d0e04.sp, richtet es an der Kernel-Stack-Größe von 8.192 Byte aus und schreibt -1 ausschließlich in thread_info.addr_limit an Offset 8. Es enthält keine externen Aufrufe, kein Prolog und keinen Compiler-Runtime-Code.sys_ni_syscall; der auf dem verifizierten Kernel wiederhergestellte Zeiger ist 0xc051900c.addr_limit erweitert wurde, liest das Pipe-Kopieren das aktuelle task_struct, lokalisiert cred und validiert die Struktur anhand der aktuellen uid/gid-Werte, der Ausrichtung, des Referenzzählers und der Bedingung real_cred == cred. Erst nach diesen Prüfungen werden die uid/gid-Werte auf null gesetzt und die Capability-Masken mit Einsen gefüllt.uid=0 und startet /data/local/tmp/install-root. Der Installer hängt /system rw ein, kopiert die Nutzlast nach /system/xbin/su, setzt die Eigentümerschaft root:root und den Modus 06755, ruft sync() auf und hängt /system wieder schreibgeschützt ein.Die ursprüngliche Funktion current_thread_info() aus den alten Kernel-Headern war mit modernem Clang bei -O0 inkompatibel: Ein früher Prototyp las anstelle des sp-Registers ein nicht initialisiertes Wort und konnte den Kernel zum Absturz bringen. In diesem Repository wurde sie durch ein verifiziertes nacktes ARM-Trampolin ersetzt. Das frühe Binary ist nicht im Repository enthalten.
bin/