OSSA-2023-003: 通过已删除卷附件进行未授权的卷访问

日期:

2023年5月10日

CVE:

CVE-2023-2088

影响

  • Cinder: <20.2.1, >=21.0.0 <21.2.1, ==22.0.0

  • Glance_store: <3.0.1, >=4.0.0 <4.1.1, >=4.2.0 <4.3.1

  • Nova: <25.1.2, >=26.0.0 <26.1.2, ==27.0.0

  • Os-brick: <5.2.3, >=6.0.0 <6.1.1, >=6.2.0 <6.2.2

描述

当存储系统取消映射卷导致主机上的 iSCSI 或 FC 连接中断,并且随后该设备被用于同一主机上的另一个卷时,可能会发生对卷的未授权访问。

范围: 仅使用 iSCSI 或 FC 卷的部署会受到影响。但是,此问题的修复包含 Nova 和 Cinder 中的配置更改,无论您使用哪种后端存储技术,在下次升级时都可能影响您。请参阅下面的配置更改部分,以及补丁和相关部署更改中的第 4(B) 项,了解详细信息。

此数据泄露可以通过两种不同的情况触发。

意外情况: 如果在正常的断开操作期间出现网络连接问题,OpenStack 可能无法正确清理情况。Nova 不会强制断开计算节点设备,而是忽略错误,假设实例已被删除。由于此不完整操作,OpenStack 可能会在将另一个卷连接到实例时选择错误的多路径设备。

故意情况: 普通用户可以创建一个带有卷的实例,然后直接在 Cinder 中删除卷附件,而不会通知 Nova。计算节点 SCSI 管道(通过 iSCSI/FC)将继续尝试连接到原始主机/端口/LUN,而不知道该附件已被删除。如果后续卷附件为不同的实例和卷重用主机/端口/LUN,则原始实例将在 SCSI 管道重新连接后获得对其访问权限。

配置更改

为了防止故意情况,Cinder 提供的块存储 API 必须仅接受来自 Nova 的实例附加卷的附件删除请求。一个复杂因素是,Nova 通过代表用户(即传递用户的令牌)向块存储 API 发出调用来删除附件,这使得该请求与用户直接发出的请求无法区分。解决方案是 Nova 必须包含服务令牌以及用户的令牌,以便 Cinder 可以确定断开请求来自 Nova。Nova 能够传递服务令牌的功能自 Ocata 以来就已支持,但在此之前不需要。因此,当前未发送 Nova 服务用户凭据的部署需要应用相关的代码更改,并进行配置更改以解决问题。

补丁和相关部署更改

鉴于上述分析,彻底的修复必须包括以下要素

  1. os-brick 库必须实现光纤通道的 force 选项,而此前只有 iSCSI 才可用(涵盖在链接的补丁中)。

  2. Nova 必须在断开已删除实例的卷时,使用 force 选项调用 os-brick(涵盖在链接的补丁中)。

  3. 在 Glance 使用 cinder glance_store 驱动程序的部署中,Glance 必须在断开卷时使用 force 选项调用 os-brick(涵盖在链接的补丁中)。

  4. Cinder 必须区分安全的附件删除请求和不安全的附件删除请求,并拒绝不安全的请求。此修复的两个组成部分是

    1. 如果当前有实例正在使用该附件,则块存储 API 将返回 409(冲突),除非请求是由服务(例如 Nova)代表用户发起的(涵盖在链接的补丁中)。

    2. 为了识别由服务代表用户发起的请求,必须配置 Nova 将服务令牌与用户令牌一起发送给 Cinder。如果未进行此配置更改,cinder 更改将拒绝与附加到实例的卷关联的任何删除附件请求。必须配置 Nova 将服务令牌发送到 Cinder,并且必须配置 Cinder 接受服务令牌。这在以下文档中描述,并且不通过链接的补丁自动应用:(使用服务令牌防止长时间运行的作业失败) https://docs.openstack.org/cinder/latest/configuration/block-storage/service-token.html 第 2 步中提到的 Nova 补丁包含更侧重于 Nova 的类似文档:doc/source/admin/configuration/service-user-token.rst

  5. cinder glance_store 驱动程序不会将卷附加到实例;而是直接将卷附加到 Glance 节点。因此,第 4 步中的 Cinder 更改将识别来自 Glance 的附件删除请求为安全请求并允许它。(当然,我们希望您已将第 1 步和第 3 步中的补丁应用于您的 Glance 节点。)

勘误

需要一个额外的 nova 补丁来修复周期性任务和一些 nova-manage 操作中的一个小的回归(errata 1)。还需要一个 tempest 补丁来解释修复到位后的行为变化(errata 2)。稳定/wallaby 分支的修复引入了一个回归,该回归通过在发布公告后调整其补丁来解决(errata 3)。

补丁

鸣谢

  • Jan Wasilewski from Atman (CVE-2023-2088)

  • Gorka Eguileor from Red Hat (CVE-2023-2088)

参考

说明

  • 有限的意外保护… 如果您只关心保护文档前面描述的意外情况,那么上述步骤 1-3 应该足够。但是,仅应用步骤 1-3 会让您的云完全暴露于此漏洞的故意利用之下。因此,我们建议将完整的修复应用于所有部署。

  • 使用配置作为短期缓解措施… 可以在 OSSN-0092 https://wiki.openstack.org/wiki/OSSN/OSSN-0092 中找到替代缓解方法

  • 稳定/xena 和稳定/wallaby 分支处于扩展维护之下,将不会收到新的点版本,但会提供它们的补丁作为一种礼貌,只要可用。

OSSA 历史

  • 2023-05-15 - Errata 3

  • 2023-05-10 - Errata 2

  • 2023-05-10 - Errata 1

  • 2023-05-10 - 原始版本