
Pesquisa de cadeia de exploração direcionada ao CVE-2026-43499 no Samsung Galaxy S21
Projeto KernelSU funcional e ativo para este dispositivo: kurtulusakyuz/dfroot-s21 — comece por aí. Este repositório mantém apenas a pesquisa IonStack.
Payload IonStack específico do dispositivo para o Samsung Galaxy S21 (o1s) no
firmware G991BXXSJHZC2. Status: pesquisa ENCERRADA — apenas DoS
determinístico; o caminho de escrita no kernel está provado ser impossível
nesta build. Evidências completas em RESEARCH.md.
| Campo | Valor |
|---|---|
| Modelo | SM-G991B |
| Dispositivo | o1s |
| Firmware | G991BXXSJHZC2 |
| Android | 15 / API 35 (AP3A.240905.015.A2, fingerprint samsung/o1sxeea/o1s) |
| Tamanho de página | 4096 |
| Kernel | 5.4.242-30958140-abG991BXXSJHZC2 |
| SoC | Exynos 2100 |
| Mitigações | CFI+PAC+PAN/UAO, KDP_CRED, SELinux enforcing, sem userfaultfd |
Baseado na implementação do IonStack CVE-2026-43499 publicada em
NebuSec/CyberMeowfia (upstream b850d3bddc74c3328d5fbcc0568d21962b55d949)
e BuSung-dev/CVE-2026-43499-S25U, com agradecimentos a F-19-F/IonStackQuest3.
Licença Apache 2.0 upstream mantida em LICENSE (ver NOTICE).
O programa de escrita GhostLock para este dispositivo está concluído e encerrado, não pausado. O que foi provado, em ordem:
remove_waiter() limpa
current->pi_blocked_on em vez de waiter->task->pi_blocked_on,
então um rollback de FUTEX_CMP_REQUEUE_PI deixa um ponteiro pendente
para um rt_waiter na pilha. O fix upstream 3bfdc63 está ausente do 5.4.242.sched_setattr do consumidor reproduz um Oops idêntico ao do dispositivo
(rt_mutex_adjust_prio_chain+0x108 → _raw_spin_trylock+0x1c,
VA da falha 0) tanto num guest QEMU sem KDP quanto no próprio telefone
(lastkmsg 118/119). O slot pendente está totalmente mapeado
(topo da pilha E-0x328, ciclo de vida caracterizado via QEMU+GDB).lock (+0x38) NUNCA é controlado pelo atacante
(15/15 dumps). Portes independentes (ASUS i005, rota sigreturn do AQUOS)
atingem a mesma parede. Geometria, não probabilidade.Vias relacionadas de LPE de kernel de 2026 também foram fechadas nesta build
pela configuração de firmware (USER_NS, RDS, CRYPTO_USER_API_AEAD todos
desativados; double-free do MFC inalcançável com MFC_USE_DMABUF_CONTAINER=n;
AF_ALG/eBPF restritos para shell). Artefatos pós-escrita
(KernelSU .ko + ksud compilados para este firmware exato) estão preparados
separadamente; os headers src/kernelsnitch/ nesta árvore
permanecem preparados mas não compilados (não existe consumidor sem uma escrita).
Makefile build (NDK r27+, ANDROID_NDK_HOME)
src/ código-fonte do exploit (apenas perfil o1s)
src/targets/o1s-G991BXXSJHZC2/ target.h + p0_fingerprint.h
src/kernelsnitch/ vazamento de mm_struct (colisão de hash futex, preparado)
tools/ auxiliar de fingerprint p0
RESEARCH.md notas de pesquisa (geometria, veredictos)
export ANDROID_NDK_HOME=/path/to/android-ndk
make clean all
# SLIDE_WRITER_SEL=1|2|3 seleciona writers mcast/sigreturn(padrão)/xattr.
# Não definido seleciona o writer experimental pselect (ver RESEARCH.md).
Saídas (build/o1s-G991BXXSJHZC2/):
cve-2026-43499 (payload LD_PRELOAD), cve-2026-43499-app.so (payload de app),
cve-2026-43499-root (helper root).
adb push build/o1s-G991BXXSJHZC2/cve-2026-43499 /data/local/tmp/cve-2026-43499
adb push build/o1s-G991BXXSJHZC2/cve-2026-43499-root /data/local/tmp/cve-2026-43499-root
adb shell chmod 755 /data/local/tmp/cve-2026-43499 /data/local/tmp/cve-2026-43499-root
adb shell "LD_PRELOAD=/data/local/tmp/cve-2026-43499 sh"
# em caso de sucesso:
adb shell "/data/local/tmp/cve-2026-43499-root -c 'id; getenforce'"
Gestão de expectativas: nesta build "sucesso" significa a caminhada do gatilho e sua saída de oráculo — uma caminhada com lock NULL reinicia o dispositivo em vez de conceder root (ver "Estado final" acima). Root, se algum dia for obtido via uma futura primitiva de escrita, dura apenas até o reboot; nada é gravado na flash.
/data/local/tmp é apagado no reboot — reenvie
os binários após cada boot.