CVE-2025-59303CVE-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功能增加更严格的权限校验,确保只有具有相应集群权限的用户才能使用该功能,并对其内容进行沙箱化处理。