jasonmiao0511-hue/modelscan-pickle-bypass-poc
GitHub: jasonmiao0511-hue/modelscan-pickle-bypass-poc
该 PoC 证明了 modelscan <= 0.8.5 因黑名单缺失 marshal 和 types 模块,可被恶意 Pickle 文件绕过检测并实现远程代码执行。
Stars: 0 | Forks: 0
# modelscan Pickle 绕过 PoC
## 摘要
证明了 `modelscan` (<= 0.8.5) 可以被恶意 `.pkl` 文件绕过,
因为它的 `unsafe_globals` 黑名单中缺少 `marshal` 和 `types` 模块。
## 受影响范围
- modelscan <= 0.8.5
- Python 3.8+(所有使用 pickle 的版本)
## 复现
```
pip install modelscan
# 步骤 1:扫描报告“No issues”(BYPASSED)
modelscan scan -p rce_payload.pkl
# 步骤 2:加载文件执行任意代码
python -c "import pickle; pickle.load(open('rce_payload.pkl','rb'))"
# 检查:cat pwned_p4.txt -> PWNED_P4
```
## 攻击链
该 pickle 使用 `types.FunctionType(marshal.loads(base64.b64decode(\"...\")), {})()`
作为其 `__reduce__` 目标。`types`、`marshal` 和 `base64` 模块
不在 modelscan 的 `unsafe_globals` 黑名单中,因此扫描会静默通过。
加载时:
1. `base64.b64decode(\"...\")` 解码预编译的 Python 字节码
2. `marshal.loads(bytecode)` 将其反序列化为代码对象
3. `types.FunctionType(code, {})` 构建一个可调用对象
4. 调用该函数将执行内嵌的 shell 命令
## 文件
- `rce_payload.pkl` — 恶意 Pickle PoC 文件(约 100 字节)
- `rce_payload.py` — 生成脚本(Python)
- `README.md` — 本文件
## 披露信息
- 发现者:jasonmiao0511-hue
- 报告途径:huntr.com 模型格式漏洞表单
- 日期:2026-06-15
- 相关:另请参阅 [modelscan-joblib-bypass-poc](https://github.com/jasonmiao0511-hue/modelscan-joblib-bypass-poc) 了解通过 joblib 实现的相同绕过方式
标签:AI安全, Apex, Chat Copilot, Go语言工具, 反序列化, 机器学习, 漏洞复现, 逆向工具