跳转到: 导航, 搜索

OSSN/OSSN-0065


Glance 用户可能能够替换活动镜像数据

总结

当 Glance 配置了“show_multiple_locations”选项并启用了设置和删除位置的默认策略时,具有镜像元数据写入权限的非管理员用户可能能够替换活动镜像数据。

受影响的服务 / 软件

Glance, Havana, Icehouse, Juno, Kilo, Liberty, Mitaka, Newton, Ocata

讨论

为了方便操作员,Glance 具有一个默认禁用的多位置功能,允许将单个镜像存储在多个位置。 这旨在通过提高 Glance 镜像的可用性来提供额外的弹性。 此功能涉及用户通过 Glance API 设置镜像的“locations”列表中的新条目,默认情况下用户不可见。 但是,此过程不涉及对新创建的镜像位置中的数据进行校验和计算,因此不涉及将镜像的“checksum”字段(始终对用户可见)与任何添加位置的校验和进行比较。 这种设计打开了恶意用户在 Glance 中创建镜像、设置指向修改后的镜像的附加位置、然后删除原始位置的可能性,从而导致原始镜像的消费者无意中使用恶意镜像。 请注意,此攻击向量无法更改原始镜像的校验和,并且仅限于攻击者拥有的镜像。

建议的操作

此攻击的影响范围取决于原始镜像在不校验镜像后再使用的消费者中的广泛程度。 Glance 提供了三种使镜像可供其他用户使用的方式

  1. 将镜像设为“public”(公开)。 这会将镜像提供给云的所有用户。 此功能由“publicize_image”策略控制,该策略自 Juno 版本发布以来默认限制为 admin 角色。
  2. 将镜像设为“community”(社区)。 此功能仅自 Ocata 版本起可用。 这会将镜像提供给云的所有用户,但与“public”镜像不同,它不会出现在任何用户(所有者除外)的默认镜像列表响应中。 它由“communitize_image”策略控制,默认情况下不受限制。
  3. 将镜像设为“shared”(共享)。 Glance 允许项目到项目的镜像共享,其中项目 A 中的用户通过将项目 B 设为镜像的 *member* 来与项目 B 共享镜像。 此功能由“add_member”策略控制,默认情况下不受限制。
    • 基于 Glance 中的“owner_is_tenant”配置设置,项目到项目的共享是默认设置。 在配置为“owner_is_tenant”为 false 的云中,镜像共享是用户到用户的。 这是一个云范围内的配置,用户无法确定共享是项目到项目还是所有者到所有者。


请注意,到目前为止所讨论的内容与本通知中讨论的特定漏洞无关。 我们鼓励云操作员查看上述策略的当前设置。 特别是,我们建议将“publicize_image”策略限制为管理员(如自 Juno 版本发布以来默认所做的那样),以便用户可以依赖“public”镜像的可信度。

关于上述镜像位置漏洞,我们建议操作员查看以下配置选项和策略的设置

  • 配置选项“show_multiple_locations”。 如果将其设置为 False,则此攻击向量不可用。
  • 策略“set_image_location”。 当“show_multiple_locations”设置为 True 时,我们建议将此策略限制为管理员,并在必要时限制为可信用户。 当前默认情况下不受限制。
  • 策略“get_image_location”和“delete_image_location”。 这些策略默认情况下不受限制(但请注意,如果“show_multiple_locations”为 False,则它们不适用)。

此外,应鼓励镜像消费者校验他们使用的镜像,并将结果与从 Images API 响应中“checksum”字段进行比较。

最后,除了查看上述特定位置策略目标之外,我们还鼓励操作员查看 Glance policy.json 文件中的“default”目标。 当软件引用策略目标但在 policy.json 文件中未明确定义时,将使用此目标,这可能发生在软件中引入了新的目标但使用的策略文件来自先前版本时。 自 Newton 以来,Glance 已经发布了“default":"role:admin”,但在那之前,Glance 发布了“default":"", 这将使文件中未明确提及的任何目标不受限制。

联系方式 / 参考文献

作者:Robert Clark, IBM

此 OSSN : https://wiki.openstack.org/wiki/OSSN/OSSN-0065

原始 LaunchPad Bug : https://bugs.launchpad.net/ossn/+bug/1549483

OpenStack Security ML:openstack-security@lists.openstack.org

OpenStack Security Group:https://launchpad.net/~openstack-ossg

多镜像位置 BP : https://blueprints.launchpad.net/glance/+spec/multiple-image-locations