CVE-2022-50503CVE-2022-50503是Linux内核中MTD(Memory Technology Device)子系统lpddr2_nvm驱动存在的一个空指针解引用漏洞。该漏洞源于驱动在初始化过程中调用platform_get_resource()获取资源时,未对返回值为NULL的情况进行有效检查,便直接将其传入resource_size()宏中进行处理。当platform_get_resource()返回NULL时,resource_size()宏会尝试访问NULL指针所指向的内存地址,从而触发内核空指针解引用错误(null-ptr-deref),导致系统崩溃或内核panic。
该漏洞的CVSS 3.1评分为5.5分,属于中等严重等级。攻击者需要具备本地低权限访问能力才能触发该漏洞,无需用户交互。漏洞的成功利用将导致系统可用性受到严重影响(可用性影响为高),但不会直接造成机密性泄露或完整性破坏。该漏洞主要影响使用LPDDR2 NVM(Non-Volatile Memory)设备的嵌入式Linux系统,在设备树配置不正确或硬件资源缺失时可能被触发。
根据披露的修复补丁信息,该漏洞已在多个Linux内核稳定版本中得到修复,包括5.10.x、5.15.x、5.19.x等多个长期支持(LTS)分支。系统管理员应及时关注内核更新,将受影响的系统升级至已修复的稳定版本,以消除该安全隐患。
该漏洞存在于Linux内核的drivers/mtd/maps/lpddr2_nvm.c文件中,具体位于lpddr2_nvm_probe()函数中。漏洞的根本原因是缺少对platform_get_resource()返回值的有效性检查。
在Linux内核驱动开发中,platform_get_resource()函数用于从设备树(Device Tree)或ACPI表中获取平台设备的资源信息(如内存地址、中断号等)。当设备树节点中未正确配置相应的资源条目,或硬件资源不可用时,该函数会返回NULL。
漏洞触发的具体流程如下:
1. 系统启动时,内核根据设备树配置加载lpddr2_nvm驱动;
2. lpddr2_nvm_probe()函数被调用,开始设备初始化流程;
3. 函数调用platform_get_resource(pdev, IORESOURCE_MEM, 0)获取设备的内存资源;
4. 当资源不存在时,platform_get_resource()返回NULL;
5. 代码未检查返回值,直接将NULL指针传递给resource_size()宏;
6. resource_size()宏展开后尝试访问NULL->end和NULL->start字段;
7. 访问地址0附近的内存区域,触发内核空指针解引用异常;
8. 内核产生oops或panic,系统崩溃或进入不可用状态。
修复方案是在调用resource_size()之前增加对platform_get_resource()返回值的检查,如果返回NULL则返回-ENODEV错误码并退出probe函数。
利用方式方面,由于该漏洞属于本地触发类型,攻击者需要能够加载lpddr2_nvm驱动或影响设备树的解析过程。在嵌入式系统中,攻击者可能通过修改设备树blob(DTB)、利用udev规则加载特定驱动模块、或通过其他内核子系统间接触发该漏洞。成功触发后,将导致系统拒绝服务(DoS),影响系统可用性。