Skip to content
KitploitKITPLOIT
उपकरणब्लॉग
जमा करें
उपकरणब्लॉग
जमा करें

हैकिंग, पेनटेस्ट और साइबर सुरक्षा उपकरण आपके सुरक्षा शस्त्रागार के लिए!

Kitploit हैकिंग, साइबर सुरक्षा और पेंटेस्टिंग टूल्स की एक निर्देशिका है। कमजोरियों को खोजने, सिस्टम का विश्लेषण करने, परीक्षण को स्वचालित करने और अपनी सुरक्षा को मजबूत करने के लिए नवीनतम प्रोजेक्ट अपडेट खोजें।

··फ़ीड·संपर्क·गोपनीयता·© 2026 Kitploit

टूल निर्देशिका

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
CVE-2022-22706-poc — प्रूफ-ऑफ-कॉन्सेप्ट एक्सप्लॉइट CVE-2022-22706 के लिए: Mali GPU कर्नेल ड्राइवर की पेज-कैश लेखन दोष का शोषण करके /etc/passwd को मेमोरी में संशोधित करता है और रूट शेल प्राप्त करता है। | Kitploit
उपकरण/GitHubGitHub/byt3quester/cve-2022-22706-poc
एंड्रॉइड सुरक्षाविशेषाधिकार वृद्धिभेद्यता विश्लेषणशोषण
GitHubbyt3quester/cve-2022-22706-poc

CVE-2022-22706-poc

प्रूफ-ऑफ-कॉन्सेप्ट एक्सप्लॉइट CVE-2022-22706 के लिए: Mali GPU कर्नेल ड्राइवर की पेज-कैश लेखन दोष का शोषण करके /etc/passwd को मेमोरी में संशोधित करता है और रूट शेल प्राप्त करता है।

रिपॉजिटरी देखें

सबसे लोकप्रिय

सभी देखें →

हमारे समुदाय द्वारा सबसे अधिक उपयोग किए जाने वाले उपकरण खोजें।

सभी उपकरण खोजें

हमारे उपकरणों का संग्रह ब्राउज़ करें

सभी उपकरण देखें →
साझा करें
441 महीना पहलेअभी तक समीक्षित नहीं

CVE-2022-22706 - पेज-कैश लेखन

Arm Mali GPU ड्राइवर userspace को उन पेजों का CPU-लिखने-योग्य मैपिंग सौंपता है जिन्हें उसने रीड-ओनली पिन किया था, जिससे एक अन-प्रिविलेज्ड प्रोसेस को उस फ़ाइल के पेज कैश का writable alias मिल जाता है जिसे वह केवल O_RDONLY के साथ खोल सकता है।

exploit.c /etc/passwd पेज कैश में root के पासवर्ड फ़ील्ड को खाली कर देता है और su root को exec करता है। डिस्क पर मौजूद फ़ाइल कभी संशोधित नहीं होती।

इस रेपो में मौजूद ड्राइवर ट्री और QEMU टारगेट के लिए PoC (mali_kbase r35p0-01eac0, CONFIG_MALI_NO_MALI=y, x86_64 GKI 5.15)। इसे VM में चलाएँ।

बग

CPU मैपिंग की लिखने की क्षमता KBASE_REG_CPU_WR से आती है, लेकिन पिन केवल KBASE_REG_GPU_WR के आधार पर लिखने की अनुमति माँगता है:

root@kitploit:~
/* mali_kbase_mem.c */
pinned_pages = pin_user_pages_remote(
    mm, address, alloc->imported.user_buf.nr_pages,
    reg->flags & KBASE_REG_GPU_WR ? FOLL_WRITE : 0, pages, NULL, NULL);

CPU_WR सेट और GPU_WR क्लियर के साथ इम्पोर्ट करें और आपको एक साथ दोनों चीज़ें मिलती हैं: इम्पोर्ट का writable CPU मैपिंग, और बिना FOLL_WRITE के लिया गया get_user_pages पिन। FOLL_WRITE के बिना, get_user_pages रीड-ओनली फ़ाइल मैपिंग पर COW को तोड़ता नहीं है, वह पेज-कैश पेज ही लौटा देता है। फिर ड्राइवर उन्हीं पेजों को writable के रूप में userspace पर मैप कर देता है।

इसे 5381ff7 ("GPUCORE-32592 Fix userbuf imports to respect RO memory") द्वारा ठीक किया गया, जो लिखने की पहुँच केवल GPU_WR के बजाय KBASE_REG_CPU_WR | KBASE_REG_GPU_WR से प्राप्त करता है।

एक्सप्लॉइट प्रवाह

root@kitploit:~
sequenceDiagram
    participant U as unprivileged process
    participant K as mali_kbase
    participant PC as page cache

    U->>U: mmap /etc/passwd O_RDONLY, PROT_READ
    U->>K: MEM_IMPORT(anon page, CPU_RD|CPU_WR|GPU_RD)
    Note over K: address recorded, nothing pinned yet
    U->>U: munmap(anon) + mremap file mapping onto that VA
    U->>K: mmap(import cookie) → writable CPU mapping
    U->>K: JOB_SUBMIT(EXTERNAL_RESOURCES)
    K->>PC: pin_user_pages_remote() without FOLL_WRITE
    U->>PC: memcpy() through the writable mapping
    U->>U: execl("/bin/su", "su", "root")

MEM_IMPORT केवल एक एड्रेस रिकॉर्ड करता है; पिन बाद में JOB_SUBMIT पर होता है। यही अंतराल anonymous पेज को बीच में फ़ाइल मैपिंग से बदलने देता है।

यह संपादन लंबाई-संरक्षित है, इसलिए root की पंक्ति के बाद कुछ भी स्थानांतरित नहीं होता:

root@kitploit:~
root:x:0:0:root:/root:/bin/sh      ← before
root::0:0:rootx:/root:/bin/sh      ← after (empty password)

busybox su पासवर्ड फ़ील्ड खाली होने पर प्रॉम्प्ट करने से पहले CHECKPASS_PW_HAS_EMPTY_PASSWORD लौटाता है, और /etc/shadow केवल तभी पढ़ता है जब वह बिल्कुल x हो।

बिल्ड और रन

root@kitploit:~
gcc -static -o exploit exploit.c

इसे VM में कॉपी करें और एक अन-प्रिविलेज्ड उपयोगकर्ता के रूप में चलाएँ:

root@kitploit:~
$ ./exploit

डेमो

demo

QEMU टारगेट में user (uid 1000) के रूप में SSH के ज़रिए रिकॉर्ड किया गया। ./exploit /etc/passwd पेज कैश में root की पंक्ति को पैच करता है और su root को exec करता है, जो बिना प्रॉम्प्ट किए सीधे रूट शेल में पहुँचा देता है।

उस शेल से बाहर निकलने और su को दोबारा चलाने पर भी root मिलता है: पेज कैश में बना रहता है, इसलिए /etc/passwd का हर बाद का open()/read() पैच किए गए बाइट्स को ही देखता है।

जब echo 1 > /proc/sys/vm/drop_caches पेज को हटा देता है और फ़ाइल स्टोरेज से दोबारा पढ़ी जाती है, तो su फिर से पासवर्ड माँगता है। डिस्क पर मौजूद बाइट्स कभी छुए नहीं गए।

संदर्भ

  • Arm — Mali GPU ड्राइवर कमजोरियाँ
  • STAR Labs — Mali-cious Intent: GPU कमजोरियों का शोषण (CVE-2022-22706 / CVE-2021-39793)
  • अपस्ट्रीम फिक्स — 5381ff7
टूल डाउनलोड करें