
Android kernel exploit for CVE-2019-2215, Binder ड्राइवर में use-after-free, जो असुरक्षित ARM64 उपकरणों पर मेमोरी भ्रष्टाचार और cred patching के माध्यम से रूट तक विशेषाधिकार वृद्धि सक्षम करता है।
CVE-2019-2215 — Android Binder में Use-After-Free विशेषाधिकार वृद्धि विवरण
CVE-2019-2215 कमजोरी के लिए एक्सप्लॉइट — Android कर्नेल के binder ड्राइवर में use-after-free। यह कमजोर उपकरणों पर विशेषाधिकारों को root तक बढ़ाने की अनुमति देता है। भेद्यता
CVE-2019-2215 — epoll के साथ काम करते समय binder_thread में use-after-free। यह त्रुटि binder_poll() में wait-कतार के गलत प्रसंस्करण के कारण होती है, जिससे कर्नेल मेमोरी को अधिलेखित करने की संभावना होती है।
कार्य सिद्धांत
पॉइंटर लीक (leakTaskStruct)
epoll और binder के बीच रेस कंडीशन writev/pipe के माध्यम से वर्तमान प्रक्रिया के task_struct पर पॉइंटर पढ़ने की ओर ले जाती है।
addr_limit का अधिलेखन (clobberAddrLimit)
उसी रेस कंडीशन का उपयोग task_struct संरचना के addr_limit फ़ील्ड में 0xFFFFFFFFFFFFFFFE लिखने के लिए किया जाता है, जो संपूर्ण कर्नेल मेमोरी तक पहुंच खोलता है।
cred पैच (patchCred)
pipe चैनल (kernel_fd) के माध्यम से वर्तमान प्रक्रिया की cred संरचना पढ़ी और अधिलेखित की जाती है:
UID/GID = 0 (root)
पूर्ण क्षमताएँ (CAP_FULL_SET)
SELinux अक्षम करना (disableSELinuxEnforcing)
nsproxy के माध्यम से कर्नेल का आधार पता प्राप्त किया जाता है, और selinux_enforcing फ़्लैग को शून्य किया जाता है।
रूट विशेषाधिकारों के साथ शेल चलाना: system("/bin/sh")
आवश्यकताएँ
कमजोर Android संस्करण वाला उपकरण (अक्टूबर 2019 पैच से पहले)
ARM64 आर्किटेक्चर
/dev/binder की उपलब्धता
संकलन के समय कर्नेल प्रतीकों को निर्दिष्ट करना आवश्यक है:
init_nsproxy — कर्नेल आधार की गणना के लिए
selinux_enforcing — SELinux अक्षम करने के लिए
प्रतीक लक्ष्य प्रणाली पर /proc/kallsyms से प्राप्त किए जा सकते हैं।