# NGINX Ingress控制器漏洞公告（CVE-2026-42945）
该漏洞是一个NGINX模块的堆缓冲区溢出漏洞，对于命中触发配置的NGINX服务，该漏洞会导致Worker进程崩溃并重启，造成DoS攻击。对于关闭了ASLR地址空间随机化的Nginx服务，可以被RCE攻击。
Kubernetes社区Ingress NGINX控制器 从v1.13.3开始使用NGINX 1.27.1，该版本位于CVE-2026-42945的受影响范围内。
#### 漏洞详情
表1漏洞信息 
| 漏洞类型 | CVE-ID          | 漏洞级别 | 披露/发现时间 |
|:---|:---|:---|:---|
| 拒绝服务、RCE                                                | [CVE-2026-42945](https://nvd.nist.gov/vuln/detail/CVE-2026-42945) | 严重                              | 2026-05-13                          |
   
#### 漏洞影响
受漏洞影响的开源Ingress NGINX控制器版本范围如下：
- ≤ v1.13.9
- ≤ v1.14.5
CCE服务的NGINX Ingress控制器插件版本5.0.14、6.0.24及以下均受该漏洞影响。尽管CCE发布的OS镜像操作系统默认已开启ASLR地址空间随机化，能够阻止RCE攻击，但仍存在DoS攻击风险。CCE NGINX Ingress控制器插件与开源版本的对应关系参见[NGINX Ingress控制器插件版本发布记录](https://support.huaweicloud.com/bulletin-cce/cce_bulletin_0043.html)。
#### 判断方法
1. 前往插件中心，查看是否已安装NGINX Ingress控制器插件以及插件版本。
   图1查看已安装插件版本   
   ![](https://support.huaweicloud.com/bulletin-cce/zh-cn_image_0000002574443538.png "点击放大")
   
   
2. 若插件版本在5.0.14、6.0.24及以下，则受漏洞影响，按步骤3进一步排查，否则不受这些漏洞影响。
3. 查看CCE NGINX Ingress控制器插件Pod中的nginx配置。 执行以下命令查看已安装的CCE NGINX Ingress控制器插件Pod：
   ```
   kubectl get po -A|grep cceaddon-nginx-ingress|grep controller
   ```
   如下图所示，集群已安装了两个nginx ingress controller：
   ![](https://support.huaweicloud.com/bulletin-cce/zh-cn_image_0000002574283930.png "点击放大")
   执行以下命令查看nginx.conf中的rewrite配置：
   ```
   kubectl exec -it cceaddon-nginx-ingress-controller-8d44d5bb5-csqfj -n kube-system -- cat /etc/nginx/nginx.conf |grep -A 5 -B 5 rewrite
   ```
   输出的nginx rewrite配置**满足**以下条件可能触发漏洞：
   1. rewrite 指令的替换字符串中包含问号（?）。
   
   2. 后续存在 set、rewrite 或 if 指令，引用未命名捕获组，例如 $1、$2。
   
   
   **常见触发配置示例**（以下均有风险）：
   - 示例1：API路由
     ```
     rewrite ^/api/(.*)$ /internal?migrated=true;
     set $original_endpoint $1;
     ```
     
   
   - 示例2：WordPress永久链接
     ```
     rewrite ^/(.*)$ /index.php?q=$1;
     set $wp_path $1;
     ```
     
   
   - 示例3：PHP前端控制器
     ```
     rewrite ^/app/(.*)$ /app.php?path=$1 last;
     set $route $1;
     ```
     
    
 
#### 漏洞消减方案
在修复之前，建议您按最小权限原则，只给予受信用户创建及管理Ingress的权限，详情请参见[命名空间权限（Kubernetes RBAC授权）](https://support.huaweicloud.com/usermanual-cce/cce_10_0189.html)。
若排查结果显示符合漏洞触发条件，可以通过修改Ingress的配置加固：
1. 查看Ingress配置：
   ```
   kubectl get ingress -A -o yaml | grep -A 5 -B 5 "nginx.ingress.kubernetes.io/rewrite-target"
   kubectl get ingress -A -o yaml | grep -A 5 -B 5 "nginx.ingress.kubernetes.io/configuration-snippet"
   ```
   
2. 使用命名捕获组：
   将所有配置中危险的rewrite和set指令组合中的"未命名捕获组"（如$1、$2）替换为"命名捕获组"（如 (?\<name\>...)）
   ```
   apiVersion: networking.k8s.io/v1
   kind: Ingress
   metadata:
     name: safe-ingress
     annotations:
       # 使用命名捕获组 $path，并保留问号（但命名捕获组可规避漏洞）
       nginx.ingress.kubernetes.io/rewrite-target: /new-path/$path?
       nginx.ingress.kubernetes.io/configuration-snippet: |
         set $my_var $uri;   # 仍然存在后续指令，但因使用了命名捕获组，漏洞被抑制
   spec:
     rules:
     - host: example.com
       http:
         paths:
         - path: /old/(?<path>.*)   # 定义命名捕获组 path
           pathType: Prefix
           backend:
             service:
               name: backend-svc
               port:
                 number: 80
   ```
   
3. 参考第2步，修改Ingress资源的annotation中的nginx.ingress.kubernetes.io/configuration-snippet注释。
 
#### 漏洞修复方案
CCE将发布新的NGINX Ingress控制器插件修复该漏洞，请留意[NGINX Ingress控制器插件版本发布记录](https://support.huaweicloud.com/bulletin-cce/cce_bulletin_0043.html)。
#### 相关链接
NGINX 官方安全通告：<https://nginx.org/en/security_advisories.html>
