
PoC de escalada de privilégios no Honor 80 GT: GhostLock (CVE-2026-43499) + carregamento de módulo KernelSU personalizado
Inglês | 中文
Um exploit de escalonamento de privilégios local para o Honor 80 GT (AGT-AN00),
CVE-2026-43499 — um use-after-free no caminho remove_waiter do rtmutex do kernel
— além de uma solução complementar de carregamento de módulos de kernel do KernelSU.
Em princípio, o bug e as técnicas aqui apresentadas aplicam-se a todas as builds do MagicOS até a 9.0.0.230. Versões adaptadas:
| MagicOS | Kernel | Status |
|---|---|---|
| 8.0.0.128 | 5.10.168 | ✅ verificado |
| 8.0.0.160 | 5.10.209 | ✅ verificado |
| 9.0.0.157 | 5.10.209 | ✅ verificado |
| 9.0.0.200SP1 | 5.10.236 | ✅ verificado |
| 9.0.0.220SP2 / SP4 | 5.10.236 | ✅ verificado (a SP4 traz a mesma boot image da SP2) |
| 9.0.0.230 | 5.10.236 | ✅ verificado |
| 8.0.0.131 | 5.10.198 | ⚠️ não verificado em um dispositivo real |
| 8.0.0.135 / 143 / 150 | 5.10.198 | ⚠️ não verificado em um dispositivo real |
| 8.0.0.161 | 5.10.209 | ⚠️ não verificado em um dispositivo real |
| 9.0.0.102 / 103 / 120 / 130 / 165 | 5.10.209 | ⚠️ não verificado em um dispositivo real (a 103 traz a mesma boot image da 102) |
| 9.0.0.175SP1 / 187 | 5.10.226 | ⚠️ não verificado em um dispositivo real |
| 9.0.0.210 | 5.10.236 | ⚠️ não verificado em um dispositivo real |
⚠️ Aviso
- Apenas para pesquisa de segurança em seu próprio dispositivo.
- USE POR SUA CONTA E RISCO. Este software não oferece NENHUMA garantia de qualquer tipo (consulte LICENSE). Em teoria, simplesmente executá-lo não deve inutilizar seu dispositivo nem causar perda de dados, mas faça backup antes de qualquer forma; o que acontecer — seja por executar este código ou por qualquer coisa que você faça com o acesso root que ele concede — é sua responsabilidade, não dos autores.
- O exploit modifica a memória do kernel por meio de um UAF. Uma tentativa malsucedida reinicia o dispositivo; um reinício restaura tudo. O sucesso não é 100% por execução — execute novamente.
- Root é controle total do dispositivo — use com cuidado. Este projeto apenas fornece root; gravar imagens, escrever partições, desativar proteções ou instalar módulos não testados depois pode inutilizar permanentemente o dispositivo, e isso é sua responsabilidade.
exploit/ GhostLock PoC source (Android arm64) + build system
src/ exploit core: futex UAF, KASLR slide, sysctl boot_id hijack,
arbitrary R/W, cred/SELinux/sig_enforce writes, KSU load
src/targets/ per-firmware offset tables (target.h)
ksu/ custom kernelsu.ko build (MagicOS kernel + device config) and the
PC-side adb load driver
tools/ on-device load helpers: load_ko.c / kmsg_dumper.c (built from
source), policy rules, loader template (+ where to get the
binaries)
Requisitos: Docker, Android Platform Tools.
Um pacote pré-compilado cobre todos os firmwares suportados: baixe-o em Releases, descompacte-o no host e execute
./setup.sh # PC, with adb: identifies the kernel, picks the
# matching exploit, runs the chain, retries when an
# attempt fails
Sem um PC, descompacte o pacote no telefone e execute o mesmo script a partir de um shell Shizuku (rish) — ele detecta onde está e faz o resto localmente:
sh /sdcard/ghostlock/setup.sh
O script compara o kernel em execução com o manifesto incluído: firmwares verificados são executados diretamente, os conhecidos mas não testados solicitam confirmação, e qualquer outro é recusado.
Compile a partir do código-fonte em vez disso:
# 1. Build the exploit binary
cd exploit && ./docker-build.sh bin # exploit_static (8.0.0.128)
# 8.0.0.160: ./docker-build.sh PROJECT=annap-AGT-AN00_8.0.0.160 bin
# (the static binary bakes in the default env config; any knob can still
# be overridden by environment variables at launch; first run pulls the NDK, ~1.2GB)
# 2. The KSU-side binaries live in ksu/tools/ (see ksu/tools/README.md):
# kernelsu.ko — build per ksu/README.md;
# ksud, magiskpolicy, ksu_rules — shipped in the repo;
# load_ko, kmsg_dumper — ./docker-build.sh tools
# 3. Enable ADB debugging on the phone, then
bash ../ksu/ksu_load_ko.sh
# 8.0.0.160: PROJECT=annap-AGT-AN00_8.0.0.160 bash ../ksu/ksu_load_ko.sh
O script conduz toda a cadeia via adb: GhostLock (acesso root, SELinux
permissivo, sig_enforce desativado), injeção de política SELinux via magiskpolicy, bind-mount
falso de kallsyms, load_ko (init_module), depois as etapas de bring-up do ksud,
restaurando o SELinux enforcing como último passo absoluto. Quando o jailbreak
termina, o script abre o gerenciador do KernelSU para você (mostra
"Working <LKM> [Jailbreak mode]").
CONFIG_MODULE_SIG_FORCE=y — o flag de runtime sig_enforce bloqueia
carregamentos de módulos não assinados; o exploit o inverte temporariamente para 0 (o script
loader o restaura para 1 assim que o módulo está carregado).commit_creds e similares do
/proc/kallsyms, então o loader do kernel não consegue resolver os símbolos indefinidos do .ko.
O fluxo faz bind-mount de um kallsyms falso com os símbolos removidos
prefixados em seus endereços reais de runtime (endereço de link + slide do KASLR).android12-5.10_kernelsu.ko padrão do GKI não pode ser usado diretamente. ksu/ recompila
o KernelSU contra o código-fonte do kernel do MagicOS correspondente ao sublevel do firmware
e à configuração de kernel do próprio dispositivo. Veja ksu/README.md.Cadeia completa (UAF → KASLR → R/W arbitrário → cred → SELinux permissivo → sig_enforce → KernelSU ativo, enforcing restaurado, boot_id restaurado) verificada em um dispositivo real para as versões marcadas com ✅ acima; versões marcadas com ⚠️ são adaptadas mas não verificadas em um dispositivo real. Uma execução pode falhar e reiniciar o telefone; o script de setup tenta novamente automaticamente, ou execute-o novamente.
exploit/, docs de nível superior) estão
sob a Apache License 2.0 (veja LICENSE), assim como o
PoC upstream do IonStack do qual este port deriva.ksu/ são GPL-2.0 (veja
ksu/LICENSE): init-bootid.patch e o conjunto de políticas ksu_rules.annotated
derivam do diretório kernel/ do KernelSU, que é GPL-2.0.