CVE-2022-50537CVE-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)字节的内存。这种攻击虽然不能直接获取敏感数据或执行任意代码,但可以显著降低系统稳定性。