Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
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.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
cve-2026-43499 — PD2229B的43499(ghostlock)可行性研究 | Kitploit
Ferramentas/GitHubGitHub/catxiaoshi/cve-2026-43499
Segurança AndroidEscalada de PrivilégiosAnálise de VulnerabilidadesExploraçãoEngenharia ReversaSegurança MóvelExploração de Binários
GitHubcatxiaoshi/cve-2026-43499

cve-2026-43499

PD2229B的43499(ghostlock)可行性研究

Ver Repositório
10há 1 mêsAinda não revisado

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

Resumo da Falha de Exploração do GhostLock no PD2229 (SM8475, 5.10.233 GKI)

一、Fatos sobre a Vulnerabilidade e o Dispositivo

1.1 Informações Básicas do CVE-2026-43499 (GhostLock)

ItemValor
Tipo de vulnerabilidadeUse-After-Free na pilha no caminho rt_mutex / futex PI
Versão introduzidaLinux 2.6.39-rc1 (maio de 2011, commit 8161239a8bcc)
Versão corrigidamainline 7.1 (commit 3bfdc63936dd), ramos estáveis: 6.1.175 / 6.6.140 / 6.12.86 / 6.18.27 / 7.0.4
Pré-requisitoCONFIG_FUTEX_PI=y (ativado por padrão nos kernels convencionais)
CVSS7.8 Alta
Estabilidade da exploração97% na cadeia original da NebuSec, root em ~5 segundos
Recompensa kernelCTFUS$ 92.337

Faixa de kernels afetados:

  • 2.6.39 ≤ Linux < 6.1.175 ✅ Afetado
  • 6.2 ≤ Linux < 6.6.140 ✅ Afetado
  • 6.7 ≤ Linux < 6.12.86 ✅ Afetado
  • 6.13 ≤ Linux < 6.18.27 ✅ Afetado
  • 6.19 ≤ Linux < 7.0.4 ✅ Afetado
  • Android GKI 5.10 não está em nenhum ramo de correção → 5.10.233 do PD2229 teoricamente afetado

1.2 Testes reais no dispositivo PD2229


二、Cadeia de exploração ideal vs. progresso real no PD2229

2.1 Cadeia original da NebuSec (bem-sucedida em x86_64 / Pixel 10)

root@kitploit:~
1. Bypass do KASLR        → timing de prefetch / PR_SET_MM_MAP auxv
2. Gatilho do UAF         → deadlock de dependência PI de três threads → FUTEX_CMP_REQUEUE_PI retorna -EDEADLK
3. Reciclagem da pilha    → PR_SET_MM_MAP copia auxv para o frame da pilha do waiter
4. Escrita restrita rb_erase → sobrescreve inet6_protos[IPPROTO_UDP]
5. CEA + ROP              → sequestro do fluxo de controle
6. Inversão do core_pattern → shell root (97% de sucesso)

2.2 Progresso real de cada etapa no PD2229


三、Resultados da enumeração exaustiva da primitiva de reciclagem da pilha (testes reais no PD2229)

3.1 Cálculos-chave do layout do frame de pilha

root@kitploit:~
Profundidade total do caminho futex:
  __arm64_sys_futex    0x90
  + do_futex           0xc0
  + futex_wait_requeue_pi  0x1b0
  = 0x300
Posição do waiter = SYS_SP - 0x300 + 0x20 = SYS_SP - 0x2e0

Caminho pselect:
  frame de pilha core_sys_select 0x1c0, stack_fds em sp+0x50
  Intervalo coberto: SYS_SP - 0x1c0 + 0x50 = a partir de SYS_SP - 0x170
  Diferença para o waiter (SYS_SP - 0x2e0) é 0x170 (368 bytes) → sem sobreposição

3.2 17 métodos de escrita na pilha testados

17/17 todas falharam.

3.3 Causa raiz da falha

O layout da pilha gerado pelo compilador do SM8475 5.10 GKI do PD2229 (PGO + LTO + BOLT) faz com que o stack_fds do core_sys_select e o rt_mutex_waiter do futex_wait_requeue_pi sejam arquiteturalmente não sobrepostos. Este é um fato objetivo determinado pelo compilador, não um problema de técnica de exploração.

