[安全公告] CVE-2021-25748:Ingress-nginx `path` 可以使用换行符绕过检查

半兽人 发表于: 2022-06-12   最后更新时间: 2022-06-14 10:46:40  
{{totalSubscript}} 订阅, 1,286 游览

2022年6月11号,上午12点09,发现 Ingress-nginx path 安全漏洞。

问题描述

在ingress-nginx中发现一个安全问题,可以创建或更新ingress对象的用户可以使用换行符绕过Ingress对象(在networking.k8s.ioextensionsAPI组中)的spec.rules[].http.paths[].path字段的消毒,以获取ingress-nginx控制器的凭证。在默认配置中,该凭证可以访问集群中的所有秘密

此问题已被评为高级 (CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:L/A:L),并分配了CVE-2021- 25748

受影响的组件和配置

这个错误影响了ingress-nginx。如果你的集群上没有安装ingress-nginx,你就不会受到影响。你可以通过运行kubectl get po -n ingress-nginx来确认。

如果运行的是 v1.2.0 (gcr.io/k8s-staging-ingress-nginx/controller-chroot) 中引入的“chrooted” ingress-nginx 控制器,则不会受到影响。

非管理员用户有权创建 Ingress 对象的多租户环境受此问题影响最大。

受影响的版本

  • <v1.2.1

修复的版本

  • v1.2.1

缓解

如果无法立即升级,可以通过实施一个准入策略来缓解此漏洞,该策略将networking.k8s.io/Ingress资源上的spec.rules[].http.paths[].path字段限制为已知的安全字符(如下新添加的规则,或 annotation-value-word-blocklist 的建议值)。

规则:

invalidAliasDirective = regexp.MustCompile(`(?s)\s*alias\s*.*;`)
invalidRootDirective  = regexp.MustCompile(`(?s)\s*root\s*.*;`)
invalidEtcDir         = regexp.MustCompile(`/etc/(passwd|shadow|group|nginx|ingress-controller)`)
nvalidSecretsDir     = regexp.MustCompile(`/var/run/secrets`)
invalidByLuaDirective = regexp.MustCompile(`.*_by_lua.*`)

检查

如果您发现该漏洞已被利用的证据,请联系security@kubernetes.io

额外的细节

有关更多详细信息,请参阅 ingress-nginx 问题 #8686。

鸣谢

这个漏洞是由Gafnit Amiga报告的。

谢谢你。

CJ Cullen,代表Kubernetes安全响应委员会

更新于 2022-06-14

查看kubernetes更多相关的文章或提一个关于kubernetes的问题,也可以与我们一起分享文章