Ollama在拉取tensor模型时存在重定向漏洞,攻击者可通过恶意模型manifest将请求重定向至云元数据端点等内部服务,无需认证即可利用。
Ollama 在拉取 tensor 模型时可以被诱导调用内部主机。攻击者控制的镜像仓库可以返回一个 tensor 层清单,其 blob 请求会被重定向到私有地址,包括云元数据端点。拉取 API 不需要受害者登录。
这是继此前 Ollama 下载漏洞 CVE-2026-5530 之后的又一条重定向路径。早期的修复在 server/download.go 中添加了重定向检查,但 tensor 模型使用的是独立的 x/transfer/ 下载器。在当前 v0.33.2 源码中,resolve() 接受跨主机的 Location 并将其返回给下载客户端。
当客户端请求 Ollama 拉取模型时,服务器会获取模型清单,然后下载其各层。Tensor 层通过 x/transfer/download.go 处理。其重定向循环将 blob 端点的 302、303 或 307 响应视为新 URL。如果该 URL 的主机不同,代码会直接返回它,而不检查目标是否为私有地址、回环地址、链路本地地址或其他内部地址。
因此,攻击者只需要拥有一个可以控制的镜像仓库或模型引用,而不需要有效的 Ollama 账户。他们的清单可以将一个 tensor blob 指向一个返回重定向到 http://169.254.169.254/latest/meta-data/ 的服务器(这是 Ollama 主机私有网络上的服务)或其他可达的内部地址。下载器随后发出被重定向的 GET 请求。问题报告者验证了 Ollama 容器向内部监听器发出的重复请求,这些请求来自内置的重试机制。
Ollama 的非 tensor 下载路径现在安装了一个 CheckRedirect 回调函数,允许同主机重定向,并在遇到第一个不同主机名时停止。该防护在 server/download.go 中。它没有被 tensor transfer 包共享。Tensor 路径使用自己手动处理重定向,在 v0.33.2 标签中仍然存在不安全的跨主机返回逻辑。
两个上游修复参考了这个问题。PR #17082 提议拒绝本地、私有和链路本地目标,包括 DNS 重绑定和代理情况。PR #18021 添加了一个重定向防护,在 DNS 验证失败时关闭式失败。这两个 PR 在发布时均为开放状态且未合并。
目前尚无打过补丁的 Ollama 版本可用。最新的发布页面标注的是 v0.33.2,而该易受攻击的重定向逻辑在该标签和 main 分支上仍然存在。在修复版本发布之前,请将远程模型拉取视为服务器端网络访问功能:
不要让不受信任的用户向 Ollama 服务器提交任意模型引用。
限制 Ollama 进程的出站流量。在主机或容器网络边界处阻止云元数据地址、回环地址、RFC 1918 范围、链路本地范围以及其他内部目标。
优先使用精心维护的内部镜像仓库并将其主机名列入白名单。这会减少暴露,但不能替代出口过滤。
监控 Ollama 日志和网络遥测,查找拉取请求之后紧跟的对私有或链路本地地址的连接。
在批准拉取之前检查安装,请运行 ollama --version 并与供应商的发布说明进行对比。不要将 v0.33.2 视为已修复此问题。源码构建也应检查 x/transfer/download.go 中是否有重定向防护,而不仅仅是检查 server/download.go 中较旧的防护。
这并非直接的 Ollama shell 接管,也不意味着每个 Ollama 部署都可以从公共互联网访问。攻击者仍然需要受害者服务器来处理其控制的模型引用或镜像仓库,而影响程度取决于 Ollama 主机能访问到什么以及其网络返回什么。
如果 Ollama 运行在云凭据、内部 API 或其他敏感服务旁边,其模型拉取器应被视为网络化服务。现在真正重要的控制手段是出口策略:来自不受信任的 tensor 清单中的重定向不能将模型下载变成对主机私有网络的请求。
源码记录可在 HOL Guard 中找到。主要技术参考包括 Ollama issue、v0.33.2 下载器源码和 CNA advisory。