O repositório JoinChang afirma explicitamente: "The pselect stack overlay only works when the freed rt_mutex_waiter lands within the user-controllable region of the stack_fds buffer" — o PD2229 não atende a essa condição.


四、Análise comparativa dos repositórios de referência públicos

NebuSec/CyberMeowfia — Framework de exploração original

  • Repositório: https://github.com/NebuSec/CyberMeowfia
  • Alvo: Linux x86_64 / Pixel 10 (6.x GKI)
  • Reciclagem da pilha: PR_SET_MM_MAP copia auxv para a pilha do kernel
  • Taxa de sucesso: 97%, ~5 segundos para [shell root]
  • Aplicabilidade ao PD2229: ❌ PR_SET_MM_MAP bloqueado por EPERM no Android

JoinChang/ghostlock-oneplus — Jailbreak do bootloader OnePlus

  • Repositório: https://github.com/JoinChang/ghostlock-oneplus
  • Dispositivos verificados:
    • OnePlus Ace 6T (PLR110, SM8845) — 6.12.38 GKI ✅
    • OnePlus 15 (PLK110, SM8845) — 6.12.23 GKI ✅
  • Pontos técnicos:
    • Extração automática de offsets: kallsyms (28) + BTF (57) + derivados (9) + constantes (12) = 103/103
    • Sobreposição de pilha pselect, SP diff = -64
    • PSELECT_SHIFT = -2
    • Cadeia de exploração: futex UAF → waiter falsificado → pselect controla a pilha → escrita restrita rb_erase → selinux_state.enforcing=0 → sobrescrita do cred para init_cred
  • Declaração explícita de inviabilidade: "Not Feasible (stack layout incompatible)" — aplicável apenas a kernels onde pselect stack_fds e waiter se sobrepõem
  • Aplicabilidade ao PD2229: ❌ Geração do kernel incompatível (6.12 vs 5.10) e layout de pilha sem sobreposição

p2p3p/GhostLock-for-OnePlus — Exploração completa do OnePlus 6.12

  • Repositório: https://github.com/p2p3p/GhostLock-for-OnePlus
  • Verificado: OnePlus Ace 6T (SM8845, 6.12.38) ✅
  • Aplicabilidade ao PD2229: ❌ Igual ao JoinChang, geração do kernel incompatível

YuKongA/ghostlock-oplus — OPPO Find N5/X8

  • Repositório: https://github.com/YuKongA/ghostlock-oplus
  • Kernel: 6.6.118 GKI
  • Aplicabilidade ao PD2229: ❌ Geração do kernel incompatível

Adaptação OPPO Find X6 Pro (PGEM10) — 5.15.149

  • Dispositivo: SM8550, 5.15.149-android13, Android 15
  • Progresso: ✅ Bypass do KASLR (perf_event_open + amostragem de callchain); estágios posteriores sem exploração completa divulgada
  • Significado: prova que o bypass do KASLR é viável no GKI 5.15, mas o estágio de reciclagem da pilha não foi verificado publicamente

pubglite55/oppo-ghostlock — OPPO Find N2

  • Repositório: https://github.com/pubglite55/oppo-ghostlock
  • Dispositivo: OPPO Find N2 (CPH2413, SM8475)
  • Kernel: 5.10.236-android12-9-o-g74d132f4467a
  • Android: 16 (BP2A.250605.015)
  • Implementado:
    • ✅ Firefox CVE-2026-10702 AAW (Estágio 1)
    • ✅ Bypass do KASLR (cálculo direto do kaslr_base)
    • ✅ Gatilho do GhostLock FUTEX (FUTEX_CMP_REQUEUE_PI ret=0)
    • ✅ Vazamento do mm_struct via KernelSnitch
    • ✅ Heap spray sk_buff (envio 4/4 bem-sucedido)
    • ✅ Verificação de 70+ offsets no IDA Pro
  • Bloqueio central:

    "pselect não consegue manipular a estrutura do waiter — com NFDS >336 o fd_set fica no heap; configfs/ashmem não suportados (SET_NAME do ashmem truncado); todos os outros caminhos de escrita no kernel bloqueados (/proc/self/mem, /dev/mem, binder)"

  • Relação com o PD2229: Mesma plataforma e mesma geração (SM8475, 5.10.236 vs 5.10.233), diferença de apenas 3 versões menores, enfrentando exatamente as mesmas limitações arquiteturais

