一、漏洞简介

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 触发条件(如特定模块、特定配置、特定运行环境等)

  1. Pod 网络可访问(许多场景下 Pod 网络对云 VPC 中所有工作负载甚至企业网络开放)
  2. Ingress-nginx 的 Validating Admission Controller 功能启用
  3. 存在其他配置注入漏洞配合利用

三、漏洞详情与原理解析

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