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

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

影响范围

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

Kubernetes社区在以下版本的Ingress-nginx组件中修复了该漏洞:

  • v1.2.0-beta.0
  • v1.2.0

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

漏洞影响

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

防范措施

止血方案1

  1. 执行以下命令,编辑kube-system命名空间下的ConfigMap实例。
    kubectl edit configmap -n kube-system nginx-configuration
  2. 增加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