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
GhostLock-for-OnePlus — (CVE-2026-43499) Programa de exploração de kernel para dispositivos OnePlus com bootloader bloqueado. | Kitploit
Ferramentas/GitHubGitHub/p2p3p/ghostlock-for-oneplus
Segurança AndroidEscalada de PrivilégiosExploraçãoPós-ExploraçãoAprendizado e EducaçãoDesenvolvimento de PayloadsExploração de Binários
GitHubp2p3p/ghostlock-for-oneplus

GhostLock-for-OnePlus

(CVE-2026-43499) Programa de exploração de kernel para dispositivos OnePlus com bootloader bloqueado.

Ver Repositório
361319há 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 — OnePlus

中文

Exploit de kernel para dispositivos OnePlus com bootloader bloqueado. Usa CVE-2026-43499 para obter acesso root sem desbloquear o bootloader ou modificar o boot.img.

Apenas para pesquisa de segurança autorizada e fins educacionais.


Índice

  • Visão Geral da Vulnerabilidade
  • Dispositivos Suportados
  • Pré-requisitos
  • Compilação
  • Uso
  • Modos de Execução
  • Detalhes Técnicos
  • Estrutura de Arquivos
  • Adicionar Novos Dispositivos
  • FAQ

Visão Geral da Vulnerabilidade

ItemDetalhe
CVECVE-2026-43499
TipoUse-After-Free no Futex PI (Priority Inheritance)
EscopoLinux kernel 2.6.39 ~ 7.1
Corrigido emMainline 7.1 (commit 3bfdc63936dd)
Status AndroidGKI 6.12.x ainda vulnerável

Causa Raiz

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

Cadeia

root@kitploit:~
futex PI UAF (CVE-2026-43499)
  ├─ Forjar objeto rt_mutex_waiter
  ├─ Controlar pilha do kernel via layout de fd_set do pselect/select
  ├─ Acionar operação rt_mutex PI para escrita arbitrária
  ├─ Escrita 1: selinux_state.enforcing = 0
  └─ Escrita 2: cred → init_cred (uid=0, capacidades completas)

Dispositivos Suportados

Outros dispositivos OnePlus na mesma família de SoC, Android 16 ou kernel 6.12.x podem ser adaptados via extração de offsets do boot.img.


Pré-requisitos

ksud (Obrigatório para KernelSU)

GhostLock trata da escalada de privilégios. A instalação do KernelSU requer ksud (fornecido com kernelsu.ko específico do KMI):

FonteNotas
APK ReSukiSU (recomendado)Instale ReSukiSU; o APK inclui libksud.so

Sem o ksud, o exploit ainda obtém shell root com uid=0, mas o KernelSU não será instalado e o su não persistirá.


Compilação

Pré-requisitos

  • Android NDK (r25+)
  • Definir ANDROID_NDK_HOME ou ANDROID_NDK_ROOT

Compilar

root@kitploit:~
# Padrão (API 35)
make

# Especificar nível da API
make API=34

# Especificar caminho do NDK
NDK=/caminho/para/android-ndk make

Artefato

ghostlock — executável ELF ARM64 linkado estaticamente.


Uso

Configuração Única

root@kitploit:~
# 1. Habilitar modo ADB TCP
adb tcpip 5555

# 2. Enviar chave ADB (necessária para modo bootstrap)
adb push ~/.android/adbkey /data/local/tmp/a/adbkey

# 3. Enviar o exploit
adb push ghostlock /data/local/tmp/a/e
adb shell chmod 755 /data/local/tmp/a/e

Após o primeiro sucesso, resetprop define automaticamente persist.adb.tcp.port=5555, permitindo execuções totalmente automáticas em reinicializações subsequentes.


Modos de Execução

Exploit Completo (contexto shell ADB)

root@kitploit:~
/data/local/tmp/a/e
  • perf disponível, vazamento preciso de child task_struct
  • Duas etapas: Escrita 1 desativa SELinux → Escrita 2 escalada de privilégios → carregamento do KernelSU

