| Kubernetes Ingress-nginx注解验证绕过漏洞 |
| |
| | | |
| | | |
| | | |
| | | |
| | | |
ingress-nginx是Kubernetes中一个流行的Ingress控制器,它使用NGINX作为反向代理和负载均衡器,旨在用于管理外部访问到Kubernetes集群内部服务的路由。
2024年8月19日,启明星辰集团VSRC监测到Ingress-nginx中存在一个验证绕过命令注入漏洞(CVE-2024-7646),该漏洞的CVSS评分为8.8。
ingress-nginx 控制器 v1.11.2之前版本中,有权在Kubernetes集群中创建Ingress对象(属于networking.k8s.io或extensions API组)的威胁者可以绕过注解验证并注入任意命令,进而获取ingress-nginx控制器的凭证,访问集群中存储的所有敏感信息。
二、影响范围
ingress-nginx controller < v1.11.2
三、安全措施
3.1 升级版本
目前该漏洞已经修复,受影响用户可升级到ingress-nginx
controller v1.11.2。
下载链接:
https://github.com/kubernetes/ingress-nginx/releases/tag/controller-v1.11.2
3.2 临时措施
该漏洞影响 ingress-nginx,如果集群上未安装 ingress-nginx,则不会受到影响。可以通过以下方式之一来检查集群上是否存在ingress-nginx控制器:
1.检查是否存在 ingress-nginx 命名空间:
使用kubectl get
namespaces命令,如果输出中包含 ingress-nginx,则表明集群中存在与 ingress-nginx 相关的资源;或者通过kubectl
get all -n ingress-nginx命令列出 ingress-nginx 命名空间中所有的 Pod、服务、部署等资源。如果看到有名为ingress-nginx-controller 的 Deployment 或 Pod,说明 ingress-nginx 控制器已经安装。
2. 通过在Kubernetes 环境中查找与 ingress-nginx-controller 相关的 Pod:
kubectl get po -A | grep ingress-nginx-controller
3.检查是否存在 ingress-nginx-controller 部署
使用命令kubectl get
deployments --all-namespaces | grep ingress-nginx,如果输出中包含 ingress-nginx-controller 部署,说明 ingress-nginx控制器已被安装。
检测与缓解
管理员可通过检查 Kubernetes 审计日志中是否存在任何可疑的 Ingress 对象,尤其是包含回车符 ( \r) 的注解,因为回车符(\r)可能被用于注入恶意代码或绕过某些验证机制。如果在 Kubernetes 审计日志中发现包含回车符 (\r) 的注解,确认是否存在恶意或异常的内容。可以使用 kubectl get
ingress -o yaml 命令查看详细的配置。如果确认有恶意注解或不安全的配置,可考虑:
l暂时隔离受影响的服务或命名空间,以防止进一步攻击;
l删除或修复 Ingress:通过 kubectl delete ingress 删除受影响的 Ingress 对象,或者手动编辑注解去除不安全的字符。修复后的对象应重新应用至集群中。
3.3 通用建议
定期更新系统补丁,减少系统漏洞,提升服务器的安全性。
加强系统和网络的访问控制,修改防火墙策略,关闭非必要的应用端口或服务,减少将危险服务(如SSH、RDP等)暴露到公网,减少攻击面。
使用企业级安全产品,提升企业的网络安全性能。
加强系统用户和权限管理,启用多因素认证机制和最小权限原则,用户和软件权限应保持在最低限度。
启用强密码策略并设置为定期修改。
3.4 参考链接
https://groups.google.com/g/kubernetes-security-announce/c/a1__cKjWkfA
https://github.com/kubernetes/kubernetes/issues/126744