跳转到: 导航, 搜索

OSSN/OSSN-0048


Glance 方法过滤在某些条件下不起作用

总结

Glance 在其缓存中间件中,针对某些镜像端点使用 Python 的 assert 语句来验证 HTTP 方法类型。Python 文档指出,当请求优化时(命令行选项 -O),assert 语句将不会被评估。这导致了一种情况,即这些方法验证将不会发生,并且可能允许使用不同的 HTTP 动词调用特定的方法。

受影响的服务 / 软件

Glance, Icehouse, Juno, Kilo

讨论

Glance 使用 Python 的 assert 语句来验证版本 1 和 2 REST 接口中某些镜像端点的 HTTP 方法。在 Glance 使用 Python 优化启用(通过使用 -O 命令行选项)的情况下,这些 assert 语句将不会被评估。在这种情况下,对于请求的端点,HTTP 动词将不会被检查。

受此影响的端点和方法如下

  • 对 /v1/images/{image_id} 的 GET 请求
  • 对 /v1/images/{image_id} 的 DELETE 请求
  • 对 /v2/images/{image_id}/file 的 GET 请求
  • 对 /v2/images/{image_id} 的 DELETE 请求


这可能导致在某些配置中出现访问违规。例如,如果在 Glance API 前端进行过滤以根据 HTTP 方法和 IP 地址限制查询,攻击者可以通过匹配端点正则表达式并提供不同的 HTTP 动词来绕过此过滤。在这种情况下,攻击者将能够从 Glance 下载或删除镜像。

假设用户被网络过滤限制为仅向 Glance API 端点发送 DELETE 请求。用户可以尝试通过向端点发送精心构造的请求来绕过过滤,该请求实际上会检索命名的镜像。如果已知镜像 ID 为“12345”,则发送到 Glance API 端点“/v2/images/12345/file”的 DELETE 请求最终将匹配 GET URI 模式。这将从 Glance 检索镜像,从而利用该过滤。

建议的操作

截至 Glance Kilo-rc1 版本的发布,此漏洞已得到修复。它也已回溯到 Juno 版本的稳定分支,并将作为 Glance 的 2014.2.4 标签进行官方更新。此问题将不会在 Icehouse 中得到修复。

应将 Kilo 部署更新到 rc1 标签。应将 Juno 部署更新到 2014.2.4 标签。维护 Glance Icehouse 部署的运维人员应考虑升级到 Juno 2014.2.4 版本。

联系方式 / 参考文献