Modo Bootstrap (contexto App, com seccomp restrito)

root@kitploit:~
/data/local/tmp/a/e --bootstrap
  1. Escrita 1 → desativar SELinux
  2. Usar permissões liberadas para setprop habilitar ADB TCP 5555
  3. Cliente Mini ADB embutido conecta a 127.0.0.1:5555
  4. Autenticação RSA com chave previamente enviada
  5. Execução completa do exploit via shell ADB (sem seccomp)

Apenas Escrita 1

root@kitploit:~
/data/local/tmp/a/e --write1
  • Até 20 tentativas
  • Útil para depuração ou desativação temporária do SELinux

Detalhes Técnicos

1. Correspondência de Kernel em Tempo de Execução

Offsets armazenados em tabela de consulta src/devices/offsets.h, indexada por uname -r. O programa faz correspondência automática na inicialização; kernels desconhecidos são rejeitados.

root@kitploit:~
static const struct kernel_offsets known_offsets[] = {
  OFFSETS_ENTRY("6.12.38-android16-5-...-ab14275539-4k", ...),
  OFFSETS_ENTRY("6.12.38-android16-5-...-ab14552068-4k", ...),
  OFFSETS_ENTRY("6.12.23-android16-5-...-ab14541642-4k", ...),
  { .uname_r = NULL }  /* sentinela */
};

Fontes de Offset

Structs Verificadas por BTF

2. Bypass de KASLR

Modo SLIDE — Vazamento de boot_id

Quando ponteiros do kernel são restritos (kptr_restrict), vaze o endereço base via boot_id sobrescrito com um endereço do kernel:

root@kitploit:~
Ler /proc/sys/kernel/random/boot_id
  └─ UUID contém endereço de nfulnl_logger
      └─ Deslocamento KASLR = leaked_addr - image_offset
          └─ kaslr_base

Modo FOPS/CFI — Vazamento da Tabela fops

Quando o dispositivo ashmem está acessível, use primitivas de leitura/escrita do configfs para ler ponteiros de função da tabela fops do ashmem e calcular o deslocamento KASLR.

3. Heap Spray do Kernel

Forjar objetos do kernel em páginas order-3 (32KB):

  • Fake file_operations — sequestrar ponteiro fops do miscdevice ashmem
  • Fake rt_mutex_waiter — simular nó waiter da cadeia PI
  • Fake task_struct — referência de tarefa durante travessia PI
  • Fake rt_mutex (lock) — informações corretas de waiter/owner

Implementado via SKB (socket buffer) + KernelSnitch:

  • KernelSnitch — colisão de hash futex para vazar endereços de mm_struct
  • Spray SKB — sendmsg para preencher heap do kernel

4. Leitura/Escrita Física de Memória (Pipe)

Após obter a base KASLR, use buffers de pipe para acesso à memória em nível físico:

root@kitploit:~
1. Localizar buffer de pipe no physmap
2. Forjar tabela de operações pipe_buffer apontando para pipe_buf_ops conhecido
3. Sequestrar pipe_buffer.page para endereço físico alvo
4. Leitura/escrita física arbitrária via operações normais de pipe

Suportado: pipe_read64, pipe_write64, pipe_phys_read_data, pipe_phys_write_data

5. Escrita em Duas Etapas

Escrita 1 — Desativar SELinux

root@kitploit:~
Alvo: selinux_state.enforcing (offset 0x00)
Método: escrita PI do nó filho → forjar __rb_parent_color do waiter
        apontando para selinux_enforcing - 8
        rebalanceamento da rb-tree escreve 0x00

Escrita 2 — Escalar para Root

root@kitploit:~
Alvo: ponteiro cred do processo filho
Método: 1. fork filho → perf_find_task() localizar task_struct
        2. calcular offset do campo cred
        3. escrita PI do nó filho → cred = init_cred (uid=0, caps completas)
        4. limpar seccomp (TIF_SECCOMP + struct seccomp zerada)

