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
CVE-2026-98260 — Pesquisa de LPE no kernel Android para CVE-2026-98260 (UAF em posix-cpu-timers): PoC de acionamento, cadeias de shell uid-0 com credenciais falsas e credenciais reais, além de um app de bootstrap Shizuku/KernelSU. | Kitploit
Ferramentas/GitHubGitHub/woshigenm/cve-2026-98260
Segurança AndroidEscalada de PrivilégiosForensia de MemóriaExploraçãoPós-ExploraçãoSegurança MóvelDesenvolvimento de PayloadsExploração de Binários
GitHubwoshigenm/cve-2026-98260

CVE-2026-98260

Pesquisa de LPE no kernel Android para CVE-2026-98260 (UAF em posix-cpu-timers): PoC de acionamento, cadeias de shell uid-0 com credenciais falsas e credenciais reais, além de um app de bootstrap Shizuku/KernelSU.

441há 5 diasAinda 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
Ver Repositório

CVE-2026-98260 — UAF em posix-cpu-timers após um exec falho

Português | 简体中文

Pesquisa de escalada de privilégios local no Android para um use-after-free no caminho de saída do posix-cpu-timers. O repositório inclui um PoC apenas de disparo, um exploit de verificação de credenciais falsas, um estágio de shell uid-0 com credenciais reais, um app KernelSU baseado em Shizuku e uma pré-verificação de vulnerabilidade.

Branch magicos-11.0.0.109-6.12.58: esta branch é de perfil duplo. O APK e os binários nativos selecionam um perfil a partir do uname -r exato em tempo de execução: MagicOS 10.0.0 / 6.12.38 é o perfil verificado, enquanto MagicOS 11.0.0.109 / 6.12.58 é adaptado estaticamente e sua validação de execução no dispositivo ainda está pendente. O APK inclui ambas as tabelas ko-syms de 226 símbolos e seleciona a correspondente.

Status em resumo

ItemValor
CVECVE-2026-98260
ClasseLPE (use-after-free, remoção da rb-tree do timerqueue)
AlvoHonor MagicPad3 Pro 13.3 YLP-W00, MagicOS 10.0.0 / 11.0.0.109 (Android 16), branch magicos-11.0.0.109-6.12.58
Kernel6.12.38-android16-5-gfde7767f6ef6-abogki481467632-4k (verificado)
6.12.58-android16-6-g3a7ac1674240-abogki541502914-4k (adaptado)
Status do perfilperfil duplo; 6.12.38 verificado, validação em execução do 6.12.58 pendente
SELinuxEnforcing
Patchesausentes na build testada
MitigaçõesKASLR ativado, SMEP/SMAP/PAN ativados, KASAN compilado mas desativado
Bootloaderbloqueado e não desbloqueável; sem gravações em partições
ComponenteStatusResultado
src/poc.cverificado no 6.12.38disparo destrutivo; o reap causa panic em cleanup_timerqueue
src/exp.cverificado no 6.12.38credencial falsa; getuid()==0 && geteuid()==0; não consegue executar
src/uid0.cverificado no 6.12.38credencial real; shell uid-0 em u:r:shell:s0
app/verificado no 6.12.38bootstrap Shizuku + KernelSU; uid 0 em u:r:ksu:s0
src/vuln_precheck.hadicionadogate de perfil/ambiente; --check / --force
Perfil 6.12.58adaptadosites, selinux_state e sua tabela ko-syms de 226 símbolos rederivados; execução no dispositivo pendente
APK de perfil duplotestado no 6.12.38seleção de perfil e ko-syms por uname -r; caminho KSU em execução no 6.12.38 aprovado

Versão atual: v1.4.3-app. A pré-versão v1.4.2-app foi retirada em 2026-10-30; sua tag é mantida apenas por histórico. Consulte docs/release-notes.md para o registro de versões e lacunas conhecidas.

Estrutura do repositório

src/poc.c              trigger only; the reap panics on the tested kernel
src/exp.c              fake-cred chain; verifies uid 0 via getuid/geteuid
src/uid0.c             real-cred chain; zeroes cred->uid/gid and execs sh
src/kernel_profile.h   per-release call sites, symbols and structure offsets
src/trace_ids.h        runtime kmem trace event IDs; unprivileged probe
src/vuln_precheck.h    shared profile/environment gate
app/                   Android root app (Shizuku + KernelSU bootstrap)
docs/analysis.md       root cause, exploit chain and device notes
scripts/dump_device.sh  root device dump: all .ko/modinfo, kernel/config/policy, perf/tracefs, vendor mount, harness, active boot.img
Makefile               single build entry (NDK cross-compile, app APK)
README.zh-CN.md        Chinese version of this document

