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

CVE-2022-50537 Linux内核树莓派固件内存泄漏漏洞

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

漏洞信息

漏洞编号
CVE-2022-50537
漏洞类型
内存泄漏
CVSS评分
5.5 中危
攻击向量
本地 (AV:L)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Linux内核(树莓派固件驱动 raspberrypi-firmware)

相关标签

内存泄漏Linux内核树莓派固件驱动本地攻击拒绝服务资源管理错误kernelraspberrypimemory-leak

漏洞概述

CVE-2022-50537是Linux内核树莓派固件子系统中的一个内存泄漏漏洞。该漏洞存在于rpi_firmware_probe()函数中,当mbox_request_channel()函数调用失败时,已经分配的固件结构体'fw'未能通过rpi_firmware_delete()函数正确释放,导致内存泄漏问题。该漏洞由Linux内核安全团队发现并修复,属于典型的资源管理错误类漏洞。虽然该漏洞本身不会直接导致权限提升或代码执行,但持续的内存泄漏可能导致系统可用内存逐渐耗尽,最终引发系统不稳定或拒绝服务状态。

该漏洞的CVSS评分为5.5分,属于中危级别。攻击者需要本地低权限访问权限即可触发此漏洞,无需用户交互。漏洞的影响范围主要体现在可用性方面,机密性和完整性不受影响。漏洞影响多个Linux内核稳定版本,包括多个长期支持(LTS)内核分支。

此漏洞已于2025年10月7日公开披露,修复补丁已合并到Linux内核主线及多个稳定分支中。树莓派基金会和相关Linux内核维护者建议用户尽快将系统更新到包含修复的内核版本,以避免潜在的内存资源耗尽问题。

技术细节

该漏洞的技术原理位于Linux内核的drivers/firmware/raspberrypi.c文件中,具体在rpi_firmware_probe()函数中。函数执行流程如下:

1. 首先通过kzalloc()分配内存用于rpi_firmware结构体(fw);
2. 然后调用mbox_request_channel()获取mailbox通道;
3. 如果mbox_request_channel()调用失败,函数直接返回错误码;
4. 但在此错误路径中,之前通过kzalloc()分配的'fw'内存未被释放;
5. 正常情况下,'fw'应该通过rpi_firmware_delete()函数释放,该函数内部会调用kfree()。

漏洞的根本原因是错误处理路径不完整,缺少对kzalloc()分配内存的释放调用。攻击者可以通过反复触发设备探测过程(例如通过反复加载和卸载相关内核模块)来持续泄漏内存,最终导致内核内存资源耗尽。

利用方式:攻击者需要本地访问权限,通过编写内核模块或利用现有接口反复触发rpi_firmware_probe()函数的失败路径,使mbox_request_channel()返回错误(例如在mailbox子系统不可用时),每次失败都会泄漏sizeof(struct rpi_firmware)字节的内存。这种攻击虽然不能直接获取敏感数据或执行任意代码,但可以显著降低系统稳定性。

攻击链分析

STEP 1
步骤1:获取本地访问权限
攻击者需要获得目标系统的本地低权限访问权限(如通过普通用户账户登录或利用其他漏洞获得本地shell)
STEP 2
步骤2:分析内核模块依赖
攻击者分析树莓派固件驱动的加载机制,确定如何触发rpi_firmware_probe()函数的执行
STEP 3
步骤3:制造mbox_request_channel失败条件
攻击者通过占用或干扰mailbox子系统资源,或在特定时机制造mbox_request_channel()函数返回错误的条件
STEP 4
步骤4:反复触发探测失败
攻击者反复触发设备探测或模块加载过程,每次失败都会泄漏sizeof(struct rpi_firmware)字节的内核内存
STEP 5
步骤5:耗尽系统内存
持续触发内存泄漏,最终导致内核可用内存耗尽,系统出现不稳定、进程被OOM Killer终止或拒绝服务状态

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
/* CVE-2022-50537 PoC - Memory Leak in rpi_firmware_probe() * This PoC demonstrates how to trigger the memory leak by repeatedly * forcing mbox_request_channel() to fail during probe. * * Note: This requires kernel module compilation and root privileges. */ #include <linux/module.h> #include <linux/kernel.h> #include <linux/init.h> #include <linux/platform_device.h> #include <linux/slab.h> static int trigger_probe_failure_count = 0; /* Simulate the vulnerable code path */ static void simulate_vulnerable_probe(void) { struct rpi_firmware *fw; int ret; /* Step 1: Allocate firmware structure (similar to kzalloc in real driver) */ fw = kzalloc(sizeof(struct rpi_firmware), GFP_KERNEL); if (!fw) return; /* Step 2: Simulate mbox_request_channel() failure */ /* In real scenario, this fails when mailbox subsystem is unavailable */ ret = -ENODEV; /* Simulated failure */ if (ret) { /* BUG: 'fw' is not freed here - memory leak! */ /* Fix should add: kfree(fw); before returning */ trigger_probe_failure_count++; printk(KERN_ERR "rpi_firmware: mbox_request_channel failed, " "leaking %zu bytes (leak count: %d)\n", sizeof(struct rpi_firmware), trigger_probe_failure_count); return; /* Memory leak occurs here */ } /* Normal cleanup - only reached on success */ kfree(fw); } static int __init poc_init(void) { int i; printk(KERN_INFO "CVE-2022-50537 PoC loaded\n"); /* Trigger the leak multiple times to demonstrate accumulation */ for (i = 0; i < 1000; i++) { simulate_vulnerable_probe(); } printk(KERN_INFO "PoC: Triggered %d memory leaks\n", trigger_probe_failure_count); return 0; } static void __exit poc_exit(void) { printk(KERN_INFO "CVE-2022-50537 PoC unloaded\n"); } module_init(poc_init); module_exit(poc_exit); MODULE_LICENSE("GPL"); MODULE_DESCRIPTION("PoC for CVE-2022-50537 rpi_firmware memory leak"); /* Fixed version would include kfree(fw) in the error path: * * if (ret) { * kfree(fw); * return ret; * } */

影响范围

Linux kernel < 6.0(受影响的稳定分支)
Linux kernel 5.15.x(受影响)
Linux kernel 5.10.x(受影响)
Linux kernel 5.4.x(受影响)
Linux kernel 4.19.x(受影响)

防御指南

临时缓解措施
在无法立即升级内核的情况下,建议采取以下临时缓解措施:1)限制本地用户对内核模块操作的权限,确保只有特权用户才能触发相关驱动加载;2)监控系统日志,及时发现mbox_request_channel相关错误;3)如果系统运行在非树莓派硬件上,可以在内核编译配置中禁用bcm2835-mailbox和raspberrypi-firmware驱动以避免触发该漏洞路径;4)使用cgroup等机制限制单个进程的资源使用,防止内存泄漏影响整个系统。

参考链接

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