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 服务用户凭据的部署需要应用相关的代码更改,并进行配置更改以解决问题。
补丁和相关部署更改¶
鉴于上述分析,彻底的修复必须包括以下要素
os-brick 库必须实现光纤通道的
force选项,而此前只有 iSCSI 才可用(涵盖在链接的补丁中)。Nova 必须在断开已删除实例的卷时,使用
force选项调用 os-brick(涵盖在链接的补丁中)。在 Glance 使用 cinder glance_store 驱动程序的部署中,Glance 必须在断开卷时使用
force选项调用 os-brick(涵盖在链接的补丁中)。Cinder 必须区分安全的附件删除请求和不安全的附件删除请求,并拒绝不安全的请求。此修复的两个组成部分是
如果当前有实例正在使用该附件,则块存储 API 将返回 409(冲突),除非请求是由服务(例如 Nova)代表用户发起的(涵盖在链接的补丁中)。
为了识别由服务代表用户发起的请求,必须配置 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
cinder glance_store 驱动程序不会将卷附加到实例;而是直接将卷附加到 Glance 节点。因此,第 4 步中的 Cinder 更改将识别来自 Glance 的附件删除请求为安全请求并允许它。(当然,我们希望您已将第 1 步和第 3 步中的补丁应用于您的 Glance 节点。)
勘误¶
需要一个额外的 nova 补丁来修复周期性任务和一些 nova-manage 操作中的一个小的回归(errata 1)。还需要一个 tempest 补丁来解释修复到位后的行为变化(errata 2)。稳定/wallaby 分支的修复引入了一个回归,该回归通过在发布公告后调整其补丁来解决(errata 3)。
补丁¶
https://review.opendev.org/882836 (2023.1/antelope cinder)
https://review.opendev.org/882851 (2023.1/antelope glance_store)
https://review.opendev.org/882858 (2023.1/antelope nova)
https://review.opendev.org/882859 (2023.1/antelope nova errata 1)
https://review.opendev.org/882843 (2023.1/antelope os-brick)
https://review.opendev.org/882835 (2023.2/bobcat cinder)
https://review.opendev.org/882834 (2023.2/bobcat glance_store)
https://review.opendev.org/882847 (2023.2/bobcat nova)
https://review.opendev.org/882852 (2023.2/bobcat nova errata 1)
https://review.opendev.org/882840 (2023.2/bobcat os-brick)
https://review.opendev.org/882876 (2023.2/bobcat tempest errata 2)
https://review.opendev.org/882869 (Wallaby nova)
https://review.opendev.org/882870 (Wallaby nova errata 1)
https://review.opendev.org/882839 (Xena cinder)
https://review.opendev.org/882855 (Xena glance_store)
https://review.opendev.org/882867 (Xena nova)
https://review.opendev.org/882868 (Xena nova errata 1)
https://review.opendev.org/882848 (Xena os-brick)
https://review.opendev.org/882838 (Yoga cinder)
https://review.opendev.org/882854 (Yoga glance_store)
https://review.opendev.org/882863 (Yoga nova)
https://review.opendev.org/882864 (Yoga nova errata 1)
https://review.opendev.org/882846 (Yoga os-brick)
https://review.opendev.org/882837 (Zed cinder)
https://review.opendev.org/882853 (Zed glance_store)
https://review.opendev.org/882860 (Zed nova)
https://review.opendev.org/882861 (Zed nova errata 1)
https://review.opendev.org/882844 (Zed os-brick)
鸣谢¶
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 - 原始版本