
Kit de root para HP Slate 7 2800 con Android 4.1.1 usando CVE-2015-1805.
English | Русский
Este repositorio contiene un kit completo e independiente para obtener acceso root persistente en la HP Slate 7 2800 con firmware 1.05.18 y kernel Linux 3.0.8+ mediante la explotación de la vulnerabilidad local CVE-2015-1805. El kit se ejecutó en la tableta real y el resultado se verificó desde una sesión ADB nueva y después de un reinicio normal.
Esta no es una herramienta universal de root para Android. El exploit es específico de esta configuración de kernel de HP. No lo ejecute en un modelo, firmware o versión de kernel diferentes.
| Parámetro | Valor verificado |
|---|---|
| Fabricante y modelo | HP Slate 7 2800 |
| Android | 4.1.1, API 16, build JRO03H |
| Producto / dispositivo | t7h / pine |
| Procesador | Rockchip RK3066, ARMv7 |
| Huella de compilación | 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 | no presente en la configuración del kernel (CONFIG_SECURITY está deshabilitado) |
Partición /system | ext4, montada de solo lectura de forma predeterminada |
Puede inspeccionar el dispositivo sin realizar ningún cambio:
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
Alternativamente, use el siguiente script. Se negará a continuar si la huella de compilación o la versión del kernel no coinciden:
./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
| Archivo | Formato | Tamaño | Propósito |
|---|---|---|---|
bin/hp-slate7-cve-2015-1805-root | ELF 32-bit ARM EABI5, estático, sin depurar | 2,722,320 bytes | Explota la CVE, obtiene uid 0 e inicia el instalador |
bin/hp-slate7-install-root | ELF 32-bit ARM EABI5, estático, depurado | 22,596 bytes | Vuelve a montar temporalmente /system en rw, instala su y restaura ro |
bin/hp-slate7-su | ELF 32-bit ARM EABI5, estático, depurado | 656 bytes | Llama a setresgid(0,0,0) y setresuid(0,0,0), y luego lanza /system/bin/sh |
Sumas de verificación SHA-256 de los binarios verificados:
6bf8ea09efb9f409dfc7aa5efbc3108e5c1a19fc5b07ae913328ef4639a7644f bin/hp-slate7-cve-2015-1805-root
4857c71efc846636afc5b50d7f3c971c6eb68d3760f652086f2a38c5dc50bc4a bin/hp-slate7-install-root
40626e555f71b71aa5ef7a727e9f6be55e552ef998ae3f49e9390f3e213c610e bin/hp-slate7-su
Verificación en macOS:
shasum -a 256 -c SHA256SUMS
Verificación en Linux:
sha256sum -c SHA256SUMS
Use los archivos de bin/ en la tableta: son los bytes exactos que se
verificaron en el dispositivo. El directorio build/ está pensado para
recompilaciones locales y no está rastreado por Git.
CVE-2015-1805 es una falla en
las implementaciones de pipe_read() y pipe_write() de los kernels de Linux
más antiguos. Cuando una copia atómica falla, el código continúa
incorrectamente recorriendo el arreglo iovec, lo que potencialmente mueve un
puntero más allá de sus límites. Como resultado, un proceso local sin
privilegios puede corromper memoria, bloquear el kernel o escalar sus
privilegios. Se publicó una explicación detallada del mecanismo en
oss-security. Las
correcciones se pueden encontrar, entre otros lugares, en los commits de Linux
ascendentes
637b58c
y
f0d1bec.
El kernel 3.0.8+ de la tableta resultó vulnerable. Antes de modificar la
memoria del kernel, la misma condición de carrera se probó por separado con una
sonda inofensiva cuyos dos objetivos de escritura estaban ubicados en la
memoria ordinaria del proceso de prueba. Informó CVE-2015-1805: VULNERABLE y
la tableta permaneció accesible a través de ADB.
readv(), los cambios de
mapeo de memoria y el procesamiento de un arreglo iovec grande en el
código de pipe vulnerable del kernel.sys_call_table con la dirección de un pequeño trampolín
ARM en el proceso del exploit.0xffff0008.
En el dispositivo verificado, la instrucción es 0xe59ff410 y su literal
apunta a vector_swi = 0xc04d0d40.vector_swi y sys_call_table se ensamblaron de forma independiente a
partir del
archivo de kernel de código abierto oficial de HP 1.05.10
(SHA-256 del archivo:
dd69f0468973714fd9ba22cdfea7e96f39f651ee51b9cb537728d9dcadbafda2)
con el defconfig rk30_t7h_dvt_defconfig. Su desplazamiento es 0xc4. El
firmware instalado no tiene ni OABI ni seccomp, por lo que la dirección
final en tiempo de ejecución de la tabla es 0xc04d0e04.sp
actual, lo alinea al tamaño de pila del kernel de 8192 bytes y escribe -1
únicamente en thread_info.addr_limit en el desplazamiento 8. No contiene
llamadas externas, prólogo ni código de tiempo de ejecución del compilador.sys_ni_syscall en el
código fuente de HP; el puntero restaurado en el kernel verificado es
0xc051900c.addr_limit, la copia de pipe lee el
task_struct actual, localiza cred y valida la estructura mediante los
valores uid/gid actuales, la alineación, el recuento de referencias y la
condición real_cred == cred. Solo después de estas comprobaciones los
valores uid/gid se ponen a cero y las máscaras de capacidades se rellenan
con unos.uid=0 y lanza /data/local/tmp/install-root. El
instalador vuelve a montar /system en rw, copia la carga útil a
/system/xbin/su, asigna la propiedad root:root y el modo 06755, llama
a sync() y vuelve a montar /system en modo de solo lectura.La función original current_thread_info() de los encabezados antiguos del
kernel era incompatible con el Clang moderno en -O0: un prototipo inicial
leía una palabra no inicializada en lugar del registro sp y podía bloquear el
kernel. En este repositorio se ha reemplazado con un trampolín ARM naked
verificado. El binario inicial no está incluido en el repositorio.
bin/