本文档介绍了影响 Kubernetes 组件 ingress-nginx(验证准入控制器)的漏洞 CVE-2025-1974 的研究。
CVE-2025-1974 是一个严重漏洞(CVSS 3.1 9.8),属于 ingress-nginx 进程上下文中的未经身份验证的 远程代码执行(RCE)。攻击者在攻击过程中,如果能够访问 Pod 网络(或者能够将 AdmissionReview 发送到验证 webhook),则可以在控制器 Pod 中执行任意代码,这可能导致 Secrets 泄露和集群被接管。
Ingress-nginx 是 Kubernetes 中最常用的 Ingress 控制器之一(据估计,有相当大比例的集群在使用它),因此该漏洞的实际影响非常高。Kubernetes、Wiz 研究人员以及多家供应商博客已发布了相关的描述、技术分析和官方修复建议。
逐步剖析 CVE-2025-1974,并为撰写 write-up 准备所需材料:
本研究仅供教育和道德目的,并针对测试/受控环境。
在任何情况下,未经所有者书面许可,不得针对他人集群或公开可用的实例运行漏洞利用程序/PoC。公开发布完全可用的“武器化”PoC 会大大增加滥用风险——在公开部分最好提供 safe-PoC 和方法论。(官方公告和供应商也强调在传播漏洞利用程序时要谨慎。)
cpe:2.3:a:kubernetes:ingress-nginx_controller:<version> — 受影响的 ingress-nginx 版本(公告中列出了具体版本;最终发布时请更新数值)。漏洞适用的配置条件:
简要总结。
该漏洞发现于 Ingress-NGINX 控制器的 验证准入控制器 组件中,与该组件基于传入的 Ingress / AdmissionReview 生成并验证临时 NGINX 配置的方式有关。在处理过程中,控制器会生成 nginx.conf 并执行配置检查 (nginx -t)。如果 Ingress/AdmissionReview 的字段净化不足,攻击者可以插入精心构造的片段,这些片段会进入生成的配置,并最终导致控制器进程内执行命令——即在 ingress-nginx Pod 中实现远程代码执行 (RCE)。
AdmissionReview/Ingress 对象成为生成 NGINX 配置的原始数据(包括注释字段、后端设置等)。Ingress 或直接发送的 AdmissionReview 可以将可控字符串注入配置模板/片段。当此类 nginx.conf 被检查/加载时,检查过程 (nginx -t) 和随后的配置文件操作可能导致在控制器上下文中执行任意代码、写入/运行文件或执行命令。AdmissionReview 发送到验证 webhook(从 Pod 网络访问或直接网络访问);缺少补偿措施——NetworkPolicy、RBAC 限制或额外的 webhook 身份验证。在某些场景下,可以通过直接向 webhook 发送精心构造的 AdmissionReview 来绕过 Create/Update 权限。
成功利用可在 ingress-nginx 容器中执行代码,这通常允许:
alpine 类型的容器)到 ingress-nginx-controller-admission 和 ingress-nginx-controller 服务的入站连接,这在正常工作中不应出现。nginx -t 调用和控制器突然重启,以及 ingress-nginx 进程的意外文件写入操作。Ingress-NGINX 是 Kubernetes 中使用最广泛的 Ingress 控制器之一(广泛用于组织对服务的外部访问)。该控制器充当反向代理:接收外部流量并根据一组 Ingress 规则将其代理到相应的 Service/Pod。Ingress-NGINX 项目非常受欢迎,在可互联网访问的集群中占有很大份额。
Ingress-NGINX 在 Kubernetes 文档中被作为 Ingress 控制器的参考示例。据估计,相当大比例的公网集群使用它;一些研究指出,大约 41% 的公开可访问集群使用 Ingress-NGINX。正是由于它的广泛普及和在流量路由中的核心作用,该组件中的漏洞具有很高的实际影响。
validate.nginx.ingress.kubernetes.io)时通常不需要额外的身份验证。这使得从集群内部访问变得容易。Ingress / AdmissionReview,其中特定字段包含未经过滤的恶意字符串。nginx.conf,并执行 nginx -t / 其他检查操作。此类漏洞与其他缺陷结合时尤其危险:受陷的 Pod(或公共应用程序中的 SSRF)+ 暴露的验证 webhook 提供了很高的完全攻破机会。因此,事件分析应考虑依赖链和潜在向量,而不仅仅是 ingress-nginx 的版本。