A verificação de capacidade de leitura é realizada após a sobrescrita de cred.

6. Cliente Mini ADB Embutido

src/core/miniadb.c — cliente leve do protocolo ADB para modo bootstrap:

root@kitploit:~
1. TCP connect 127.0.0.1:5555
2. A_CNXN → solicitação de conexão
3. A_AUTH → desafio token RSA
4. dlopen("libcrypto.so") → PEM_read_bio_RSAPrivateKey → RSA_sign
5. A_AUTH (AUTH_SIGNATURE) → resposta assinada
6. A_CNXN → conexão estabelecida
7. A_OPEN "shell:/data/local/tmp/a/e" → exploit completo

Suporta algoritmos de assinatura SHA-1 e SHA-256.


Estrutura de Arquivos

root@kitploit:~
ghostlock-oneplus/
├── Makefile                        # Configuração de compilação (cross-compilação NDK)
├── README.md                       # Documentação
├── src/
│   ├── core/                       # Código principal do exploit
│   │   ├── main.c                  # Ponto de entrada: escrita em duas etapas + shell root
│   │   ├── fops.c                  # Modo FOPS/CFI: rota pselect, escrita PI, vazamento KASLR
│   │   ├── util.c                  # Utilitários: heap spray, KASLR, primitivas R/W do kernel
│   │   ├── slide.c                 # Modo SLIDE: vazamento KASLR via boot_id + rota pselect
│   │   ├── pipe.c                  # Leitura/escrita física de memória via buffer de pipe (physrw)
│   │   ├── root.c                  # Sobrescrita de cred, limpeza de seccomp, gerenciamento de filho root
│   │   ├── miniadb.c              # Cliente ADB embutido (TCP + autenticação RSA)
│   │   ├── common.h               # Macros globais, structs, declarações, constantes
│   │   ├── target.h               # Layout de memória alvo / offsets de struct / parâmetros KASLR
│   │   ├── offset.h               # Ponte de configuração alvo em tempo de compilação (#include TARGET_CONFIG_H)
│   │   └── kernelsnitch/          # KernelSnitch — vazamento de endereço mm_struct
│   │       ├── kernelsnitch.h     # Algoritmo principal: colisão de hash futex + força bruta
│   │       ├── futex_hash.h       # Função hash futex
│   │       ├── timeutils.h        # Medição de timestamp de CPU (RDTSC)
│   │       └── utils.h            # Macros auxiliares (pr_info / SYSCHK / ASSERT etc.)
│   └── devices/                   # Tabelas de offset por dispositivo
│       ├── offsets.h              # Agrega todos os offsets de dispositivos (tabela de consulta + sentinela)
│       ├── ace6t/offsets.h        # Offsets do OnePlus Ace 6T (2 versões de kernel)
│       └── op15/offsets.h         # Offsets do OnePlus 15 (1 versão de kernel)
└── tools/                         # Ferramentas de extração de offsets
    ├── extract_target.py          # Extrair offsets de símbolos globais kallsyms (28 itens)
    └── extract_btf.py             # Extrair offsets de campos de struct BTF (57 itens)

Visão Geral dos Módulos Principais


Adicionar Novos Dispositivos

Apenas o boot.img do dispositivo alvo é necessário — sem root, sem acesso ao dispositivo.

Extrair Offsets

root@kitploit:~
# 1. Extrair kernel do boot.img
python -c "import struct; d=open('boot.img','rb').read(); \
           open('kernel','wb').write(d[4096:4096+struct.unpack_from('<I',d,8)[0]])"

# 2. Obter kallsyms (root: adb shell su -c 'cat /proc/kallsyms' > kallsyms.txt)
#    Ou do vmlinux: nm vmlinux > kallsyms.txt

# 3. Extrair offsets de símbolos globais
python tools/extract_target.py     # 28 offsets, verificado automaticamente

