近日Kubernetes Ingress-Nginx社区披露了安全漏洞CVE-2021-25748,攻击者可以通过定制化Ingress实例中的指定字段获取Nginx Ingress Controller的密钥凭证,从而越权获取集群中Secret实例等敏感信息。

CVE-2021-25748漏洞被评估为高危漏洞,在CVSS的评分为7.6

影响范围

低于v1.2.1版本的Ingress-nginx组件均在漏洞影响范围内。

Kubernetes社区在v1.2.1版本的Ingress-nginx组件中修复了该漏洞。

关于该漏洞的详细信息,请参见#8686

漏洞影响

具有Ingress实例创建或修改权限的攻击者,在创建的ingress实例(实例的API Group为networking.k8s.ioextensions)时,通过在该Ingress实例中构造定制化的spec.rules[].http.paths[].path字段获取Nginx Ingress Controller访问集群API Server的凭证,从而进一步越权获取集群中的Secret实例等敏感信息。

如何防范

止血方案1

  1. 执行以下命令,编辑kube-system命名空间下的ConfigMap实例。
    kubectl edit configmap -n kube-system nginx-configuration
  2. 在ConfigMap文件中增加annotation-value-word-blocklist的配置信息。
    更多信息,请参见annotation-value-word-blocklist
    data:
      annotation-value-word-blocklist: "load_module,lua_package,_by_lua,location,root,proxy_pass,serviceaccount,{,},',\""
  3. 重启Nginx Ingress Controller的Pods。

止血方案2

在集群中使用策略管理能力,部署容器安全策略规则ACKCheckNginxAnnotation,用于拦截包含危险配置的Ingress变更。更多信息,请参见配置容器安全策略(新版)容器安全策略规则库说明

止血方案3

您需要及时限制非管理员用户创建和修改Ingress实例的权限。

修复方案

您可以关注Nginx Ingress Controller组件发布公告,及时升级该组件。更多该组件发布信息,请参见Nginx Ingress Controller