Azure AKS中ServiceAccount挂载策略绕过问题分析
AKS Azure Kubernetes Service 项目地址: https://gitcode.com/gh_mirrors/ak/AKS
问题背景
在Kubernetes集群中,ServiceAccount是Pod访问API Server的重要身份凭证机制。为了加强安全性,Kubernetes提供了ServiceAccount准入控制器插件,其中包含一个关键的安全策略:通过kubernetes.io/enforce-mountable-secrets
注解可以限制Pod只能挂载ServiceAccount中明确指定的Secret。
问题详情
近期在Azure AKS服务中发现了一个安全问题(CVE-2024-3177),在某些情况下可能绕过ServiceAccount准入控制器对可挂载Secret的限制策略。具体表现为:
当Pod使用以下配置时,安全策略可能被绕过:
- 使用了带有
kubernetes.io/enforce-mountable-secrets
注解的ServiceAccount - 在容器、初始化容器或临时容器中配置了
envFrom
字段
该问题影响范围包括:
- kube-apiserver v1.29.0至v1.29.3
- kube-apiserver v1.28.0至v1.28.8
- kube-apiserver v1.27.12及更早版本
技术原理分析
正常情况下,当ServiceAccount设置了kubernetes.io/enforce-mountable-secrets
注解时,Kubernetes会严格检查Pod试图挂载的Secret是否在ServiceAccount的secrets字段中明确列出。这种机制确保了Pod只能访问授权的Secret。
然而,当Pod通过envFrom
方式从Secret导入环境变量时,准入控制器的检查逻辑存在不足,导致这些Secret引用可能绕过策略限制。这使得在某些情况下可能通过精心构造的Pod定义,访问未经授权的Secret数据。
影响评估
该问题的CVSS评分为2.7(低危),主要影响如下:
- 信息泄露风险:可能访问未授权的Secret数据
- 权限提升:可能获取更高权限的凭证
- 横向移动:在集群内部获取其他服务的访问凭证
需要注意的是,该问题的利用需要满足特定条件:
- 集群启用了ServiceAccount准入控制器(默认启用)
- 管理员主动为ServiceAccount添加了
kubernetes.io/enforce-mountable-secrets
注解 - Pod使用了
envFrom
字段配置
修复方案
Azure AKS团队已在2024年4月11日的版本更新中解决了该问题。对于使用受影响版本的用户,建议采取以下措施:
- 升级AKS集群至包含修复的版本
- 审查集群中所有使用了
kubernetes.io/enforce-mountable-secrets
注解的ServiceAccount - 监控可疑的Pod创建行为,特别是使用
envFrom
字段的配置
最佳实践建议
- 实施最小权限原则:仅授予ServiceAccount必要的Secret访问权限
- 定期审计ServiceAccount配置,确保注解使用正确
- 启用Kubernetes审计日志,监控敏感操作
- 考虑使用RBAC等机制加强访问控制
- 保持集群组件及时更新至最新安全版本
该问题的发现和修复体现了云原生安全领域持续改进的过程,也提醒我们在使用高级Kubernetes功能时需要全面考虑安全影响。
AKS Azure Kubernetes Service 项目地址: https://gitcode.com/gh_mirrors/ak/AKS
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考