CVE-2025-40254深度解析:Linux内核Open vSwitch中NSH字段设置支持的问题与移除

本文详细分析了Linux内核中Open vSwitch模块的CVE-2025-40254漏洞。该漏洞源于对`set(nsh(...))`动作的验证代码存在根本性错误,可能导致内核崩溃或验证失败。由于功能自引入以来从未正常工作,且修复复杂,开发团队决定完全移除相关代码,而非在稳定版本中修补。

CVE-2025-40254 - net: openvswitch: 移除从未正常工作的NSH字段设置支持

概述

在Linux内核中,已解决以下漏洞: net: openvswitch: 移除从未正常工作的NSH字段设置支持

漏洞描述

set(nsh(...))动作的验证是完全错误的。 它通过了nsh_key_put_from_nlattr()函数,该函数与验证流匹配和push_nsh()动作的NSH密钥的函数相同。然而,set(nsh(...))具有非常不同的内存布局。在带掩码的set()情况下,其中的嵌套属性大小会翻倍。这使得正确的验证变得不可能。

代码中还存在对“masked”标志的混淆,该标志表示嵌套属性大小翻倍,同时包含值和掩码;而is_mask则表示我们正在解析的值是掩码。这导致在验证期间尝试使用SW_FLOW_KEY_PUT()写入匹配的掩码部分时内核崩溃,而validate_nsh()没有为其分配任何内存:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
BUG: kernel NULL pointer dereference, address: 0000000000000018
#PF: supervisor read access in kernel mode
#PF: error_code(0x0000) - not-present page
PGD 1c2383067 P4D 1c2383067 PUD 20b703067 PMD 0
Oops: Oops: 0000 [#1] SMP NOPTI
CPU: 8 UID: 0 Kdump: loaded Not tainted 6.17.0-rc4+ #107 PREEMPT(voluntary)
RIP: 0010:nsh_key_put_from_nlattr+0x19d/0x610 [openvswitch]
Call Trace:
 <TASK>
 validate_nsh+0x60/0x90 [openvswitch]
 validate_set.constprop.0+0x270/0x3c0 [openvswitch]
 __ovs_nla_copy_actions+0x477/0x860 [openvswitch]
 ovs_nla_copy_actions+0x8d/0x100 [openvswitch]
 ovs_packet_cmd_execute+0x1cc/0x310 [openvswitch]
 genl_family_rcv_msg_doit+0xdb/0x130
 genl_family_rcv_msg+0x14b/0x220
 genl_rcv_msg+0x47/0xa0
 netlink_rcv_skb+0x53/0x100
 genl_rcv+0x24/0x40
 netlink_unicast+0x280/0x3b0
 netlink_sendmsg+0x1f7/0x430
 ____sys_sendmsg+0x36b/0x3a0
 ___sys_sendmsg+0x87/0xd0
 __sys_sendmsg+0x6d/0xd0
 do_syscall_64+0x7b/0x2c0
 entry_SYSCALL_64_after_hwframe+0x76/0x7e

此过程中的第三个问题是,在尝试将非掩码set转换为掩码set时,validate_set()复制并使OVS_KEY_ATTR_NSH的大小翻倍,就好像它没有任何嵌套属性一样。它应该独立地复制每个嵌套属性并使它们的大小翻倍。并且此过程必须在流转储期间从掩码变体转换回非掩码变体时正确反转。

最终,尝试使用此操作的结果只能是验证失败或内核崩溃。如果有人设法安装了带有此类操作的流,它也绝对无法完成预期的功能,因为所有的密钥和掩码都混淆了。

修复所有问题是一项复杂的任务,因为它需要重写大部分验证代码。

考虑到这一点,以及该功能自引入以来从未正常工作的事实,让我们完全移除它。与其尝试在稳定版本中修复它,不如稍后通过适当的实现重新引入它。

信息

发布日期: 2025年12月4日 下午4:16 最后修改日期: 2025年12月4日 下午5:15 远程可利用:来源: 416baaa9-dc9f-4396-8d5f-8c081fb06d67

受影响产品

以下产品受CVE-2025-40254漏洞影响。即使cvefeed.io知晓受影响产品的确切版本,以下表格中也不包含该信息。 暂无受影响产品记录 受影响供应商总数: 0 | 产品数量: 0

解决方案

移除无法正常工作的NSH字段支持,以防止验证失败和内核崩溃。

  • 移除set(nsh(...))动作验证代码。
  • 移除push_nsh()动作验证代码。
  • 移除nsh_key_put_from_nlattr()函数。

参考链接

以下是提供与CVE-2025-40254相关的深入信息、实用解决方案和有价值工具的外部链接精选列表。

CWE - 常见弱点枚举

虽然CVE标识了漏洞的具体实例,但CWE对可能导致漏洞的常见缺陷或弱点进行分类。CVE-2025-40254与以下CWE相关联:

(原文此部分无具体CWE编号列表)

常见攻击模式枚举和分类 (CAPEC)

常见攻击模式枚举和分类 (CAPEC) 存储了攻击模式,这些模式描述了对手利用CVE-2025-40254弱点的常见属性和方法。

(原文此部分无具体CAPEC信息)

漏洞时间线详情

漏洞历史记录详细信息有助于理解漏洞的演变,并识别可能影响漏洞严重性、可利用性或其他特征的最新更改。

漏洞评分详情

此漏洞暂无CVSS指标可用。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计