CVE-2022-50527CVE-2022-50527是Linux内核中AMD GPU驱动(amdgpu)的一个空指针解引用漏洞。该漏洞存在于amdgpu_bo_validate_size()函数中,当请求内存域的TTM(Translation Table Maps)域管理器不存在时,代码会尝试解引用一个空指针(man),从而导致内核崩溃(kernel oops)。该漏洞影响使用AMD显卡的Linux系统,特别是那些集成了Radeon图形处理器的设备。漏洞的CVSS评分为5.5,属于中危级别,攻击者需要本地低权限访问即可触发该漏洞。虽然该漏洞不会导致信息泄露或数据篡改,但会造成系统可用性受到影响,可能导致系统拒绝服务(DoS)。该问题已在Linux内核的多个稳定版本中通过补丁修复,主要的修复方式是增加对TTM域管理器指针的空值检查,确保在解引用之前验证指针的有效性。
该漏洞的技术原理如下:amdgpu_bo_validate_size()函数用于验证AMD GPU缓冲区对象(BO)的大小是否符合要求。在验证过程中,函数需要访问TTM域管理器(ttm_mem_type_manager),通过man指针进行操作。然而,当请求的内存域(如GTT域)对应的TTM域管理器未被初始化或不存在时,man指针可能为NULL。原始代码没有对man指针进行空值检查就直接进行解引用操作,导致内核空指针解引用错误,触发kernel oops。
漏洞利用方式相对简单:攻击者需要具有本地系统的低权限访问权限(PR:L),通过特定的内核接口或系统调用,触发amdgpu_bo_validate_size()函数的执行,并使函数请求一个未初始化的TTM域。由于该漏洞仅影响可用性(A:H),不涉及机密性(C:N)和完整性(I:N)影响,攻击者主要利用该漏洞进行本地拒绝服务攻击,导致系统崩溃或不稳定。
修复方案经历了四个版本迭代:v1版本最初修复了大小验证逻辑;v2版本使补丁独立,不依赖于本地补丁;v3版本保留旧行为,仅检查管理器指针不为NULL;v4版本增加了对GTT域未初始化时的警告提示,因为这种情况很可能是一个bug。