OSSN/OSSN-0025
通过 Swift 可能暴露 Glance 镜像
总结
Glance 可以使用 Swift 作为后端存储虚拟机镜像。当 Glance 以这种方式配置(仅在多租户模式下),未经验证的用户即使 Glance 限制了对这些镜像的访问,也可以直接从 Swift 访问“公共”虚拟机镜像。
受影响的服务 / 软件
Glance, Swift, Havana, Icehouse
讨论
Swift 变量 'delay_auth_decision' 修改了 ACL,使其要么需要通过 Keystone 进行身份验证,要么允许未经身份验证的访问。当 'delay_auth_decision' 设置为 '1' 时,Swift ACL 使用通配符 (*) 来接受所有传入的响应。
当 Glance 配置为多租户模式时,这将允许所有租户以及未经验证的用户访问 Swift 的“公共”镜像。
当 Swift 和 Glance 以以下方式配置时,可能会发生这种情况
Swift proxy-server.conf 片段
delay_auth_decision = 1
Glance glance-api.conf 片段
default_store = swift swift_store_multi_tenant = True swift_store_create_container_on_put = True
一种发现 URL 的方法是拍摄公共镜像的快照。快照的 URL 与公共镜像的所有者 ID 结合使用,可以推断出公共镜像的 Swift URL。然后可以使用此 URL 匿名下载镜像。
建议的操作
如果您的 Swift 和 Glance 服务配置成易受攻击的方式,建议审计 Swift 镜像请求,以确定是否进行了未经授权的镜像请求。默认情况下,当访问镜像时,会向 Swift 日志文件记录一条消息。
将 Swift 的 'delay_auth_decision' 值设置为 '0' (False) 将需要 Keystone 身份验证才能访问 Swift 容器,仅建议用于使用 Keystone 进行身份验证的环境。
修改 Glance 配置以不在多租户模式下使用 Swift 可以缓解此问题,但具体取决于使用的配置,可能会引入其他问题。
实施替代后端(例如 Ceph)也可以消除此问题,但需要额外的知识来安全地安装和配置新的对象存储服务。
Swift 和 Glance 的配置项特定于给定的环境,因此在将其部署到生产环境之前,请测试配置。
联系方式 / 参考文献
- 作者:Nathaniel Dillon, HP
- 此 OSSN:https://wiki.openstack.org/wiki/OSSN/OSSN-0025
- 原始 LaunchPad Bug:https://bugs.launchpad.net/glance/+bug/1354512
- OpenStack Security ML:openstack-security@lists.openstack.org
- OpenStack Security Group:https://launchpad.net/~openstack-ossg