OSSA-2024-003: 将未验证的图像数据传递给 qemu-img

日期:

2024年9月4日

CVE:

CVE-2024-44082

影响

  • Ironic: <21.4.3, >=22.0.0 <23.0.2, >=23.1.0 <24.1.2, >=25.0.0 <26.0.1

  • Ironic-python-agent: <9.4.2, >=9.5.0 <9.7.1, >=9.8.0 <9.11.1, >=9.12.0 <9.13.1

描述

红帽的 Dan Smith 和 Julia Kreger 以及 G-Research 的 Jay Faulkner 注意到 Ironic 图像处理中存在一个漏洞,经过精心设计的图像可能被认证用户利用来利用 qemu-img 中的不良行为,包括可能未经授权访问潜在敏感数据。

缓解措施

附加补丁包含允许 Ironic 和 Ironic-Python-Agent (IPA) 在将它们传递给 qemu-img 之前预先筛选图像的代码。您应该修补这两个补丁,因为在某些流行的部署配置中,图像可能会绕过 Ironic conductor 以实现更高效的图像下载。

在无法修补 IPA 的情况下,有一个新的配置选项,[conductor]conductor_always_validates_images。当此选项为 True 时,所有图像下载都将被强制通过 Ironic conductor 进行,并在那里进行验证。但是,这可能会导致性能显著下降;因此,我们建议同时修补 Ironic 和 IPA。

对于所有维护分支(即 Dalmatian 开发分支(当前 master)到 Antelope),Ironic 和 IPA 都有可用的补丁。对于这些分支,conductor_always_validates_images 默认值为 False。

对于未维护的分支(Zed 到 Victoria),由于回归风险很大,IPA 没有可用的补丁。对于这些分支,Ironic 补丁将 conductor_always_validates_images 设置为 True,因为这是运行未修补的 IPA 的唯一安全方法。

缓存的图像

应清除 Ironic 图像缓存中的图像。要清除缓存,请停止 Ironic conductor 并删除该 conductor 节点上的 [pxe]instance_master_path 目录中的文件。

支持的图像格式

一个新的配置选项,[conductor]permitted_image_formats 控制 Ironic 将接受哪些图像格式。默认情况下,允许的格式为 ‘raw’ 和 ‘qcow2’,这是 Ironic 经过测试的唯一格式。在以前的版本中,可以使用其他不受支持格式的图像与 Ironic 一起使用,但现在由于图像转换过程中出现的安全问题,默认情况下已阻止这样做。虽然不建议这样做,但可以扩展允许格式的列表。或者,需要使用不受支持格式的图像的用户可以在将图像上传到 Glance 或以其他方式使图像可供 Ironic 使用之前,将图像离线转换为受支持的格式。有关详细信息,请参阅 Ironic 文档。

警告

如文档所述,OpenStack Ironic 项目不支持在非 Ironic 用例中使用 ironic-lib。在其正常的受支持环境中,ironic-lib 假定图像在 ironic-lib 与它们接触之前已经过预先筛选。因此,ironic-lib 的不受支持的使用会使您容易受到此 OSSA 中概述的漏洞攻击。

Ironic 项目打算最终显式删除 ironic-lib 中的漏洞方法,但提醒读者独立使用 ironic-lib 不受支持。

Bugfix 分支

维护的 bugfix 分支有可用的补丁。这些补丁将被合并到维护的分支,但不会从这些分支触发新的发布。

补丁

鸣谢

  • 红帽的 Dan Smith (CVE-2024-44082)

  • G-Research 的 Jay Faulkner (CVE-2024-44082)

  • 红帽的 Julia Kreger (CVE-2024-44082)

参考

说明

  • 有关不建议对不受信任的图像调用 ‘qemu-img info’ 的更多信息,请参阅 CVE-2024-04467。

  • ironic unmaintained/* 分支将不会收到点发布,但会提供补丁作为一种礼貌。

  • ironic-python-agent unmaintained/* 分支将不会收到点发布,并且也没有可用的补丁。

  • ironic 和 ironic-python-agent bugfix/* 分支将不会收到点发布,但会提供补丁作为一种礼貌。