CVE-2023-53595CVE-2023-53595是Linux内核中octeontx2-pf驱动MACsec(Media Access Control Security)子系统的一个空指针解引用漏洞。该漏洞由社区开发者发现并修复,CVSS评分为5.5分,属于中危级别。该漏洞源于在系统重启过程中,当系统已经创建了macsec网络接口时,驱动模块的清理(teardown)顺序不正确,导致在关闭网络设备时触发空指针解引用,造成内核崩溃(kernel panic)。从漏洞描述中的内核调用栈可以看出,问题出现在cn10k_mdo_del_secy和cn10k_mdo_stop等函数中,这些函数在处理MACsec安全实体(SecY)删除和设备停止操作时,未正确检查指针有效性便进行解引用操作。攻击者需要具有本地低权限访问权限,但无需用户交互即可触发该漏洞。虽然该漏洞不会导致机密性泄露或数据完整性破坏,但会造成系统可用性的完全丧失(内核崩溃),影响系统正常运行。该漏洞影响基于Marvell OCTEON TX2系列硬件平台运行Linux内核的系统。
该漏洞的根本原因是octeontx2-pf驱动中MACsec子系统的资源清理顺序不当。具体技术细节如下:
1. **触发场景**:当系统上存在通过octeontx2-pf驱动创建的MACsec网络接口时,执行系统重启操作(如reboot系统调用),内核会按照设备注销流程依次关闭网络设备。
2. **漏洞机理**:在PCI设备关闭(pci_device_shutdown)过程中,系统调用otx2_remove函数,进而通过unregister_netdev注销网络设备。这一过程触发了rollback_registered_many函数,该函数通过netdevice通知链(macsec_notify)通知MACsec子系统执行清理操作。
3. **崩溃路径**:在清理过程中,MACsec子系统调用cn10k_mdo_del_secy或cn10k_mdo_stop函数尝试访问已分配的资源,但由于teardown顺序错误,相关的数据结构(如secy或mcs私有数据)在此之前已被释放或置空,导致空指针解引用。
4. **崩溃点**:从调用栈可以看出,崩溃发生在指令`f9400060`(ldr指令,用于从内存加载数据),尝试从空地址(0x0000000000000000)读取数据。
5. **修复方案**:通过调整teardown顺序,确保在删除MACsec安全实体和停止设备之前,相关的数据结构仍然有效,避免空指针访问。
该漏洞的利用需要本地访问权限,攻击者可以通过创建MACsec接口然后触发系统重启来使系统崩溃,属于本地拒绝服务(DoS)攻击。