
Kit di rooting per HP Slate 7 2800 Android 4.1.1 che sfrutta CVE-2015-1805.
Inglese | Русский
Questo repository contiene un kit completo e autonomo per ottenere accesso root persistente su HP Slate 7 2800 con firmware 1.05.18 e kernel Linux 3.0.8+, sfruttando la vulnerabilità locale CVE-2015-1805. Il kit è stato eseguito sul tablet reale e il risultato è stato verificato da una sessione ADB appena avviata e dopo un riavvio normale.
Questo non è uno strumento universale per il root di Android. L'exploit è specifico di questa configurazione del kernel HP. Non eseguirlo su un modello, firmware o versione del kernel diversi.
| Parametro | Valore verificato |
|---|---|
| Produttore e modello | HP Slate 7 2800 |
| Android | 4.1.1, API 16, build JRO03H |
| Prodotto / dispositivo | t7h / pine |
| Processore | 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 | ARM EABI5 a 32 bit |
| SELinux | non presente nella configurazione del kernel (CONFIG_SECURITY è disabilitata) |
Partizione /system | ext4, montata in sola lettura per impostazione predefinita |
Puoi ispezionare il dispositivo senza apportare modifiche:
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
In alternativa, usa lo script seguente. Si rifiuterà di procedere se il fingerprint o la versione del kernel non corrispondono:
./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
| File | Formato | Dimensione | Scopo |
|---|---|---|---|
bin/hp-slate7-cve-2015-1805-root | ELF 32-bit ARM EABI5, statico, non strippato | 2.722.320 byte | Sfrutta la CVE, ottiene uid 0 e avvia l'installer |
bin/hp-slate7-install-root | ELF 32-bit ARM EABI5, statico, strippato | 22.596 byte | Rimonta temporaneamente /system in rw, installa su e ripristina ro |
bin/hp-slate7-su | ELF 32-bit ARM EABI5, statico, strippato | 656 byte | Chiama setresgid(0,0,0) e setresuid(0,0,0), quindi avvia /system/bin/sh |
Checksum SHA-256 dei binari verificati:
6bf8ea09efb9f409dfc7aa5efbc3108e5c1a19fc5b07ae913328ef4639a7644f bin/hp-slate7-cve-2015-1805-root
4857c71efc846636afc5b50d7f3c971c6eb68d3760f652086f2a38c5dc50bc4a bin/hp-slate7-install-root
40626e555f71b71aa5ef7a727e9f6be55e552ef998ae3f49e9390f3e213c610e bin/hp-slate7-su
Verifica su macOS:
shasum -a 256 -c SHA256SUMS
Verifica su Linux:
sha256sum -c SHA256SUMS
Sul tablet usa i file da bin/: sono esattamente i byte verificati sul dispositivo. La directory build/ è pensata per le ricompilazioni locali e non è tracciata da Git.
CVE-2015-1805 è un difetto nelle implementazioni di pipe_read() e pipe_write() dei kernel Linux più vecchi. Quando una copia atomica fallisce, il codice continua erroneamente a scorrere l'array iovec, spostando potenzialmente un puntatore oltre i suoi limiti. Di conseguenza, un processo locale senza privilegi può corrompere la memoria, mandare in crash il kernel o aumentare i propri privilegi. Una spiegazione dettagliata del meccanismo è stata pubblicata su oss-security. Le correzioni si trovano, tra l'altro, nei commit Linux upstream 637b58c e f0d1bec.
Il kernel 3.0.8+ del tablet si è rivelato vulnerabile. Prima di modificare la memoria del kernel, la stessa race condition è stata testata separatamente con una sonda innocua i cui due obiettivi di scrittura erano entrambi nella memoria ordinaria del processo di test. Ha riportato CVE-2015-1805: VULNERABLE e il tablet è rimasto accessibile tramite ADB.
readv(), le modifiche al memory mapping e l'elaborazione di un ampio array iovec nel codice pipe vulnerabile del kernel.sys_call_table con l'indirizzo di una piccola trampoline ARM nel processo dell'exploit.0xffff0008. Sul dispositivo verificato, l'istruzione è 0xe59ff410 e il suo literal punta a vector_swi = 0xc04d0d40.vector_swi e sys_call_table sono stati assemblati indipendentemente dall'archivio kernel open source ufficiale HP 1.05.10 (SHA-256 dell'archivio: dd69f0468973714fd9ba22cdfea7e96f39f651ee51b9cb537728d9dcadbafda2) con il defconfig rk30_t7h_dvt_defconfig. Il loro offset è 0xc4. Il firmware installato non ha né OABI né seccomp, quindi l'indirizzo runtime finale della tabella è 0xc04d0e04.sp corrente, lo allinea alla dimensione dello stack del kernel di 8.192 byte e scrive -1 solo in thread_info.addr_limit all'offset 8. Non contiene chiamate esterne, prologo o codice runtime del compilatore.sys_ni_syscall nel sorgente HP; il puntatore ripristinato sul kernel verificato è 0xc051900c.addr_limit, la copia via pipe legge la task_struct corrente, individua cred e valida la struttura usando i valori uid/gid correnti, l'allineamento, il conteggio dei riferimenti e la condizione real_cred == cred. Solo dopo questi controlli i valori uid/gid vengono azzerati e le maschere delle capability vengono riempite di uno.uid=0 e avvia /data/local/tmp/install-root. L'installer rimonta /system in rw, copia il payload in /system/xbin/su, assegna proprietà root:root e modalità 06755, chiama sync() e rimonta /system in sola lettura.La funzione originale current_thread_info() dei vecchi header del kernel era incompatibile con il Clang moderno a -O0: un prototipo iniziale leggeva una parola non inizializzata invece del registro sp e poteva mandare in crash il kernel. In questo repository è stata sostituita con una trampoline ARM naked verificata. Il binario iniziale non è incluso nel repository.
bin/adb da Android SDK Platform Tools;