OSSN/OSSN-0075
已删除的 Glance 镜像 ID 可能会被重新分配
总结
已删除镜像的镜像 ID 可能会被重新分配给其他镜像。这会造成以下可能性:
- Alice 创建了一个从镜像 ID X 启动的 VM,该镜像由她信任的 Bob 分享给她。
- Bob(镜像 X 的所有者)删除了该镜像。按照设计,Alice 没有收到任何关于此事件的通知。
- Mallory 创建了一个新的镜像,并指定 ID 应该为 X。
- Mallory 将镜像 X 分享给 Alice。同样,按照设计,Alice 没有收到此更改的通知。
- Alice 在没有意识到镜像已更改的情况下启动她的 VM。
值得注意的是,在这种情况下,Mallory 需要知道 Alice 的项目 ID 才能将新镜像分享给 Alice。但这不足以缓解该问题,因为项目 ID 本身并非设计为保密的。
此外,如果环境允许非管理员发布镜像,Mallory 无需显式地与 Alice 分享或知道她的项目 ID 即可执行此攻击。
受影响的服务 / 软件
Glance, Liberty, Mitaka, Newton
讨论
Glance 的镜像表不维护一个先前使用的镜像 ID 列表。先前分配的镜像 ID 会在镜像表中标记为已删除,但这些记录可能会被删除(出于性能原因),使用 `glance-manage db purge` 工具或由管理员手动删除。
如果删除这些记录,恶意用户可能会故意上传一个使用相同 ID 的新镜像(Glance 允许镜像创建者可选地指定镜像 ID)。这将导致任何引用该 ID 的受害者实例使用攻击者提供的镜像。
建议的操作
清除 Glance 数据库条目与非管理员镜像上传的结合是危险的。在允许普通用户上传镜像的环境中,不应清除 `images` 表。但是,可以安全地删除 `image_properties`、`image_tags`、`image_members` 和 `image_locations` 表中的行。
联系方式 / 参考文献
作者:Travis McPeak, IBM
此 OSSN:https://wiki.openstack.org/wiki/OSSN/OSSN-0075
原始 LaunchPad Bug:https://bugs.launchpad.net/glance/+bug/1593799/
OpenStack Security ML:openstack-security@lists.openstack.org
OpenStack Security Group:https://launchpad.net/~openstack-ossg