# 4. Extrair offsets de campos de struct
python tools/extract_btf.py kernel  # 57 offsets, verificado automaticamente

Etapas de Adaptação

  1. Criar src/devices/<nome>/offsets.h (ver ace6t/offsets.h)
  2. #include em src/devices/offsets.h
  3. Atualizar KIMAGE_TEXT_BASE e layout de memória em src/core/target.h se necessário
  4. Recompilar

Ajuste Entre Dispositivos


FAQ

P: Nenhuma saída ao executar?

Certifique-se de estar executando em um shell ADB. Contexto de aplicativo requer --bootstrap.

P: "no offsets for this kernel"?

Sua versão do kernel ainda não é suportada. Siga Adicionar Novos Dispositivos para extrair offsets e recompilar.

P: Escrita 1 continua falhando?

  • Certifique-se de fixar o núcleo de CPU correto (macro CORE)
  • Ajuste a temporização de PSELECT_ENTER_DELAY_USEC
  • Verifique processos interferentes

P: Escrita 2 perf retorna 0?

  • Verifique se seccomp bloqueia perf_event_open (use --bootstrap em contexto de aplicativo)
  • Verifique se o bypass de KASLR foi bem-sucedido (kaslr_base válido)

P: KernelSU não carrega?

  • Confirme que ksud existe e é executável
  • Verifique a integridade do arquivo de política de rede (correção load_policy)

Licença

Apenas para pesquisa de segurança autorizada e fins educacionais.

Baixar ferramenta
DispositivoCodinomeSoCKernelFirmwareStatus
OnePlus Ace 6TPLR110SM8845 (Snapdragon 8s Elite)6.12.38-android16-5-...-ab14275539-4kColorOS 16.0.2.403✅ Verificado
OnePlus Ace 6TPLR110SM8845 (Snapdragon 8s Elite)6.12.38-android16-5-...-ab14552068-4kColorOS 16.0.8.301✅ Verificado
OnePlus 15PLK110SM8845 (Snapdragon 8s Elite)6.12.23-android16-5-...-ab14541642-4k—✅ Verificado
Release CIBaixe de ReSukiSU CI (ksud-aarch64-linux-android.zip)
TipoQuantidadeExtração
Símbolos globais kallsyms28tools/extract_target.py
Campos de struct BTF57tools/extract_btf.py
Valores derivados9Calculado automaticamente
Constantes fixas12Hardcoded
StructCamposFinalidade
task_struct17Descritor de processo, cred, seccomp
rt_mutex_waiter6Alvo de forja UAF
cred4Credenciais, capacidades
seccomp3Estado do filtro seccomp
pipe_inode_info11Operações de buffer de pipe
file_operations13Tabela fake fops
mm_struct1Proprietário do descritor de memória
MóduloArquivo(s)Responsabilidade
Entradamain.cAnálise de CLI, despacho W1/W2, fluxo bootstrap
Rota PIfops.c / slide.cLayout de pilha pselect/select, manipulação de cadeia futex PI
KASLRutil.c / fops.c / slide.cBypass de modo duplo: vazamento via boot_id + vazamento de tabela fops
Heap Sprayutil.cAlocação de páginas order-3, spray SKB, layout de objetos forjados
R/W Físicopipe.cSequestro de buffer de pipe, acesso arbitrário à memória física
Escalada de Privilégiosroot.cSobrescrita de cred, verificação de capacidade, limpeza de seccomp
ADBminiadb.cCliente leve do protocolo ADB, autenticação RSA
Mecanismo de Vazamentokernelsnitch/Colisão de hash futex para localização de mm_struct
Item
Notas
VA_BITS48 vs 39 → atualizar layout de memória em target.h
TemporizaçãoAjustar parâmetros PSELECT_* em common.h
AshmemImplementação C vs Rust → atualizar correspondência de símbolos em extract_target.py
SecureguardDispositivos não OnePlus podem simplificar a implantação