一、背景
Open vSwitch内核模块允许用户空间对所选网络设备上的流级包处理进行灵活控制。它可以实现普通以太网交换机、网络设备绑定、VLAN处理、网络访问控制、基于流的网络控制等。
通常openvswitch是默认安装在Linux Kernel内的。
二、漏洞分析
查看openvswitch信息:
modinfo openvswitch
filename: /lib/modules/5.15.0-40-generic/kernel/net/openvswitch/openvswitch.ko
alias: net-pf-16-proto-16-family-ovs_ct_limit
alias: net-pf-16-proto-16-family-ovs_meter
alias: net-pf-16-proto-16-family-ovs_packet
alias: net-pf-16-proto-16-family-ovs_flow
alias: net-pf-16-proto-16-family-ovs_vport
alias: net-pf-16-proto-16-family-ovs_datapath
license: GPL
description: Open vSwitch switching datapath
srcversion: 27DDC0729231E3C74708FBB
depends: nf_conntrack,nf_nat,nf_conncount,libcrc32c,nf_defrag_ipv6,nsh
retpoline: Y
intree: Y
name: openvswitch
vermagic: 5.15.0-40-generic SMP mod_unload modversions
sig_id: PKCS#7
signer: Build time autogenerated kernel key
sig_key: 7F:E1:D0:08:A1:F1:E2:EF:75:3C:B7:4F:A0:0E:1A:45:8A:3A:22:DC
sig_hashalgo: sha512
Linux Kernel openvswitch 模块在处理大量actions的情况下可能会存在越界写入漏洞。本地经过身份认证的攻击者可利用此漏洞提升至ROOT权限。
三、修复补丁:
openvswitch: fix OOB access in reserve_sfa_size() · torvalds/linux@cefa91b · GitHub
给定足够多的action,同时复制和为新流的新动作保留内存,如果 next_offset 是大于 MAX_ACTIONS_BUFSIZE,函数 reserve_sfa_size() 会没有按预期返回 -EMSGSIZE,但它分配了 MAX_ACTIONS_BUFSIZE字节将 actions_len 增加 req_size。这可能会导致 OOB写访问权限,尤其是在需要复制进一步操作时。 补丁通过重新安排流动作大小检查来修复它。
四、漏洞验证POC:
由于POC需要不断越界读写内存,可能导致系统crash,请谨慎使用。