
CVE-2021-28664 के लिए PoC skeleton, जो एक Mali kbase GPU driver use-after-free है, ARM64 Android पर kernel arbitrary physical memory read/write primitive को प्रदर्शित करता है।
Mali kbase GPU ड्राइवर UAF (CVE-2021-28664) → कर्नेल मनमाना भौतिक मेमोरी पढ़ने/लिखने के प्रिमिटिव का PoC ढांचा। सामान्य ARM64 Android प्लेटफ़ॉर्म के लिए, किसी विशिष्ट विक्रेता या मॉडल से स्वतंत्र।
शोध का दायरा केवल "कर्नेल मनमाना भौतिक मेमोरी पढ़ने/लिखने के प्रिमिटिव" तक ही है: कैसे एक GPU ड्राइवर के use-after-free को स्थिर, नियंत्रित, और सुरक्षित रूप से विफल होने वाली कर्नेल मेमोरी पढ़ने/लिखने की क्षमता में बदला जाए।
यह रिपॉज़िटरी कोई हमला प्रदान नहीं करती। इसमें तैयार exploit, सीधे चलने योग्य कोड, या किसी भी डिवाइस के ऑफ़सेट/सीरियल नंबर/फ़र्मवेयर शामिल नहीं हैं; किसी भी सामग्री का उपयोग हमलावर गतिविधियों के लिए करना प्रतिबंधित है (नीचे देखें)।
pipe_buffer संरचना/copy_page_to_iter सत्यापन में बड़े अंतर वाले नए कर्नेल (5.x से
संबंधित स्रोत कोड के अनुसार पुनः सत्यापन आवश्यक, श्रृंखला संरचना संदर्भ के लिए उपयोगी है परंतु विवरण सार्वभौमिक नहीं);/dev/mali पहुँच अनुमति रहित वातावरण (seLinux/विक्रेता नीति प्रतिबंध)।TODO(DEVICE) के रूप में खाली छोड़े गए हैं, अनुकूलन उपयोगकर्ता का स्वयं का
रिवर्स इंजीनियरिंग कार्य है, रिपॉज़िटरी इसमें सहायता नहीं करती।CVE-2021-28664: Mali kbase ड्राइवर के MEM_ALIAS पथ में GPU_WR अनुमति की
जाँच का अभाव है, हमलावर पहले से मुक्त किए गए GPU मेमोरी पेज को अपने GPU पता स्थान में alias कर सकता है,
जिससे "GPU पक्ष से मुक्त भौतिक पेजों की निरंतर दृश्यता/लेखन क्षमता" बनती है——एक GPU/कर्नेल सीमा पार करने वाला
use-after-free।
शोषण का मूल्य GPU मेमोरी में स्वयं नहीं, बल्कि इसमें है:
WRITE_VALUE job की सहायता से alias में दृश्य पेजों पर लक्षित संशोधन किया जा सकता है।victim GPU बफ़र + MMU पेज टेबल dump → भौतिक पता मानचित्र स्थापित करें
→ trigger बफ़र मुक्ति से दबाव बनाएं → pipe स्प्रे (F_SETPIPE_SZ छोटा करें)
→ pipe_buffer सरणी मुक्त क्षेत्र में गिरे (क्रॉस-कैश UAF पुनःउपयोग)
→ alias दृश्य से ops पॉइंटर स्कैन करें → anon_pipe_buf_ops लीक करें → KASLR slide
→ GPU से pipe_buffer का page / offset / len संशोधित करें
→ वैध pipe read/write पथ की सहायता से
⇒ मनमाना भौतिक पेज पढ़ना (नकली page पॉइंटर)
⇒ मनमाना भौतिक पेज लिखना (pipe merge लेखन पथ)
⇒ ज्ञात सामग्री पेज से स्व-सत्यापन oracle बनाएं, सुनिश्चित करें कि पढ़ना/लिखना रिक्त/अमैप्ड क्षेत्र में न गिरे
यहीं तक।
page_to_virt कार्यान्वयन में अंतर,
no-map आरक्षित क्षेत्र रैखिक मैपिंग में मौजूद ही नहीं होते (पढ़ने पर panic)।docs/
01-exploit-chain.md UAF से पढ़ने/लिखने के प्रिमिटिव तक: प्रत्येक चरण का सिद्धांत और कार्यान्वयन बिंदु
02-physical-address-model.md भौतिक पता मॉडल, सुरक्षा द्वार, m अस्पष्टता, ज्ञात जाल
exploit/
cve-2021-28664-poc.c PoC टेम्पलेट: पढ़ने/लिखने के प्रिमिटिव की पूर्ण प्रक्रिया रूपरेखा (डिवाइस मान रहित)
scripts/
README.md प्रयोग स्वचालन उपकरण के डिज़ाइन विवरण (लूप/सत्यापन/पुनर्स्थापन)
exploit/cve-2021-28664-poc.c पढ़ने/लिखने के प्रिमिटिव का PoC ढांचा टेम्पलेट है:
TODO(DEVICE) से चिह्नित हैं, कोई भी सीधे उपयोग योग्य संख्यात्मक मान नहीं है;यह पूरी श्रृंखला के संगठन को समझने के लिए है, इसे सीधे किसी भी डिवाइस के लिए प्रभावी उपकरण के रूप में संकलित नहीं किया जा सकता।
fs/pipe.c / include/linux/pipe_fs_i.h (सार्वजनिक स्रोत कोड)Documentation/arch/arm64/memory.rst (सार्वजनिक दस्तावेज़)exploit/): GPL-3.0, देखें LICENSEdocs/, scripts/): CC BY-NC-SA 4.0, देखें LICENSE-DOCS
(व्यावसायिक उपयोग प्रतिबंधित; व्युत्पन्न सामग्री समान शर्तों के अंतर्गत साझा करें और यह घोषणा बनाए रखें)| चरण | पूर्व शर्तें |
|---|
| भेद्यता स्वयं | Mali kbase ड्राइवर संस्करण CVE-2021-28664 प्रभावित सीमा में हो (अपस्ट्रीम फ़िक्स से पहले की r श्रृंखला); कर्नेल संस्करण से स्वतंत्र, केवल ड्राइवर देखें |
| GPU संसाधन | /dev/mali संबंधित एप्लिकेशन के लिए सुलभ हो; MEM_ALLOC SAME_VA बड़े बफ़र का समर्थन करे; MEM_ALIAS व्यवहार भेद्यता विवरण के अनुरूप हो |
| पाइप पुनःउपयोग | Linux ≥ 4.5 (pipe_buf_operations की शुरुआत), 4.9 ~ 4.14 में परीक्षण से सत्यापित; F_SETPIPE_SZ से पाइप को एक पेज तक छोटा किया जा सके |
| KASLR लीक | कर्नेल में CONFIG_RANDOMIZE_BASE सक्षम हो (arm64 ≥ 4.6); anon_pipe_buf_ops सार्वजनिक सिंबल टेबल में मौजूद हो |
| भौतिक पता मॉडल | arm64 + vmemmap लेआउट; sizeof(struct page), पेज टेबल प्रारूप अनिवार्य रूप से प्रयोगात्मक रूप से मापें, अनुमान न लगाएं |