
ARM64-Android-Proof-of-Concept für CVE-2026-98260, einen POSIX-Timer-Use-after-Free im Timer-Subsystem des Kernels, mit vollständiger Race-, Heap-Spray- und Root-Eskalationskette.
ARM64-Implementierung der Schwachstelle im Timer-Subsystem der Infinity Core-Serie, wobei die Ziel-Kernelform die 7.0-Serie ist (Ubuntu 26.04 7.0.0-30-generic mit identischer Quellcodestruktur). Dieses Repository implementiert die vollständige Auslöse- und Privilegieneskalationskette; die entscheidenden Offsets sind gemäß dem Strukturlayout dieser Zielversion fest verdrahtet und können direkt anhand des Ziel-vmlinux zur Korrektur der Symboladressen abgeglichen werden.
Wenn ein Nicht-Leader-Thread exec() aufruft, tauscht de_thread() die TID aus und ruft release_task(leader) auf, wobei die POSIX-Timer-Bereinigung hinter mehrere fehlschlagbare Operationen verschoben wird. Nach einem fehlgeschlagenen exec verbleibt der timerqueue-Knoten des bereits freigegebenen k_itimer in der timerqueue der noch lebenden Aufgabe, und die spätere Bereinigung dereferenziert diesen Knoten erneut, was zu einer UAF führt.
Ausnutzungskette: Oracle-Thread-Pool löst Race Condition aus → AIO-Ring-Heap-Spray recycelt UAF-Objekt → elist leakt Task-Adresse → kontrollierte Seite konstruiert Fake-Timer + Fake-Cred → Timerqueue-Aushängen mit Doppel-Schreibvorgang schreibt Fake-Cred in task->cred → setresuid(0) erlangt Root-Shell.
k_itimer.it.cpu.elist 0xe0
k_itimer.it.cpu.handling 0xf0
k_itimer.it_interval 0x68
k_itimer Größe 0x180
task_struct.cpu_timers Kopf 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
cred Größe 0xb8
An die Zielmaschine anzupassen: Symboladressen (das lokale KASLR-Leak kalibriert sich selbst, keine Festverdrahtung erforderlich).
timer_lpe.c Hauptprogramm
ic_timer_target.h Strukturlayout (fest verdrahtet)
ic_compat.h Syscall-Wrapper, AArch64-Assembler-Primitive
ic_util.h Allgemeine Hilfsfunktionen
ic_shellcode_arm64.c AArch64-Shellcode-Generator
ic_target.h Weitere Offsets
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
Eine ARM64-Implementierung der Schwachstelle im Infinity Core Timer-Subsystem, die auf die Kernel-Form der 7.0-Serie abzielt (gleiche Codestruktur wie Ubuntu 26.04 7.0.0-30-generic). Vollständige Auslöse- und Eskalationskette. Die wichtigsten Offsets sind fest auf das Strukturlayout dieses Ziels codiert; nur die Symboladressen müssen mit dem Ziel-vmlinux abgeglichen werden.
Wenn ein Nicht-Leader-Thread exec() aufruft, tauscht de_thread() die TIDs aus und ruft release_task(leader) auf; die POSIX-Timer-Bereinigung steht hinter mehreren fehlbaren Operationen. Nach einem fehlgeschlagenen exec bleibt der Timerqueue-Knoten des freigegebenen k_itimer in der Timerqueue einer aktiven Task, und die spätere Bereinigung dereferenziert ihn erneut.
Kette: Rennen im Oracle-Thread-Pool → AIO-Ring-Spray beansprucht das UAF-Objekt zurück → elist leakt die Task-Adresse → gefälschter Timer und gefälschte Credentials werden in einer kontrollierten Seite erstellt → das Unlink der Timerqueue schreibt die gefälschten Credentials doppelt in task->cred → setresuid(0) liefert eine Root-Shell.
k_itimer.it.cpu.elist 0xe0
k_itimer.it.cpu.handling 0xf0
k_itimer.it_interval 0x68
sizeof(k_itimer) 0x180
task_struct.cpu_timers Kopf 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
Nur die Symboladressen müssen pro Ziel angepasst werden; das In-Kernel-KASLR-Leak kalibriert sich selbst.
timer_lpe.c Hauptprogramm
ic_timer_target.h Strukturlayout (fest verdrahtet)
ic_compat.h Syscall-Wrapper, AArch64-Assembler-Primitive
ic_util.h Gemeinsame Hilfsfunktionen
ic_shellcode_arm64.c AArch64-Shellcode-Generator
ic_target.h Weitere Offsets
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