近日,F5发布安全公告,披露了NGINX的一个堆缓冲区溢出高危漏洞 CVE-2026-42945。该漏洞存在于NGINX的 ngx_http_rewrite_module 模块中,最早引入于2008年发布的NGINX 0.6.27版本,潜伏时间长达18年。当集群使用 Nginx Ingress Controller作为集群Ingress网关时,未经身份验证的远程攻击者可触发堆溢出,在特定条件下实现远程代码执行(RCE),进而获得集群维度的资源访问权限。该漏洞被评估为高危漏洞,CVSS(Common Vulnerability Scoring System,通用漏洞评分系统)评分 9.2。关于漏洞的更多信息请参考F5官方公告。
影响范围
由于漏洞潜伏时间长达18年,当前所有版本的Nginx Ingress Controller均受此漏洞影响。
未安装Nginx Ingress Controller组件的集群不受此漏洞影响。请通过以下方式确认集群是否安装了该组件。
组件管理
控制台
在ACK集群列表页面,单击目标集群名称,在集群详情页左侧导航栏,单击组件管理。
单击网络页签,查看是否存在Nginx Ingress Controller组件卡片。如果存在,则表明已安装。
kubectl
以下命令若有输出则表明已安装。
kubectl get pods -n kube-system --selector app=ingress-nginxHelm应用市场
在ACK集群列表页面,单击目标集群名称,在集群详情页左侧导航栏,选择。
在列表中查看是否存在
ack-ingress-nginx或ack-ingress-nginx-v1对应的Chart应用。如存在,则表明已安装。通过Helm应用市场安装的应用版本为Nginx Ingress Controller的版本号。
如何排查风险配置
您可以通过以下步骤排查集群中的风险配置。
导出集群Nginx Ingress Controller组件的默认配置到文件
ingress-nginx-full-config.txt中。kubectl exec -n <YOUR-NAMESPACE> <YOUR-POD-NAME> -- nginx -T > ingress-nginx-full-config.txt 2>&1使用以下命令检索包含数字捕获变量(如
$1、$2)与问号(?)的rewrite规则。grep -nE 'rewrite[[:space:]].*((\$[0-9].*\?)|(\?.*\$[0-9]))' ingress-nginx-full-config.txt对每条匹配结果进行人工复核,重点检查同一配置上下文(context)中是否存在后续的
rewrite、if或set指令。排查集群所有Ingress实例中是否包含可疑的
nginx.ingress.kubernetes.io/configuration-snippet注解配置。kubectl get ingress --all-namespaces -o json | jq -r ' .items[] | select(.metadata.annotations != null) | .metadata.namespace as $ns | .metadata.name as $name | .metadata.annotations | to_entries[] | select( .key == "nginx.ingress.kubernetes.io/configuration-snippet" and ((.value | gsub("\n"; " ")) | test("rewrite[[:space:]].*\\$[0-9].*\\?")) ) | "\n[POTENTIAL MATCH] Namespace: \($ns) | Ingress: \($name)\n Annotation Key: \(.key)\n Annotation Value: \(.value)" '
请将自动化匹配结果仅视为初步筛查的待查线索,切勿将其直接等同于漏洞可利用的确凿证据。
解决方案
请关注Nginx Ingress Controller组件发布记录,并参见升级Nginx Ingress Controller组件,在业务低峰期及时升级到v1.14.5-release.1及以上的漏洞修复版本。
v1.11.5-aliyun.1及以上版本的Nginx Ingress Controller组件已默认开启注解校验(annotation validation)并默认禁用所有snippet注解,有助于缓解部分风险。