最近发现的一组被称为 IngressNightmare 的漏洞,存在于 Ingress NGINX Controller 中,使得集群面临未经身份验证的远程代码执行(RCE)风险。Kubernetes 在容器编排领域占据主导地位,但其重要性也使其成为了被攻击利用的目标。
在 Kubernetes 中,Ingress 充当着一个复杂的流量管理系统,允许外部访问内部服务。它由两个核心组件组成:
1.Ingress 资源:这些资源基于主机名、路径或其他标准来定义路由规则,通常在 YAML 配置文件中指定。
2.Ingress Controller:这些控制器实现路由规则,通常使用反向代理或负载均衡器。
基于流行的 NGINX Web 服务器构建的 Ingress NGINX Controller,是部署最为广泛的选项之一,在 GitHub 上获得了超过 18000 个星标。
这些漏洞可能会让攻击者破坏整个 Kubernetes 环境。在 Kubernetes 中,Ingress 通过 Ingress 资源(即通过主机名或路径定义路由规则的 YAML 文件)和 Ingress Controller(如 NGINX 变体,它通过反向代理实施这些规则)来管理外部到内部服务的流量。
例如,一个 YAML 文件可能会将 example.com/ 定向到前端服务,将 example.com/api 定向到后端服务。尽管这个系统功能多样,但一旦被利用,就会存在漏洞。
IngressNightmare 四个关键漏洞
IngressNightmare 包含了 Ingress NGINX Controller 的准入 Webhook(用于验证 Ingress 对象)中的四个漏洞。这些漏洞影响 v1.11.0 之前的版本、v1.11.0 至 v1.11.4 版本以及 v1.12.0 版本,v1.11.5 和 v1.12.1 版本中已提供补丁。这些漏洞分别是:
1.CVE-2025-1097(身份验证 TLS 匹配 CN 注释注入):此漏洞允许攻击者通过 auth-tls-match-cn 注释注入恶意配置,绕过身份验证检查。它可以操纵 TLS 验证,有可能暴露敏感数据或为进一步的攻击创造条件(通用漏洞评分系统(CVSS)评分为 8.8)。
2.CVE-2025-1098(镜像 UID 注入):通过利用与镜像相关的注释(mirror-target 或 mirror-host)或 UID 操纵,攻击者可以注入任意配置。这可能会重定向流量或执行未经授权的操作,损害集群的完整性(CVSS 评分为 8.8)。
3.CVE-2025-24514(身份验证 URL 注释注入):这个漏洞针对 auth-url 注释,允许攻击者注入控制器会处理的恶意 URL。这可能导致未经授权的访问,或成为更广泛攻击的入口点(CVSS 评分为 8.8)。
4.CVE-2025-1974(NGINX 配置代码执行):这是最严重的漏洞,通过利用 NGINX 配置验证,使得未经身份验证的远程代码得以执行。攻击者注入在 nginx -t 测试期间执行的代码,从而获得对集群机密的访问权限并实现完全控制(CVSS 评分为 9.8)。
成功利用这些漏洞可能会暴露所有机密信息、实现横向移动,甚至导致集群被接管。
攻击是如何进行的?
IngressNightmare 攻击通过多个阶段利用这些漏洞。首先是发现阶段,攻击者使用诸如 Shodan 之类的工具扫描暴露的控制器。
然后,他们精心构造一个恶意的 Ingress 对象,将有害的 NGINX 指令嵌入到诸如 auth-url 或 auth-tls-match-cn 之类的注释中。
这个对象作为未经身份验证的准入审查请求发送到 Webhook,利用了 Webhook 缺乏身份验证的缺陷。
根据报告,控制器生成一个包含注入代码的 NGINX 配置,并且在使用 nginx -t 进行验证期间,诸如加载恶意库之类的恶意指令会被执行,从而实现远程代码执行。凭借控制器的权限,攻击者可以访问机密信息、进行横向移动,并有可能控制整个集群。
缓解策略
使用以下命令检查存在漏洞的 Pod:
kubectl get pods –all-namespaces –selector app.kubernetes.io/name=ingress-nginx
通过 kubectl describe pod 命令验证版本。如果存在风险,使用以下命令升级到 v1.11.5 或 v1.12.1 版本:
helm upgrade ingress-nginx ingress-nginx/ingress-nginx –version <patched-version>
如果无法立即打补丁,可以使用网络策略限制 Webhook 的访问,或者通过设置 controller.admissionWebhooks.enabled=false(Helm)或删除 ValidatingWebhookConfiguration 来禁用它。
Ingress 还存在一些操作方面的问题:SSL 错误需要对机密信息和 DNS 进行验证;路由问题需要检查日志和端点;性能瓶颈可以通过扩展副本数量以及调整代理设置(如 proxy-buffer-size: “8k”)来解决。
IngressNightmare 揭示了 Kubernetes 容易受到复杂攻击的现状。鉴于已有补丁和缓解措施可用,各组织必须优先确保其集群的安全。
发表评论
您还未登录,请先登录。
登录