CVE-2023-53603CVE-2023-53603是Linux内核中qla2xxx SCSI驱动存在的一个空指针解引用漏洞。该漏洞由静态分析工具Klocwork发现并报告。qla2xxx是QLogic公司提供的光纤通道(FC)主机总线适配器(HBA)驱动程序,广泛用于企业级存储区域网络(SAN)环境中。
漏洞的根本原因在于驱动程序中的代码逻辑缺陷:当sa_ctl(SCSI属性控制结构)为空指针时,程序并未立即退出,而是继续执行后续代码,随后在退出路径中尝试对fcport指针进行解引用操作。由于fcport是在sa_ctl检查通过之后才被分配的,当sa_ctl为NULL时,fcport同样为NULL,从而导致空指针解引用,引发内核崩溃(Kernel Panic)或系统拒绝服务。
该漏洞的CVSS 3.1评分为5.5分,属于中等严重等级。其攻击向量为本地攻击(AV:L),需要低权限(PR:L),无需用户交互(UI:N),对机密性无影响(C:N),对完整性无影响(I:N),但对可用性影响较高(A:H)。这意味着攻击者可以利用该漏洞导致系统崩溃或服务不可用,但无法获取敏感信息或修改系统数据。
该漏洞影响多个Linux内核稳定版本,Linux内核维护团队已发布多个补丁进行修复。受影响系统包括使用QLogic光纤通道HBA卡的所有Linux服务器和存储设备。
从技术层面分析,该漏洞存在于qla2xxx驱动的qla2xxx_configure_local_loop()或相关例程中。具体的代码逻辑如下:
1. 函数入口处获取sa_ctl指针,该指针可能为NULL;
2. 原代码在sa_ctl为NULL时并未立即return退出,而是继续向下执行;
3. 后续代码中调用了fcport = qla2xxx_alloc_fcport()等分配操作,但由于sa_ctl检查失败,fcport实际未被正确分配或保持为NULL状态;
4. 当函数到达退出标签(如goto out或直接return)时,执行fcport->xxx的解引用操作;
5. 由于fcport为NULL,内核触发空指针解引用异常,导致Oops或Panic。
漏洞利用方式:
- 攻击者需要具有本地系统访问权限(低权限即可);
- 通过加载特定的qla2xxx驱动模块或触发特定的SCSI操作路径,使代码执行到存在缺陷的函数;
- 当sa_ctl为NULL的条件被满足时(例如在驱动初始化异常或特定硬件状态),触发空指针解引用;
- 利用结果为系统崩溃(Kernel Oops/Panic),造成拒绝服务攻击。
修复方案为在函数开头增加对sa_ctl的NULL检查,若sa_ctl为NULL则直接返回,避免后续对fcport的非法解引用操作。