CVE-2022-50492CVE-2022-50492是Linux内核drm/msm驱动模块中的一个高危释放后使用(Use-After-Free)漏洞。该漏洞位于DRM(Direct Rendering Manager)子系统的桥接设备(bridge)管理逻辑中,具体涉及msm驱动的设备探测(probe)延迟处理流程。
当DRM设备被拆除(tear down)时,桥接计数器(bridge counter)从未被重置,导致在下次拆除过程中会访问指向已释放结构的过期指针。这种状态在多次延迟绑定(late bind deferral)场景下尤为严重,可能导致桥接数组之外的数据被损坏。
该漏洞的CVSS 3.1评分为7.8,属于高危级别。攻击者需要本地低权限访问权限,无需用户交互即可利用。一旦成功利用,攻击者可以获得对系统内存的未授权读写访问,可能导致权限提升、系统崩溃或敏感信息泄露。
该漏洞影响多个Linux内核稳定版本,修复补丁已合并到上游内核并回溯到多个稳定分支。修复方案是在DRM设备拆除时正确重置桥接计数器,避免对已释放内存的引用。
该漏洞的根本原因在于msm驱动中DRM设备拆除流程缺少对桥接计数器的重置操作。具体技术细节如下:
1. **漏洞触发路径**:在msm驱动的device_probe流程中,当probe函数返回-EPROBE_DEFER(延迟探测)时,内核会重新调度probe操作。每次延迟都会导致DRM设备的初始化和拆除循环。
2. **内存管理缺陷**:在DRM设备拆除(drm_mode_config_cleanup等)过程中,桥接设备数组(bridge array)中的指针被释放,但计数器变量未被清零。这意味着在下一次初始化时,计数器从非零值开始,可能导致对新分配但未初始化的桥接槽位的访问。
3. **数据损坏风险**:当系统中存在足够数量的桥接设备,并且发生多次probe deferral时,桥接计数器可能超出实际数组边界,导致对数组相邻内存区域的写入操作,从而造成堆缓冲区溢出。
4. **利用条件**:攻击者需要能够触发msm驱动的probe deferral路径,这通常通过加载特定的内核模块或使用udev规则控制设备加载顺序来实现。由于该漏洞为本地权限提升类漏洞,攻击者需要先获得系统的低权限访问。
5. **影响范围**:成功利用可导致内核态内存损坏,进一步实现权限提升(从普通用户提升至root权限),或触发内核panic导致系统拒绝服务。