Unbounded / attacker-controlled memory allocation in the GGUF metadata parser → remote denial of service (unrecoverable server crash) from a

用户运行 Ollama 服务器时,通过 POST /api/create 、 POST /api/blobs/:digest 或 POST /api/pull 接口处理来自攻击者(或恶意仓库)的微小 GGUF 模型文件。服务器在解析文件元数据时会直接使用文件中声明的长度/计数字段作为内存分配大小,从

Unbounded / attacker-controlled memory allocation in the GGUF metadata parser → remote denial of service (unrecoverable server crash) from a

Unbounded / attacker-controlled memory allocation in the GGUF metadata parser → remote denial of service (unrecoverable server crash) from a

快速结论:该问题出现在 Ollama 服务器解析恶意构造的 GGUF 模型文件时,攻击者可通过一个几十字节的文件触发服务器内存耗尽或致命崩溃。优先排查是否使用了包含修复的版本,并建议不要信任非官方来源的模型文件。

问题场景

用户运行 Ollama 服务器时,通过 POST /api/createPOST /api/blobs/:digestPOST /api/pull 接口处理来自攻击者(或恶意仓库)的微小 GGUF 模型文件。服务器在解析文件元数据时会直接使用文件中声明的长度/计数字段作为内存分配大小,从而触发致命错误。

报错原文

fatal error: runtime: out of memory
makeslice: len out of range
slice bounds out of range

原因分析

可能原因:Ollama 的 GGUF 解析器(fs/ggml/gguf.go)在读取字符串长度、张量维度计数和元数据数组计数时,未对声明的长度值进行文件剩余字节数的验证。攻击者可以在小文件中声明极大的长度(例如数十亿字节),导致:

  • 直接通过 make 分配远超可用内存的大块内存 → runtime: out of memory(不可恢复的 Go 运行时致命错误)
  • 将无符号整数转换为有符号整数后变为负数 → slice bounds out of range panic
  • 分配刚好触发 OOM killer 的内存 → 进程被系统杀死

环境排查

  • Ollama 版本:需确认是否低于包含修复的版本(修复由 #17062 合入,将在下一个 release 中发布)
  • 运行模式:服务器模式(后台运行)时受影响;直接命令行运行模型也可能受影响
  • 操作系统:Go 运行时在 OOM 时无法被 recover() 捕获,所有系统均受此漏洞影响

解决步骤

  1. 更新 Ollama 到包含修复的版本(修复已合入 #17062,等待下一个 release)
  2. 在更新前,避免从不受信任的来源上传 GGUF 文件或拉取模型
  3. 监控服务器内存使用情况,设置系统级内存限制(例如 cgroup)作为缓解措施

验证方法

确认 Ollama 版本号在修复发布后,并通过 POST /api/create 上传一个正常的小型 GGUF 文件,观察是否会触发 OOM 或 panic。

参考来源

ollama/ollama #17042

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

celebrityanime
celebrityanime
文章: 12327

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注