
CVE-2026-98260 के लिए ARM64 Android प्रूफ-ऑफ-कॉन्सेप्ट, जो कर्नेल Timer सबसिस्टम में एक POSIX टाइमर UAF है, जिसमें पूर्ण रेस, हीप स्प्रे और रूट एस्केलेशन चेन शामिल है।
Infinity Core श्रृंखला Timer सबसिस्टम भेद्यता का ARM64 कार्यान्वयन, लक्ष्य कर्नेल रूप 7.0 श्रृंखला है (Ubuntu 26.04 7.0.0-30-generic समान स्रोत कोड संरचना)। यह रिपॉज़िटरी पूर्ण ट्रिगर और प्रिविलेज एस्केलेशन श्रृंखला लागू करती है, मुख्य ऑफ़सेट लक्ष्य संस्करण संरचना लेआउट के अनुसार हार्डकोड किए गए हैं, और लक्ष्य vmlinux के साथ सीधे तुलना करके सिंबल पते सुधारे जा सकते हैं।
जब गैर-leader थ्रेड exec() को कॉल करता है, तो de_thread() TID की अदला-बदली करता है और release_task(leader) करता है, POSIX timer की सफ़ाई को कई विफल हो सकने वाले ऑपरेशनों के बाद रखा गया है। exec विफल होने के बाद, पहले से मुक्त किए गए k_itimer का timerqueue नोड अभी भी जीवित टास्क के timerqueue में बना रहता है, और बाद की सफ़ाई उस नोड को फिर से डीरेफ़रेंस करती है जिससे UAF होता है।
शोषण श्रृंखला: oracle थ्रेड पूल रेस शर्त पर हमला → AIO ring हीप स्प्रे द्वारा UAF ऑब्जेक्ट पुनर्प्राप्ति → elist द्वारा task पता लीक → नियंत्रित पृष्ठ पर fake timer + fake cred निर्माण → timerqueue हटाव दोहरा लेखन द्वारा fake cred को task->cred में लिखना → setresuid(0) से root shell प्राप्त करना।
k_itimer.it.cpu.elist 0xe0
k_itimer.it.cpu.handling 0xf0
k_itimer.it_interval 0x68
k_itimer आकार 0x180
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
cred आकार 0xb8
लक्ष्य मशीन के अनुसार सुधारने योग्य: सिंबल पते (स्थानीय KASLR लीक स्वतः कैलिब्रेट होगा, हार्डकोड की आवश्यकता नहीं)।
timer_lpe.c मुख्य प्रोग्राम
ic_timer_target.h संरचना लेआउट (हार्डकोड किया गया)
ic_compat.h syscall रैपर, AArch64 असेंबली प्रिमिटिव
ic_util.h सामान्य उपकरण
ic_shellcode_arm64.c AArch64 shellcode जनरेटर
ic_target.h अन्य ऑफ़सेट
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
इन्फिनिटी कोर टाइमर सबसिस्टम भेद्यता का एक ARM64 कार्यान्वयन, जो 7.0-श्रृंखला के कर्नेल आकार को लक्षित करता है (Ubuntu 26.04 7.0.0-30-generic के समान कोड संरचना)। पूर्ण ट्रिगर और एस्केलेशन श्रृंखला। मुख्य ऑफ़सेट उस लक्ष्य संरचना लेआउट के लिए हार्डकोडेड हैं; केवल सिंबल पतों को लक्ष्य vmlinux के विरुद्ध मिलाना आवश्यक है।
जब कोई गैर-लीडर थ्रेड exec() कॉल करता है, तो de_thread() TID की अदला-बदली करता है और release_task(leader) कॉल करता है; POSIX टाइमर क्लीनअप कई विफल-संभावित ऑपरेशनों के पीछे स्थित होता है। विफल exec के बाद, मुक्त किए गए k_itimer का timerqueue नोड एक जीवित टास्क के timerqueue में बना रहता है, और बाद में क्लीनअप उसे फिर से डीरेफ़रेंस करता है।
श्रृंखला: ओरेकल थ्रेड पूल रेस → AIO रिंग स्प्रे UAF ऑब्जेक्ट को पुनःप्राप्त करता है → elist टास्क पता लीक करता है → नियंत्रित पेज में नकली टाइमर और नकली cred तैयार किए जाते हैं → timerqueue unlink नकली cred को task->cred में दोहरा-लिखता है → setresuid(0) रूट शेल देता है।
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 head 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
केवल सिंबल पतों को प्रति-लक्ष्य समायोजन की आवश्यकता है; इन-कर्नेल KASLR लीक स्वतः कैलिब्रेट होता है।
timer_lpe.c मुख्य प्रोग्राम
ic_timer_target.h संरचना लेआउट (हार्डकोड किया गया)
ic_compat.h syscall रैपर, AArch64 असेंबली प्रिमिटिव
ic_util.h साझा सहायक
ic_shellcode_arm64.c AArch64 shellcode एमिटर
ic_target.h अन्य ऑफ़सेट
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