harry1080/oppo-ghostlock — OPPO Find N2

  • Repositório: https://github.com/harry1080/oppo-ghostlock
  • Dispositivo: OPPO Find N2 (CPH2413, SM8475)
  • Kernel: 5.10.236-android12-9-o-g74d132f4467a
  • Android: 16 (BP2A.250605.015)
  • Declaração pública da comunidade:

    "pixel10 能利用的版本的 pselect stack_fds 正好和 rt_waiter 在内核栈上重合,这个部分实际上是最麻烦的地方,OPPO findN2 的内核这两个调用的栈部分完全不重合,或者重合也不可控,得找另外的控制栈的方法,要换其他可控内核栈的系统调用来构造栈,简单适配偏移是不可能成功的,oppo 的 rt_waiter 完全与 pselect stack_fds 不重合"

  • Relação com o PD2229: Ambos são SM8475 5.10 GKI, a conclusão se aplica integralmente

4.3 Tabela comparativa geral dos repositórios de referência


五、Símbolos-chave do kernel e offsets (medidos no vmlinux do PD2229)

Base estática 0xffffffc008000000, adicionar o slide do KASLR em tempo de execução.

Estrutura rt_mutex_waiter (personalizada do vivo 5.10.233)

root@kitploit:~
struct rt_mutex_waiter {
    uint64_t private;           // +0x00  (campo privado vivo)
    struct rb_node {
        uint64_t rb_parent_color; // +0x08
        uint64_t rb_right;        // +0x10  (ordem trocada pelo vivo)
        uint64_t rb_left;         // +0x18
    } tree;
    struct task_struct *task;   // +0x20
    struct rt_mutex *lock;      // +0x28
};
// Tamanho total 0x30 (48 bytes)

六、Implementado vs. a implementar

✅ Infraestrutura implementada

  1. Bypass do KASLR — perf_event_open + amostragem de callchain (mesmo método do OPPO Find X6 Pro 5.15.149)
  2. Gatilho do UAF — Deadlock PI de três threads, FUTEX_CMP_REQUEUE_PI retorna -EDEADLK
  3. Tabela de símbolos completa — 103+ símbolos verificados via IDA (seguindo a metodologia de extração 103/103 do JoinChang)
  4. Layout da estrutura rt_mutex_waiter — offsets personalizados do vivo confirmados
  5. Análise precisa do layout dos frames de pilha — cálculo de profundidade dos caminhos futex e pselect/io_uring concluído
  6. Exclusão exaustiva de 17 candidatos de reciclagem da pilha — matriz completa de "inviabilidade" estabelecida

❌ Não implementado (bloqueio central)

  1. Primitiva de reciclagem da pilha — layout de pilha do compilador do SM8475 5.10 GKI torna arquiteturalmente indisponível
  2. Primitiva de escrita restrita — rb_erase não pode ser acionado devido à falha na reciclagem da pilha
  3. Todas as etapas subsequentes — bloqueio em cascata

七、Conclusão final

⚠️ GhostLock (CVE-2026-43499) não é explorável no PD2229 (vivo X Fold+, SM8475, 5.10.233 GKI, Android 15 OriginOS 5).

A causa raiz é o layout da pilha gerado pelo compilador do SM8475 5.10 GKI (PGO+LTO+BOLT), que faz com que os frames de pilha de todas as syscalls conhecidas sejam arquiteturalmente não sobrepostos ao rt_mutex_waiter. Este é um fato objetivo determinado pelo compilador, não um problema de técnica de exploração.

