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, 安全, 实时告警, 暴力破解, 编程工具, 超时处理, 远程代码执行, 逆向工具