
Kit de root para HP Slate 7 2800 com Android 4.1.1 usando CVE-2015-1805.
English | Русский
Este repositório contém um kit completo e autossuficiente para obter acesso root persistente no HP Slate 7 2800 executando o firmware 1.05.18 e o kernel Linux 3.0.8+ por meio da exploração da vulnerabilidade local CVE-2015-1805. O kit foi executado no tablet real e o resultado foi verificado a partir de uma nova sessão ADB e após uma reinicialização normal.
Este não é uma ferramenta universal de root para Android. O exploit é específico para esta configuração de kernel da HP. Não o execute em um modelo, firmware ou versão de kernel diferente.
| Parâmetro | Valor verificado |
|---|---|
| Fabricante e modelo | HP Slate 7 2800 |
| Android | 4.1.1, API 16, build JRO03H |
| Produto / dispositivo | t7h / pine |
| Processador | Rockchip RK3066, ARMv7 |
| Impressão digital da compilação | 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 | não presente na configuração do kernel (CONFIG_SECURITY está desativado) |
Partição /system | ext4, montada somente leitura por padrão |
Você pode inspecionar o dispositivo sem fazer qualquer alteração:
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 o script abaixo. Ele se recusará a continuar se a impressão digital ou a versão do kernel não corresponder:
./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
| Arquivo | Formato | Tamanho | Finalidade |
|---|---|---|---|
bin/hp-slate7-cve-2015-1805-root | ELF 32-bit ARM EABI5, static, unstripped | 2,722,320 bytes | Explora a CVE, obtém uid 0 e inicia o instalador |
bin/hp-slate7-install-root | ELF 32-bit ARM EABI5, static, stripped | 22,596 bytes | Remonta temporariamente /system como rw, instala o su e restaura ro |
bin/hp-slate7-su | ELF 32-bit ARM EABI5, static, stripped | 656 bytes | Chama setresgid(0,0,0) e setresuid(0,0,0) e, em seguida, inicia /system/bin/sh |
Checksums SHA-256 dos binários verificados:
6bf8ea09efb9f409dfc7aa5efbc3108e5c1a19fc5b07ae913328ef4639a7644f bin/hp-slate7-cve-2015-1805-root
4857c71efc846636afc5b50d7f3c971c6eb68d3760f652086f2a38c5dc50bc4a bin/hp-slate7-install-root
40626e555f71b71aa5ef7a727e9f6be55e552ef998ae3f49e9390f3e213c610e bin/hp-slate7-su
Verificação no macOS:
shasum -a 256 -c SHA256SUMS
Verificação no Linux:
sha256sum -c SHA256SUMS
Use os arquivos de bin/ no tablet: estes são exatamente os bytes verificados no dispositivo. O diretório build/ destina-se a recompilações locais e não é rastreado pelo Git.
CVE-2015-1805 é uma falha nas implementações de pipe_read() e pipe_write() de kernels Linux mais antigos. Quando uma cópia atômica falha, o código continua incorretamente percorrendo o array iovec, potencialmente movendo um ponteiro para além dos seus limites. Como resultado, um processo local sem privilégios pode corromper memória, derrubar o kernel ou aumentar seus privilégios. Uma explicação detalhada do mecanismo foi publicada em oss-security. As correções podem ser encontradas, entre outros lugares, nos commits do Linux upstream 637b58c e f0d1bec.
O kernel 3.0.8+ do tablet mostrou-se vulnerável. Antes de modificar a memória do kernel, a mesma corrida foi testada separadamente com uma sonda inofensiva cujos dois alvos de escrita estavam ambos localizados na memória comum do processo de teste. Ela relatou CVE-2015-1805: VULNERABLE, e o tablet permaneceu acessível via ADB.
readv(), alterações no mapeamento de memória e o processamento de um grande array iovec no código de pipe vulnerável do kernel.sys_call_table pelo endereço de um pequeno trampolim ARM no processo do exploit.0xffff0008. No dispositivo verificado, a instrução é 0xe59ff410, e seu literal aponta para vector_swi = 0xc04d0d40.vector_swi e sys_call_table foram montados de forma independente a partir do arquivo oficial do kernel HP Open Source 1.05.10 (SHA-256 do arquivo:
dd69f0468973714fd9ba22cdfea7e96f39f651ee51b9cb537728d9dcadbafda2)
com o defconfig rk30_t7h_dvt_defconfig. Seu deslocamento é 0xc4. O firmware instalado não possui OABI nem seccomp, portanto o endereço final da tabela em tempo de execução é 0xc04d0e04.sp atual, o alinha ao tamanho da pilha do kernel de 8.192 bytes e escreve -1 apenas em thread_info.addr_limit no deslocamento 8. Ele não contém chamadas externas, prólogo ou código de runtime do compilador.sys_ni_syscall no código-fonte da HP; o ponteiro restaurado no kernel verificado é 0xc051900c.addr_limit é ampliado, a cópia via pipe lê a task_struct atual, localiza cred e valida a estrutura usando os valores atuais de uid/gid, alinhamento, contagem de referências e a condição real_cred == cred. Somente após essas verificações os valores de uid/gid são zerados e as máscaras de capacidade são preenchidas com uns.uid=0 e inicia /data/local/tmp/install-root. O instalador remonta /system como rw, copia o payload para /system/xbin/su, atribui o proprietário root:root e o modo 06755, chama sync() e remonta /system somente leitura.A função original current_thread_info() dos cabeçalhos antigos do kernel era incompatível com o Clang moderno em -O0: um protótipo inicial lia uma palavra não inicializada em vez do registrador sp e poderia derrubar o kernel. Neste repositório, ela foi substituída por um trampolim ARM naked verificado. O binário inicial não está incluído no repositório.
bin/adb das Android SDK Platform Tools;