Todos os casos de exploração bem-sucedida usam GKI 6.6/6.12, porque a saída do compilador nesses kernels mais novos faz o fd_set do pselect se sobrepor perfeitamente ao waiter (SP diff=-64). O GKI 5.10 não possui essa condição.


Infraestrutura estabelecida

  • ✅ Primitiva de bypass do KASLR (canal lateral perf_event_open)
  • ✅ 103+ símbolos do kernel e offsets
  • ✅ Layout da estrutura rt_mutex_waiter
  • ✅ Capacidade de gatilho do UAF
  • ✅ Matriz de exclusão de 17 candidatos de reciclagem da pilha

九、Índice de repositórios de referência


Baixar ferramenta
ItemValor
SoCQualcomm SM8475 (Snapdragon 8 Gen 1 Plus)
Versão do kernel5.10.233-gki-g6e61de9f5b58 #1 SMP PREEMPT (24 de nov. de 2025)
Versão do Android15 (OriginOS 5)
Data de compilação25/11/2025
Patch do Android01/11/2025
CONFIG_FUTEX_PIy ✅
CONFIG_UNMAP_KERNEL_AT_EL0y (KPTI ativado)
kptr_restrictaplicado
CONFIG_IO_URINGy ✅ (confirmado por símbolos vmlinux, e o seccomp não bloqueia io_uring_setup)
EtapaStatusDescrição
1. Bypass do KASLR✅ ImplementadoCanal lateral perf_event_open + amostragem de callchain (mesmo método de adaptação do OPPO Find X6 Pro 5.15.149)
2. Gatilho do UAF✅ ImplementadoDeadlock PI de três threads bem-sucedido, FUTEX_CMP_REQUEUE_PI retorna -EDEADLK
3. Primitiva de reciclagem da pilha❌ Falha arquiteturalOs frames de pilha de todas as syscalls conhecidas não se sobrepõem ao waiter (ver Seção 3)
4. Escrita restrita rb_erase❌ BloqueadaPré-requisitos não atendidos
5. Sobrescrita do inet6_protos❌ Não iniciadaDepende da etapa 4
6. ROP / sequestro do fluxo de controle❌ Não iniciadaDepende da etapa 5
7. shell root❌ Não iniciadaDepende da etapa 6
#MétodoSyscallResultado no PD2229Motivo principal da falha
1stamp_prctlPR_SET_MM_MAP❌ EPERMBloqueio rígido do Android
2stamp_pselectpselect6 (NFDS=320)❌ Sem sobreposiçãowaiter 120B abaixo do fd_set
3stamp_pselectpselect6 (NFDS>336)❌ Alocação no heapCaminho kvmalloc
4stamp_socketMCAST_JOIN_SOURCE_GROUP❌ Cobertura insuficienteEscreve apenas o campo lock
5stamp_sendmsgsendmsg❌ 80B do waiterProfundidade do frame 0x90 insuficiente
6stamp_sendmmsgsendmmsg❌ 112B do waiterFrame de pilha insuficiente
7stamp_recvmmsgrecvmmsg❌ Zera task/lockFrame 0x1d0 corrompe ponteiros críticos
8stamp_process_vmprocess_vm_writev❌ Sem sobreposiçãoPilha da thread filha alocada separadamente
9stamp_keyctlKEYCTL_INSTANTIATE_IOV❌ EOPNOTSUPPSyscall não suportada + frame 0x40
10stamp_tcpTCP_ZEROCOPY_RECEIVE❌ Frame insuficienteProfundidade estimada insuficiente
11stamp_futexFUTEX_CMP_REQUEUE_PI recursivo❌ Logicamente inviávelCorrompe a janela do UAF
12binder ioctlBINDER_WRITE_READ❌ EACCESshell sem permissão em /dev/binder
13pollpoll❌ Alocação no heappollfd no heap
14epoll_waitepoll_wait❌ Frame muito rasoFrame de pilha 0xE0
15sched_setattrsched_setattr❌ Profundidade insuficienteFrame de pilha 0xb0
16timerfd_settimetimerfd_settime❌ Sem cópia na pilhaSem buffer grande na pilha
17io_uring_registerIORING_REGISTER_*❌ Dupla falha①Frame de pilha de apenas 0xF0, destino do copy_from_user fixo em sp+0x8 (diferença de 424 bytes do sp+0x1D0 do waiter); ②Embora io_uring_setup não seja bloqueado pelo seccomp (retorna EFAULT em vez de ENOSYS), o layout da pilha não corresponde
RepositórioDispositivoSoCKernelMétodo de reciclagem da pilhaStatusReutilizável no PD2229
NebuSec/CyberMeowfiaPixel 10-6.xPR_SET_MM_MAP✅ 97%❌ Bloqueado pelo Android
JoinChang/ghostlock-oneplusOnePlus Ace 6TSM88456.12.38pselect (SP diff=-64)✅ Verificado❌ Geração do kernel incompatível
p2p3p/GhostLock-for-OnePlusOnePlus Ace 6TSM88456.12.38pselect✅ Verificado❌ Geração do kernel incompatível
YuKongA/ghostlock-oplusFind N5/X8-6.6.118pselect✅❌ Geração do kernel incompatível
Adaptação OPPO Find X6 ProFind X6 ProSM85505.15.149perf KASLR + ?🟡 KASLR ✅, restante não divulgado❌ Plataforma diferente
pubglite55/oppo-ghostlockFind N2SM84755.10.236Enumeração falhou❌ Bloqueio central⚠️ Mesma plataforma e geração, mesmo destino
harry1080/oppo-ghostlockFind N2SM84755.10.236Enumeração falhou❌ Arquiteturalmente inviável⚠️ Mesma plataforma e geração, mesmo destino
PD2229 (este relatório)PD2229SM84755.10.23317 candidatos, todos falharam❌ Arquiteturalmente inviável—
SímboloEndereçoUso
rt_mutex_start_proxy_lock0xffffffc00822baa8Entrada do gatilho da vulnerabilidade
futex_wait_requeue_pi0xffffffc0082d7df4Alocação do waiter, frame de pilha 0x1b0
__arm64_sys_futex0xffffffc0082dfe9cFrame de pilha 0x90
do_futex0xffffffc0082d0768Frame de pilha 0xc0
core_sys_select0xffffffc008634cf0Frame de pilha pselect 0x1c0
____sys_sendmsg0xffffffc0093eda88Frame de pilha 0x90
do_recvmmsg0xffffffc0093ef49cFrame de pilha 0x1d0
__arm64_sys_io_uring_register0xffffffc008aae328Frame de pilha 0x10+0x70
__io_uring_register0xffffffc008aae5f8Frame de pilha 0x80
inet6_protos0xffffffc00ab0a278Alvo de escrita da etapa 4
selinux_state0xffffffc00aee8c70Alvo de desativação do SELinux
init_task0xffffffc00ab0c240Fonte de leitura do cred
RepositórioURLValor-chave
NebuSec/CyberMeowfiahttps://github.com/NebuSec/CyberMeowfiaFramework de exploração original, 97% de sucesso
JoinChang/ghostlock-oneplushttps://github.com/JoinChang/ghostlock-oneplusAdaptação bem-sucedida no GKI 6.12, metodologia de extração de 103 offsets
p2p3p/GhostLock-for-OnePlushttps://github.com/p2p3p/GhostLock-for-OnePlusCadeia de exploração completa no GKI 6.12
YuKongA/ghostlock-oplushttps://github.com/YuKongA/ghostlock-oplusAdaptação OPPO no GKI 6.6
pubglite55/oppo-ghostlockhttps://github.com/pubglite55/oppo-ghostlockReferência de falha na mesma plataforma SM8475 5.10.236
harry1080/oppo-ghostlockhttps://github.com/harry1080/oppo-ghostlockReferência de falha na mesma plataforma SM8475 5.10.236
Análise técnica da NebuSechttps://nebusec.ai/research/ionstack-part-2/Detalhes técnicos da cadeia original do GhostLock
Correção upstreamcommit 3bfdc63936ddCódigo da correção