Causa raiz

Uma thread que não é líder criou um timer posix CLOCK_THREAD_CPUTIME_ID e depois falha em execve() após de_thread() mantém o nó do timer na fila. O SIGKILL que interrompe o exec faz a thread sair através de exit_itimers(), que não consegue desarmar um timer cuja tarefa já está saindo. O k_itimer é liberado enquanto seu timerqueue_node ainda está vinculado na fila posix_cputimers da tarefa. Quando o pai colhe o zumbi, release_task() -> posix_cpu_timers_exit() -> cleanup_timerqueue() chama timerqueue_del()/rb_erase() no nó liberado.

A remoção é a primitiva de escrita: rb_erase() armazena um valor __rb_parent_color controlado em um alvo rb_left controlado. O exploit coreografa a recuperação de slab/page para que o nó liberado fique em uma página preenchida com o payload do atacante, e então escolhe o alvo e o valor.

Veja docs/analysis.md para o trace de panic observado, os offsets do YLP-W00, os vazamentos baseados em tracefs, a coreografia SLUB/RCU, a cadeia de credenciais falsas em dois estágios e a cadeia de credenciais reais de escrita única.

Build

Requisitos: Android NDK r29 em /opt/android-ndk-r29 (sobrescreva com NDK=). Os alvos são aarch64, API 24 por padrão. O app também precisa do Android SDK (build-tools 37.0.0, platform 37), um JDK e os jars do Shizuku em ~/.local/share/android-cve-env/cve98260-app (sobrescreva com APP_DEPS=). Os artefatos de build permanecem em build/ e são ignorados pelo git. Os jars do Shizuku são fornecidos pelo usuário; scripts/fetch-deps.sh os verifica contra deps.lock (SHA-256) e nunca baixa nada.

AlvoSaída / ação
make / make pocbuild/poc
make expbuild/exp
make uid0build/uid0 (estático; o estágio de shell se reexecuta)
make build-allcompila poc + exp + uid0 + apk
make hostbuild/poc.static para validação qemu no host
make emuexecuta build/poc.static sob qemu (com --force)
make apkapp/CVE98260Root.apk
make cleanremove build/
make helplista os alvos

Pré-verificação de vulnerabilidade

poc, exp e uid0 chamam um gate de perfil antes de tocar no kernel. Ele aceita apenas a release exata do perfil (6.12.38 verificada, 6.12.58 adaptada), exige arm64 e páginas de 4 KiB, e para exp/uid0 também verifica a disponibilidade de tracefs/kmem e (para a cadeia de credenciais falsas) panic_on_warn=0. Qualquer outra release não é confirmada e o programa sai com código 2:

build/uid0 --check          # print the verdict, do not trigger
build/uid0 --check --force  # same, overriding an unconfirmed environment

Use --force ou CVE98260_FORCE=1 apenas após verificar o kernel de forma independente. --force relaxa apenas as verificações de ambiente; exp, uid0 e o app ainda exigem um perfil exato de kernel_profile.h. O gate deliberadamente não é uma sondagem em tempo de execução: uma sondagem que alcançasse o bug deixaria, ela própria, um nó timerqueue obsoleto para trás.

No YLP-W00, um shell sem privilégios não consegue ler /proc/sys/kernel/panic_on_warn nem /proc/cmdline; para um perfil conhecido, o gate assume o valor 0 validado para 6.12.38. A mesma suposição é usada para o perfil adaptado 6.12.58 até que sua validação em tempo de execução seja concluída. Versões desconhecidas permanecem bloqueadas.

Uso: shell uid-0

O exploit inicia como um processo de shell comum (uid 2000, SELinux u:r:shell:s0) e não usa su. Não o inicie através de su: a condição testada é uma inicialização sem privilégios.

make uid0
adb push build/uid0 /data/local/tmp/uid0
adb shell chmod 755 /data/local/tmp/uid0
adb shell /data/local/tmp/uid0          # runs id and prints the context
adb shell /data/local/tmp/uid0 shell    # interactive sh -i

Antes da cadeia completa, use os modos não destrutivos:

adb shell /data/local/tmp/uid0 --probe-ids  # discover kmem trace event IDs
adb shell /data/local/tmp/uid0 leak         # timer/cred leak only; no UAF/reap
Baixar ferramenta