一、漏洞简介¶
1.1 漏洞背景¶
Ingress-nginx 是 Kubernetes 项目提供的软件型 Ingress 控制器,它将 Kubernetes Ingress 对象的需求转换为 nginx 配置。由于其多功能性和易用性,Ingress-nginx 非常流行,部署在超过 40% 的 Kubernetes 集群中。
Ingress-nginx 默认具有集群范围内对所有 Secrets 的访问权限,这使得其安全性至关重要。
1.2 漏洞概述(包含 CVE 编号、危害等级、漏洞类型、披露时间等)¶
| 项目 | 内容 |
|---|---|
| 漏洞编号 | CVE-2025-1974 |
| 危害等级 | CRITICAL / 9.8 |
| 漏洞类型 | IngressNightmare RCE |
| 披露时间 | 2025-03-25 |
| 影响组件 | Kubernetes |
- CVE编号: CVE-2025-1974
- 危害等级: 严重 (Critical)
- CVSS评分: 9.8
- CVSS向量: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
- 发现者: Nir Ohfeld, Sagi Tzadik, Ronen Shustin, Hillai Ben-Sasson (Wiz)
- 发现时间: 2025年3月
这是当日公布的5个 Ingress-nginx 漏洞中最严重的一个。该漏洞允许 Pod 网络上的任何攻击者通过 Ingress-nginx 的 Validating Admission Controller 功能利用配置注入漏洞。
补充核验信息:公开时间:2025-03-25;NVD 评分:9.8(CRITICAL);CWE:CWE-653。
二、影响范围¶
2.1 受影响的版本¶
- ingress-nginx v1.12.0 及之前版本
- ingress-nginx v1.11.4 及之前版本
2.2 不受影响的版本¶
- ingress-nginx v1.12.1 及以上
- ingress-nginx v1.11.5 及以上
2.3 触发条件(如特定模块、特定配置、特定运行环境等)¶
- Pod 网络可访问(许多场景下 Pod 网络对云 VPC 中所有工作负载甚至企业网络开放)
- Ingress-nginx 的 Validating Admission Controller 功能启用
- 存在其他配置注入漏洞配合利用
三、漏洞详情与原理解析¶
3.1 漏洞触发机制¶
该漏洞利用了 Ingress-nginx 的 Validating Admission Controller 功能的网络暴露面。正常情况下,创建 Ingress 对象需要较高权限,但 CVE-2025-1974 使得 Pod 网络上的任何实体都有可能利用配置注入漏洞。
攻击链:
Pod网络访问 → Validating Admission Controller → 配置注入 → Secret泄露 → 集群接管
3.2 源码层面的根因分析(结合源码与补丁对比)¶
Ingress-nginx 在处理 Validating Webhook 请求时,未能充分验证请求来源和内容,导致攻击者可以通过构造特殊请求注入恶意 nginx 配置指令。
关键问题代码位置:
- internal/admission/controller/main.go - Webhook 处理逻辑
- internal/ingress/annotations/ - 注解解析逻辑
四、漏洞复现(可选)¶
4.1 环境搭建¶
# 创建测试集群
kind create cluster --name vuln-test
# 安装受影响版本的 ingress-nginx
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.11.4/deploy/static/provider/cloud/deploy.yaml
# 验证安装
kubectl get pods -n ingress-nginx
4.2 PoC 演示与测试过程¶
# 恶意 Ingress 配置示例
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: malicious-ingress
annotations:
nginx.ingress.kubernetes.io/configuration-snippet: |
# 恶意配置注入
access_log /dev/stdout;
# 可能导致 Secret 泄露的配置
spec:
rules:
- host: test.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: test-service
port:
number: 80
五、修复建议与缓解措施¶
5.1 官方版本升级建议¶
强烈推荐立即升级到以下版本: - ingress-nginx v1.12.1+ - ingress-nginx v1.11.5+
升级命令:
# Helm 升级
helm upgrade ingress-nginx ingress-nginx/ingress-nginx --namespace ingress-nginx --version 4.12.1
# 或使用 kubectl
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.12.1/deploy/static/provider/cloud/deploy.yaml
5.2 临时缓解方案(如修改配置文件、关闭相关模块、增加 WAF 规则等)¶
如果无法立即升级,可关闭 Validating Admission Controller 作为临时缓解措施:
方式一:Helm 安装
helm upgrade ingress-nginx ingress-nginx/ingress-nginx \
--namespace ingress-nginx \
--set controller.admissionWebhooks.enabled=false
方式二:手动删除
# 删除 ValidatingWebhookConfiguration
kubectl delete ValidatingWebhookConfiguration ingress-nginx-admission
# 编辑 Deployment 移除 --validating-webhook 参数
kubectl edit deployment ingress-nginx-controller -n ingress-nginx
# 找到 args 部分,删除 --validating-webhook 行
注意: 升级后记得重新启用 Validating Admission Controller,它为用户提供重要的配置验证功能。
六、参考信息 / 参考链接¶
6.1 官方安全通告¶
- https://kubernetes.io/blog/2025/03/24/ingress-nginx-cve-2025-1974/
- https://github.com/kubernetes/kubernetes/issues/131009
- https://github.com/kubernetes/ingress-nginx/releases/tag/controller-v1.12.1
- https://github.com/kubernetes/ingress-nginx/releases/tag/controller-v1.11.5
6.2 其他技术参考资料¶
- NVD:https://nvd.nist.gov/vuln/detail/CVE-2025-1974
- CVE:https://www.cve.org/CVERecord?id=CVE-2025-1974
- https://github.com/B1ack4sh/Blackash-CVE-2025-1974
- https://https://github.com/kubernetes/kubernetes/issues/131009
- https://security.netapp.com/advisory/ntap-20250328-0008/
- https://www.exploit-db.com/exploits/52475
- https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.11.4/deploy/static/provider/cloud/deploy.yaml
- https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.12.1/deploy/static/provider/cloud/deploy.yaml