
Pesquisa de cadeia de exploração direcionada ao CVE-2026-43499 no Samsung Galaxy S21
Payload IonStack específico para o dispositivo Samsung Galaxy S21 (o1s) no
firmware G991BXXSJHZC2. Fornece root volátil via exploit LD_PRELOAD +
daemon root-helper call_usermodehelper (mesma forma que IonStack-S22U /
IONSTACK-S22). Status: pesquisa — bloqueado, ver RESEARCH.md.
| Campo | Valor |
|---|---|
| Modelo | SM-G991B |
| Dispositivo | o1s |
| Firmware | G991BXXSJHZC2 |
| Android | 12 / API 31 (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).
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)
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 pselect experimental (ver RESEARCH.md).
Saídas (build/o1s-G991BXXSJHZC2/):
cve-2026-43499 (payload LD_PRELOAD), cve-2026-43499-app.so (payload do app),
cve-2026-43499-root (root helper).
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'"
O root (se obtido) dura apenas até o reboot; nada é gravado na flash.
sched_setattr → rt_mutex_adjust_prio_chain → _raw_spin_trylock falha NULL) sem nunca
conseguir aplicar o stamp: o campo lock de 8 bytes fica em uma lacuna de cópia
que nenhuma syscall bloqueante pesquisada cobre (mapa de profundidade por syscall
verificado por disasm em RESEARCH.md). O gate de recuperação por pipe falha
sistematicamente (0/0)./data/local/tmp é apagado no reboot — reenvie
os binários após cada boot.