2022年6月11号,上午12点09,发现 Ingress-nginx path
安全漏洞。
问题描述
在ingress-nginx中发现一个安全问题,可以创建或更新ingress对象的用户可以使用换行符绕过Ingress对象(在networking.k8s.io
或extensions
API组中)的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安全响应委员会