Skip to content
KitploitKITPLOIT
FerramentasExploitsBlog
Log in
Enviar
FerramentasExploitsBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

FeedsContatoPrivacidade© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
ghostlock-oneplus — # GhostLock (CVE-2026-43499) exploit de kernel para dispositivos Android com bootloader bloqueado | Kitploit
Ferramentas/GitHubGitHub/joinchang/ghostlock-oneplus
Segurança AndroidEscalada de PrivilégiosFrameworks de ExploraçãoAnálise de VulnerabilidadesTestes de PenetraçãoSegurança MóvelAprendizado e EducaçãoExploração de Binários
GitHubjoinchang/ghostlock-oneplus

ghostlock-oneplus

# GhostLock (CVE-2026-43499) exploit de kernel para dispositivos Android com bootloader bloqueado

Ver Repositório
23546168há 1 mêsRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

GhostLock — Jailbreak para Bootloader Bloqueado

Exploit de kernel para dispositivos Android com bootloader bloqueado. Obtém root temporário + instalação do KernelSU sem desbloquear o bootloader ou modificar a imagem de boot. Detecção automática em tempo de execução da versão do kernel com tabela de offsets para múltiplos dispositivos.

GhostLock em execução no OnePlus Ace 6T com KernelSU (LKM, modo Jailbreak)

Vulnerabilidade

CVE-2026-43499 — Use-After-Free em Futex PI (Herança de Prioridade)

Afeta o kernel Linux 5.7 ~ 7.1. Corrigido nas versões estáveis 6.1.175, 6.6.140, 6.12.86. A maioria dos dispositivos Android permanece sem correção em setembro de 2026.

A syscall pselect6 copia dados de fd_set para a pilha do kernel. Quando combinada com o mecanismo de waiter do futex PI, um frame de pilha liberado pode ser reocupado como uma estrutura rt_mutex_waiter. O rebalanceamento da rb-tree durante a travessia da cadeia PI então escreve valores controlados em endereços arbitrários do kernel.

Dispositivos Suportados

Verificados como Funcionais

DispositivoSoCKernelBranch GKISHIFT
OnePlus Ace 6T (PLR110)SM88456.12.38android16-50
OnePlus 15 (CPH2745/2747/2749)SM88506.12.23android16-50
OnePlus 15 (PLK110)SM88506.12.58android16-60
Xiaomi 17 (pudding)SM88506.12.23 / 6.12.69android16-5 / android16-60
OnePlus 13 (IN2060)SM87506.6.89android15-8-2
OPPO Pad 4 ProSM87506.6.89android15-8-2

Offsets Extraídos (aguardando teste no dispositivo)

DispositivoSoCKernelObservações
OnePlus 15T (PLZ110)SM88456.12.38Mesmo kernel do Ace 6T
OPPO Reno10 Pro+ (CPH2521)SM84755.10.236waiter compacto 5.10, waiter word=0
Sony Xperia 1 IV (nagara)SM84505.10.218waiter compacto 5.10, waiter word=0
OPPO Find X9 Pro (PLG110)D94006.12.23MediaTek, android16-5
Vivo X200 Ultra (V2454A)SM87506.6.89ashmem C, hooks tradicionais
Vivo X Fold3 Pro (PD2337)SM86506.1.124waiter compacto 6.1, waiter word=3
Vivo T4SM86506.1.145waiter compacto 6.1, waiter word=3

Não Viável

A sobreposição de pilha do pselect exige que o rt_mutex_waiter liberado caia dentro da região stack_fds controlável pelo usuário (words 0–14). Onde ele cai é determinado pelos perfis PGO/LTO do compilador, não pela versão do kernel. Veja Layout da Pilha.

DispositivoSoCKernelCausa Raiz
OPPO Find X9 UltraSM87506.12.58PGO elimina do_futex → waiter word=14
OnePlus 15 (PLK110)SM88506.12.69PGO faz inline de do_futex → waiter word=20
OnePlus 12SM86506.1.141PGO faz inline de do_futex → waiter word=13/19
OnePlus 13R / Ace 5SM86506.1.xOPLUS 6.1: waiter word=13
realme RMX5070SM66506.1.141OPLUS 6.1: waiter word=13
OPPO Pad 5 (OPD2502)MT68786.1.134OPLUS 6.1: waiter word=13
Motorola Edge 60 FusionMT68786.1.145Não-OPLUS 6.1: mesmo resultado
iQOO Neo 10 CNSM86506.1.84frame de do_futex 0xD0 → waiter word=-11
OPPO PKW110—5.15.180frame de do_futex 0x140 → waiter word=-29
iQOO Z9 5G—5.15.178frame de do_futex muito grande
CPH2763 (OPPO)—6.1.115OPLUS 6.1: PGO inline, waiter word=24
iQOO 12SM86506.1.1456.1: waiter word=9, task/lock em área zerada

