CVE-2023-53632CVE-2023-53632是Linux内核中mlx5e(Mellanox ConnectX系列以太网驱动)模块存在的一个RTNL锁缺失漏洞。该漏洞源于在调用xdp_set_features()函数时未持有RTNL(Routing Netlink)锁,而该函数会触发netdev通知链(netdev notifiers),从而违反了内核中关于RTNL锁的断言检查。
该漏洞在特定场景下触发,例如从uplink rep(上游表示端口)切换到nic profile(网卡配置文件)时。在切换过程中,mlx5e_set_xdp_feature函数会调用call_netdevice_notifiers,而此时未持有RTNL锁,导致内核在net/core/dev.c的1953行触发断言失败(assertion failed),产生WARNING警告。严重情况下可能导致系统不稳定或内核oops,影响系统可用性。
该漏洞的CVSS评分为5.5,属于中等严重等级。攻击向量为本地攻击(AV:L),需要低权限(PR:L),无需用户交互(UI:N),对机密性无影响(C:N),对完整性无影响(I:N),但对可用性有高影响(A:H)。这意味着本地低权限用户可以通过触发特定的网络设备操作导致系统警告或崩溃,从而实现拒绝服务攻击。
该漏洞影响使用Mellanox ConnectX系列网卡并启用了相关eSwitch(增强型交换)功能的Linux系统,常见于高性能计算和数据中心环境。漏洞已在Linux内核稳定版本中通过提交16b7775ae4389dd1e885732ea610321c64284e5f和72cc654970658e88a1cdea08f06b11c218efa4da得到修复。
该漏洞的技术根源在于mlx5e驱动中mlx5e_set_xdp_feature函数调用xdp_set_features()时未正确持有RTNL锁。RTNL锁是Linux内核中用于保护网络设备配置变更的全局锁,当调用触发netdevice通知链的函数时必须持有该锁。
漏洞触发流程如下:
1. 用户通过devlink接口配置eSwitch模式(如从switchdev模式切换)
2. 内核调用mlx5_devlink_eswitch_mode_set函数
3. 进一步调用mlx5_eswitch_disable_locked和esw_offloads_disable
4. 在卸载representor(rep)过程中调用mlx5e_vport_rep_unload
5. 调用mlx5e_netdev_attach_nic_profile切换到nic profile
6. 在mlx5e_nic_init中调用mlx5e_set_xdp_feature
7. xdp_set_features()内部调用call_netdevice_notifiers触发通知链
8. 但此时未持有RTNL锁,触发net/core/dev.c:1953的断言检查失败
漏洞利用方式:本地具有低权限的用户可以通过devlink接口或触发特定的网络设备操作来触发此路径。具体来说,如果用户能够触发eSwitch模式的切换(如从switchdev模式切换回legacy模式),或者在特定的网络配置变更场景下,就可能触发该断言失败,导致内核打印警告信息。在极端情况下,持续触发可能导致系统不稳定。
修复方案是在调用xdp_set_features()之前获取RTNL锁,确保在持有锁的情况下调用触发通知链的函数,从而满足内核的锁依赖要求。