
Honor WIN RT (AAK-AN00) CVE-2026-43499 root temporário - notas de pesquisa
(tudo escrito pelo deepseek, eu não entendo nada)
Bootloader do dispositivo permanentemente bloqueado (
ro.oem_unlock.supportedvazio), sem fastboot, sem su persistente, sem Magisk. O único caminho ainda viável é uma vulnerabilidade de kernel. Este repositório documenta o processo completo desde "dá para atacar?" até "depois de atacar, quão estável é de fato?".
Natureza: root temporário, invalidado ao reiniciar.
Este repositório documenta um processo de pesquisa de segurança realizado em dispositivo próprio, com o objetivo de compreender a causa e os limites de estabilidade de uma race condition de PI no kernel.
O único caminho que funcionou foi:
CVE-2026-43499 (race condition de futex PI write-what-where) + portador rt_sigreturn
→ injeção via LD_PRELOAD em processo do domínio shell
→ duas etapas: primeiro ativar SELinux Permissive, depois alterar task->real_cred / cred para init_cred
→ uid=0(root) context=u:r:kernel:s0, e implantar daemon su
Mas o que realmente vale a pena registrar não é "como obter root" — é o que acontece depois de obtê-lo.
O que se obtém não é um root estável, mas um "estado que pode ser detonado a qualquer momento".
A primitiva de escrita do exploit insere um
rt_mutex_waiterforjado na cadeia real de futex PI, e o portador desse waiter é uma pilha de kernel / página spray que será reutilizada por chamadas de sistema subsequentes. Assim, a partir do momento em que o root é estabelecido, qualquer mudança de escalonamento ou prioridade em nível de sistema pode acioná-lo, causando panic imediato do kernel e reinicialização. Isso não é um bug, é o custo inerente dessa técnica de exploração — verdocs/03.
Por que é obrigatório fixar a versão do kernel: a falha foi corrigida em 6.6.140, e este dispositivo tem 6.6.118 < 6.6.140, portanto ainda está presente;
além disso, todos os endereços de símbolos do kernel e a "geometria do portador" do exploit estão ancorados neste único build; ao trocar o kernel, a tabela de offsets se invalida imediatamente, e geralmente não é possível reverter.
┌─ Materiais ───────────────────────────────────────────┐
│ boot.img + xbl_config.elf (extraídos do firmware do dispositivo) │
│ ↓ resolução de símbolos │
│ target.h (endereços de símbolos do kernel, verificados byte a byte com kallsyms) │
│ ↓ build │
│ preload.so ──► /data/local/tmp/*.so no dispositivo │
└────────────────────────────────────────────────────────┘
↓ injeção via LD_PRELOAD
┌──────────── duas etapas (obrigatoriamente dois processos independentes) ────────────┐
│ Etapa A GW_SELINUX=1 → selinux_state.enforcing = 0 │
│ Etapa B GW_CHAIN=1 RTSIG_TASK_INIT=1 GW_SU=1 │
│ → task->real_cred ← &init_cred │
│ → task->cred ← &init_cred (realizado pelo processo "escritor pré-posicionado") │
│ → setresuid(0,0,0) normalização │
│ → implantar su embutido + daemon │
└─────────────────────────────────────────────────────────────┘
↓
uid=0(root) context=u:r:kernel:s0
Três pontos que precisam ser feitos corretamente (errar causa travamento ou panic direto):
real_cred, depois cred. A ordem inversa causa privilégios totais instantâneos e perda de controle das threads.cred ≠ real_cred. Nesse momento, qualquer sched_setaffinity resultará em EPERM → travamento total do ciclo.
A solução correta é fazer fork do processo "escritor pré-posicionado" antes da primeira operação (com credenciais limpas); o processo pai executa a primeira operação, o escritor executa a segunda, e nenhum dos dois faz syscall durante o estado transiente.alias(image) = PAGE_OFFSET | (image − KIMAGE_TEXT_BASE + Δ), estável entre reinicializações;
o verdadeiro valor da chamada "fase de slide" é a autoverificação da primitiva de escrita, não contornar KASLR.Framework upstream:
Linuxoid-cn/CVE-2026-43499-Poc-Analysis. Atenção: isto não é GhostLock — GhostLock usa a rota pselect, que não corresponde à geometria de ponto de queda do waiter neste build, verdocs/06.
Se você também está atacando um modelo com BL bloqueado, pense primeiro claramente no que você vai fazer com o root, porque nesses modelos o root provavelmente é uma janela que dura apenas cerca de dez minutos. Liste as operações que "precisam de root e devem persistir entre reinicializações", execute tudo de uma vez, e depois
rebootpara voltar ao estado limpo. Não tente "eliminar os efeitos colaterais" — esse é o custo inerente da técnica.
| Item | Valor | Observação |
|---|
| Modelo | Honor WIN RT, modelo AAK-AN00 | Nome comercial "Honor WIN RT" |
| SoC | Snapdragon 8 Elite SM8750-AB | Firmware não é compatível com Honor WIN (AAP-AN00, SM8850-AC) |
| Sistema | Android 16 / MagicOS 10 | — |
| Kernel | 6.6.118-android15-8-gf17133276a57-abogki518694926-4k | ★ Condição obrigatória, correspondência caractere por caractere |
| Configuração do kernel | 4K pages, VA_BITS=39, CONFIG_FUTEX_PI=y | Pré-requisito para a geometria do portador |
| Pacote de firmware | .170 | .160 / .175 não testados |
| Bootloader | Permanentemente bloqueado | Sem fastboot / sem su persistente |
| Documento | Conteúdo |
|---|
| 01 · Análise de viabilidade | Por que só resta o portador rt_sigreturn |
| 02 · Cadeia de escalação e fatores de sucesso | Primitiva de escrita, cadeia de seis passos, escritor pré-posicionado, critérios de sucesso |
| 03 · Causa real da instabilidade: resíduo na cadeia PI | ★ Núcleo. "Desconexão de rede" não é desconexão, é panic; inclui desmontagem do ponto de crash |
| 04 · Canal sem computador: Shizuku | Usar o rish do Shizuku em vez do adb para iniciar o exploit |
| 05 · late-load do KernelSU | Modo de ativação do LKM e por que é o detonador mais perigoso |
| 06 · Lista de becos sem saída | Caminhos tentados mas inviáveis, para evitar que outros repitam |
| 07 · Armadilhas e ambiente | Obter stack de panic sem root, armadilhas do ambiente de script |
| tools/ | Scripts reutilizáveis (versão genérica sanitizada) |
| Data | Progresso |
|---|
| 09-08 | Confirmado BL permanentemente bloqueado, canal de desbloqueio OEM removido ⇒ abandonar rota oficial, migrar para rota de vulnerabilidade |
| 09-09 | Superado o repositório de firmware de pós-venda do fabricante, obtido boot.img, extraído kernel e símbolos |
| 09-10 | Busca de portador convergiu para rt_sigreturn; escalação de privilégios bem-sucedida (20:14), uid=0 |
| 09-11 | Estabelecido canal sem computador (Shizuku); KernelSU ativável; identificada a causa real da "desconexão de rede" = resíduo na cadeia PI |