Nota sobre viabilidade no 6.1: Kernels OPLUS 6.1 são consistentemente inviáveis devido ao PGO fazer inline de do_futex. No entanto, alguns kernels 6.1 não-OPLUS (vivo) mantêm a cadeia de chamadas padrão e são viáveis (vivo T4, X Fold3 Pro). A viabilidade deve ser verificada por dispositivo.

Fluxo do Exploit

Dois caminhos de root, selecionados automaticamente com base nas capacidades do dispositivo:

Caminho A: Root via UMH (preferido, dispositivos com ashmem C)

Requer off_ashmem_misc_fops != 0 (ashmem C com miscdevice estático no BSS).

PI write (mode=4)  →  redirect miscdevice fops to fake fops
                   →  configfs r/w → pipe physrw (1-byte precise kernel r/w)
                   →  SELinux enforcing = 0 (single byte, no policycap corruption)
                   →  UMH: inject work_struct into system_unbound_wq
                   →  root script → ksud late-load → KSU installed

Disponível em: OnePlus 13, OPPO Pad 4 Pro, dispositivos com ashmem 5.10/6.1 C. Não disponível em ashmem Rust (6.12 GKI) — miscdevice alocado no heap.

Caminho B: Escrita PI Direta (fallback)

Write 1 (mode=1)  →  SELinux enforcing = 0 (8-byte write, corrupts adjacent bytes)
Write 2 (mode=2)  →  task->cred = init_cred (uid=0, all capabilities)
Root shell         →  ksud late-load → KSU → SELinux policy fix

Após W1+W2, o exploit modifica o campo de configuração do binário da política SELinux (|= 0xC0000000 para ANDROID_NETLINK_ROUTE + GETNEIGH) e recarrega via /sys/fs/selinux/load para restaurar a conectividade de rede.

Modo Bootstrap (telefone autônomo)

App (seccomp)  →  Write 1 → mini-adb TCP → adb shell: full exploit → root

Auto-Boot

O launcher de inicialização é fornecido pelo aplicativo separado GhostLock Anchor.

Viabilidade do Layout da Pilha

Com NFDS=320, core_sys_select aloca um buffer stack_fds de 256 bytes na pilha do kernel:

stack_fds:  0    5    10   14 | 15   20   25   29
            ├─in─┤─out─┤─ex──┤ ├res_in┤res_out┤res_ex┤
            ◄── USER CONTROLLED ──►│◄── KERNEL ZEROED ──►

O exploit coloca campos waiter falsos (task, lock) nos bitmaps de entrada fd_set. Para waiter aninhado 6.12 (14 palavras): palavra waiter máxima viável = 3. Para waiter compacto 5.10/6.1 (10 palavras): palavra waiter máxima viável = 7.

A posição do waiter depende da profundidade da cadeia de chamadas:

PadrãoCadeia de ChamadasViável
android16-5 (6.12)sys_futex → do_futex → fwrpi✅ waiter word=2
android16-6 (6.12.58)sys_futex → do_futex → fwrpi✅ waiter word=2
android16-6 (6.12.69 OPLUS)sys_futex → fwrpi (PGO inlined)❌ waiter word=20
android16-6 (X9 Ultra)sys_futex → fwrpi (PGO inlined)❌ waiter word=14
android15-8 (6.6)sys_futex → do_futex → fwrpi✅ waiter word=2 (SHIFT=-2)
vivo 6.1sys_futex → do_futex → fwrpi✅ waiter word=3
OPLUS 6.1sys_futex → fwrpi (PGO inlined)❌ waiter word=13+
5.10 OPLUSsys_futex → do_futex → fwrpi✅ waiter word=0

kernel_phys_load

Todas as escritas no kernel usam o alias do mapa linear. O bootloader escolhe kernel_phys_load, que varia por SoC:

SoCkernel_phys_load
SM8845 (Ace 6T, 15T)0xa8000000
SM8750 (OnePlus 13, OPPO Pad 4 Pro)0xa8000000
SM8650 (vivo T4, X Fold3 Pro)0xa8000000
SM8850 (OnePlus 15, Xiaomi 17)0xc7800000

Um valor incorreto falha silenciosamente. Leia-o num dispositivo com root:

su -c 'grep -i "Kernel code" /proc/iomem'   # c7810000-... → 0xc7800000

Substituir em tempo de execução: KPHYS=0xc7800000 /data/local/tmp/a/e

PSELECT_SHIFT

/data/local/tmp/a/e                        # Default (shift=0)
PSELECT_SHIFT=-2 /data/local/tmp/a/e       # OnePlus 13 (6.6)

KIMAGE_TEXT_BASE

Kernels 5.10 usam 0xffffffc008000000 (VA_BITS=39, diferente do padrão 0xffffffc080000000 do 6.x). Isso é tratado automaticamente por meio do campo kimage_text_base na entrada de offset do dispositivo.

Build

make NDK_ROOT=/path/to/android-ndk

Ou diretamente:

Baixar ferramenta