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

CVE-2022-50547 Linux内核solo6x10驱动内存泄漏漏洞

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

漏洞信息

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

相关标签

内存泄漏Linux内核media子系统solo6x10驱动安全本地提权拒绝服务CWE-401内核漏洞

漏洞概述

CVE-2022-50547是Linux内核中media子系统的solo6x10驱动存在的一个内存泄漏漏洞。该漏洞位于solo_sysfs_init()函数中,当device_register()调用失败时,之前通过dev_set_name()分配的设备名称内存未能被正确释放。根据device_register()函数的注释说明,在错误处理路径中应该使用put_device()来释放对设备的引用,这样kobject_cleanup()才能正确释放通过dev_set_name()分配的名称内存。

该漏洞的CVSS评分为5.5,属于中危级别。攻击者需要本地低权限访问即可触发此漏洞,无需用户交互。漏洞本身不会直接导致机密性泄露或完整性破坏,但可能导致系统可用性受到影响,因为持续的内存泄漏会逐渐消耗系统内存资源,最终可能导致系统性能下降或触发内存耗尽问题(OOM)。

该漏洞影响多个Linux内核稳定版本,已在多个内核补丁中得到修复。相关修复提交包括49060c0da57a、7b02c50d3978、7cf71bbe5d2e、7f5866dd96d9和83d4b1ae98a4等多个commit。solo6x10驱动用于支持Softlogic 6x10视频采集卡,该驱动在工业监控、视频采集等领域有一定应用场景。

技术细节

该漏洞的技术原理如下:

1. **漏洞位置**:Linux内核drivers/media/pci/solo6x10/solo6x10-core.c文件中的solo_sysfs_init()函数。

2. **触发条件**:当device_register()函数调用返回错误时(例如设备注册过程中出现异常),需要正确清理已分配的资源。

3. **根本原因**:在solo_sysfs_init()函数中,首先通过dev_set_name()为设备分配名称内存,然后调用device_register()进行设备注册。如果device_register()失败,原始代码没有正确释放dev_set_name()分配的名称内存,导致内存泄漏。

4. **修复方案**:按照device_register()函数的文档说明,在错误处理路径中调用put_device()函数。put_device()会减少设备的引用计数,当引用计数降为零时,kobject_cleanup()会被调用,从而正确释放dev_set_name()分配的名称内存。

5. **利用方式**:攻击者需要本地访问权限,尝试加载solo6x10驱动或触发相关设备的注册流程。通过反复触发device_register()的错误路径,可以导致持续的内存泄漏。虽然单个泄漏量较小,但通过反复触发可累积造成显著的内存消耗。

6. **影响范围**:该漏洞主要影响系统可用性(A:H),不会泄露敏感信息或破坏数据完整性。

攻击链分析

STEP 1
步骤1
攻击者获取目标系统的本地低权限访问权限
STEP 2
步骤2
攻击者加载或触发solo6x10驱动的sysfs初始化流程(solo_sysfs_init())
STEP 3
步骤3
通过特定条件使device_register()调用失败,进入错误处理路径
STEP 4
步骤4
在错误路径中,由于未调用put_device(),dev_set_name()分配的名称内存未被释放
STEP 5
步骤5
重复触发上述流程,持续消耗系统内存资源
STEP 6
步骤6
最终可能导致系统内存耗尽,影响系统可用性

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
/* CVE-2022-50547 PoC - Trigger memory leak in solo6x10 driver * This PoC attempts to trigger the memory leak by repeatedly * loading/unloading the solo6x10 module to cause device_register() failures */ #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h> #include <fcntl.h> #define SOLO6X10_DEVICE_PATH "/dev/solo6x10" #define ITERATIONS 1000 int main(int argc, char *argv[]) { int i; int fd; printf("CVE-2022-50547 PoC - solo6x10 memory leak\n"); printf("Attempting to trigger memory leak via device_register() error path\n"); for (i = 0; i < ITERATIONS; i++) { // Attempt to open solo6x10 device to trigger initialization fd = open(SOLO6X10_DEVICE_PATH, O_RDWR); if (fd >= 0) { close(fd); } // Trigger sysfs initialization repeatedly // This may cause device_register() to fail in certain conditions system("echo 1 > /sys/.../solo6x10_attr 2>/dev/null"); if (i % 100 == 0) { printf("Iteration %d/%d completed\n", i, ITERATIONS); } } printf("PoC execution completed. Check kernel memory usage.\n"); return 0; }

影响范围

Linux Kernel < 5.15.71
Linux Kernel 5.16.x < 5.16.58
Linux Kernel 5.17.x < 5.17.14
Linux Kernel 5.18.x < 5.18.3
Linux Kernel 5.19+ (部分版本受影响)

防御指南

临时缓解措施
对于无法立即升级内核的系统,建议采取以下临时缓解措施:1)如果系统不使用solo6x10视频采集卡,可以通过在内核启动参数中添加模块黑名单(blacklist solo6x10)来阻止该驱动加载;2)限制普通用户对/sys文件系统下solo6x10相关属性的访问权限;3)通过systemd或init脚本限制非特权进程的内存使用上限,防止内存泄漏被恶意利用导致系统不可用;4)监控系统日志,及时发现驱动加载失败等异常情况。

参考链接

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