
Proof-of-concept ARM64 per Android per CVE-2026-98260, una UAF del timer POSIX nel sottosistema Timer del kernel, con una catena completa di race, heap spray ed escalation a root.
Implementazione ARM64 della vulnerabilità nel sottosistema Timer della serie Infinity Core, con forma del kernel di destinazione della serie 7.0 (struttura del codice sorgente identica a Ubuntu 26.04 7.0.0-30-generic). Questo repository implementa la catena completa di attivazione e di escalazione dei privilegi; gli offset chiave sono codificati in modo fisso secondo il layout strutturale di tale versione di destinazione e consentono di correggere direttamente gli indirizzi dei simboli confrontandoli con il vmlinux di destinazione.
Quando un thread non leader chiama exec(), de_thread() scambia il TID e chiama release_task(leader); la pulizia del timer POSIX viene collocata dopo diverse operazioni che possono fallire. Se exec fallisce, il nodo timerqueue del k_itimer già rilasciato rimane nella timerqueue del task ancora vivo, e la successiva pulizia dereferenzia nuovamente quel nodo causando una UAF.
Catena di exploit: il pool di thread oracle sfrutta la race condition → lo heap spray dell'AIO ring recupera l'oggetto UAF → elist divulga l'indirizzo del task → la pagina controllata costruisce un fake timer + fake cred → la rimozione dalla timerqueue con doppia scrittura inserisce il fake cred in task->cred → setresuid(0) ottiene una root shell.
k_itimer.it.cpu.elist 0xe0
k_itimer.it.cpu.handling 0xf0
k_itimer.it_interval 0x68
dimensione k_itimer 0x180
testa task_struct.cpu_timers 0xca0
task_struct.cred 0xd00
cred.uid/gid/euid/... 4/8/14/18/24/28/34/38
cred.cap_inh/prm/eff 0x30/0x40/0x50
cred.security 0x80
cred.user_ns 0x90
dimensione cred 0xb8
Da correggere in base alla macchina di destinazione: indirizzi dei simboli (la divulgazione KASLR locale si autocalibra, non è necessario codificarli in modo fisso).
timer_lpe.c programma principale
ic_timer_target.h layout delle strutture (codificato in modo fisso)
ic_compat.h wrapper delle syscall, primitive assembly AArch64
ic_util.h utilità generiche
ic_shellcode_arm64.c generatore di shellcode AArch64
ic_target.h altri offset
export ANDROID_NDK_HOME=/path/to/ndk
$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android29-clang \
-O2 -std=gnu11 -static -fno-stack-protector -fno-pic -no-pie \
-I. timer_lpe.c ic_shellcode_arm64.c -o ic98260 \
-Wl,--gc-sections -Wl,-z,norelro -pthread
Un'implementazione ARM64 della vulnerabilità del sottosistema Infinity Core Timer, mirata alla struttura del kernel della serie 7.0 (stessa struttura del codice di Ubuntu 26.04 7.0.0-30-generic). Catena completa di attivazione ed escalation. Gli offset chiave sono codificati in modo fisso per quel layout della struttura target; solo gli indirizzi dei simboli devono essere confrontati con il vmlinux target.
Quando un thread non leader chiama exec(), de_thread() scambia i TID e chiama release_task(leader); la pulizia dei timer POSIX si trova dietro diverse operazioni che possono fallire. Dopo un exec fallito, il nodo timerqueue del k_itimer liberato rimane nel timerqueue di un task attivo, e la pulizia successiva lo dereferenzia di nuovo.
Catena: race del pool di thread oracle → lo spray dell'anello AIO recupera l'oggetto UAF → elist perde l'indirizzo del task → timer falso e cred falso creati in una pagina controllata → l'unlink del timerqueue scrive due volte il cred falso in task->cred → setresuid(0) fornisce una shell root.
k_itimer.it.cpu.elist 0xe0
k_itimer.it.cpu.handling 0xf0
k_itimer.it_interval 0x68
sizeof(k_itimer) 0x180
testa task_struct.cpu_timers 0xca0
task_struct.cred 0xd00
cred.uid/gid/euid/... 4/8/14/18/24/28/34/38
cred.cap_inh/prm/eff 0x30/0x40/0x50
cred.security 0x80
cred.user_ns 0x90
sizeof(cred) 0xb8
Solo gli indirizzi dei simboli necessitano di regolazione per target; la perdita KASLR nel kernel si autocalibra.
timer_lpe.c programma principale
ic_timer_target.h layout delle strutture (codificato in modo fisso)
ic_compat.h wrapper delle syscall, primitive assembly AArch64
ic_util.h helper condivisi
ic_shellcode_arm64.c emettitore di shellcode AArch64
ic_target.h altri offset
export ANDROID_NDK_HOME=/path/to/ndk
$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android29-clang \
-O2 -std=gnu11 -static -fno-stack-protector -fno-pic -no-pie \
-I. timer_lpe.c ic_shellcode_arm64.c -o ic98260 \
-Wl,--gc-sections -Wl,-z,norelro -pthread