Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2026-36355 — CVE-2026-36355:Realtek rtl819x Jungle SDK - 通过调试ioctl实现未认证的内核内存读/写 | Kitploit
工具/GitHubGitHub/totekuh/cve-2026-36355
嵌入式系统安全权限提升漏洞分析漏洞利用无线安全硬件安全二进制利用
GitHubtotekuh/cve-2026-36355

CVE-2026-36355

CVE-2026-36355:Realtek rtl819x Jungle SDK - 通过调试ioctl实现未认证的内核内存读/写

查看仓库
64个月前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

CVE-2026-36355:Realtek rtl819x Jungle SDK —— 通过调试 ioctl 实现未认证的内核内存读写

  • CVE:CVE-2026-36355
  • CWE:CWE-782, CWE-787, CWE-200
  • 发现者:Daniil Gordeev
  • 披露日期:2026-05-03

概述

Realtek rtl819x 非主线(out-of-tree)“Jungle SDK” 中的 rtl8192cd Wi-Fi 内核驱动程序暴露了两个 IOCTL —— write_mem(0x89F5)和 read_mem(0x89F6),且没有任何访问控制检查。任何能够打开由该驱动程序支持的无线网络接口的本地用户,都可以读取或写入任意内核虚拟内存,从而直接获取 root 权限。

这些处理程序由 8192cd_cfg.h 中的 _IOCTL_DEBUG_CMD_ 控制,而该宏是无条件定义的(没有 #ifdef DEBUG),因此调试命令集会被编译进所有生产构建中。

一个参考漏洞利用程序(kpwn)可以从非特权 shell 获得 uid=0,且零硬编码地址 —— task_struct 布局和 init_task 位置均在运行时自动检测,因此可跨内核版本和 OEM 构建移植。

受影响产品

该漏洞位于 Realtek rtl819x Jungle SDK 内核 Wi-Fi 驱动程序中,涉及直至 v3.4.14B 的所有已知版本。披露时没有修复。主线 Linux 的 rtlwifi / rtw88 / rtw89 是不同的代码库,不受影响。

共享驱动核心会编译为多种变体(rtl8192cd、rtl8192es、rtl8192ee、rtl8192fe、rtl8188ee 等)。任何包含该 Wi-Fi 驱动程序的 Jungle SDK 构建均受影响。

可能受影响 —— 需要按产品进行验证

Realtek Jungle SDK 根据 OEM 合同被广泛再分发。CVE-2021-35395 厂商列表中记录的厂商(该 CVE 针对同一 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)
SoCQualcomm MDM9607, ARMv7 Cortex-A7
内核Linux 3.18.48
模块rtl8192es.ko

已确认:向模块 .bss 写入 0xDEADBEEF,并回读和恢复;通过 init_task 遍历和凭据覆盖,从非特权 shell 实现从 uid=1000 到 uid=0 的完整 LPE(本地权限提升)。

技术细节

根本原因

在 8192cd_cfg.h 中:

root@kitploit:~
#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() 检查
  • 没有对地址范围的边界检查
  • 没有加锁 —— 调试命令集中的全部 59 个 IOCTL 共享 .bss 中一个 2000 字节的全局缓冲区(tmpbuf1)

读取原语每次调用限制为 128 字节;写入原语接受任意长度。

同样的访问控制缺陷也适用于调试命令集中的其他处理程序(通过 0x89F3/0x89F4/0x89F8–0x89FD 读写硬件寄存器、通过 0x89F1 写 MIB、eFuse 读写、制造测试模式)。它们可通过相同的代码路径访问,任何修补此漏洞的人都应对其进行全面审计。

概念验证

kpwn —— 在 MeiG FORGE_SLT711(Ortel 4G LTE CPE)上从 uid=1000 提升到 uid=0,内核 3.18.48

参考漏洞利用程序 kpwn.c(随本公告一并发布):

  • 可以以任何非特权用户身份运行,无需 root。
  • 通过遍历 init_task 自动检测 task_struct 偏移量(comm、cred、tasks、pid),而 init_task 本身通过对内核 .data 的暴力扫描定位。
  • 通过探测每个 /sys/class/net/* 读取原语,自动检测存在漏洞的接口。
  • 当 /proc/kallsyms 可读时只需 44 次 IOCTL,当 kptr_restrict=2 时约 7600 次 IOCTL(完整 .data 扫描路径)。在每次测试运行中都能无条件获得 root shell。
root@kitploit:~
# 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)
下载工具
日期2026-02-23