k4w-wak/ollama-silent-patches
GitHub: k4w-wak/ollama-silent-patches
该项目是一份针对 Ollama 的安全漏洞完整披露报告,详细记录了七个严重漏洞并提供多个 PoC 与 CVE 编号。
Stars: 1 | Forks: 0
# 🦙🔒 Ollama 静默补丁 — 完整披露
### 7 个严重漏洞 • 3 个 CVE • 15+ 个 PoC • 25K–175K+ 个暴露实例
[](https://nvd.nist.gov/vuln/detail/CVE-2026-42248)
[](https://nvd.nist.gov/vuln/detail/CVE-2026-42249)
[](https://nvd.nist.gov/vuln/detail/CVE-2026-7482)
[](https://nvd.nist.gov/vuln/detail/CVE-2026-5757)
[](https://nvd.nist.gov/vuln/detail/CVE-2026-5530)
[](LICENSE)
[](https://github.com/ollama/ollama)
**📰 媒体报道:** [Help Net Security](https://www.helpnetsecurity.com/2026/05/05/ollama-windows-vulnerabilities-cve-2026-42248-cve-2026-42249/) • [The Hacker News](https://thehackernews.com/2026/05/ollama-out-of-bounds-read-vulnerability.html) • [CERT/CC VU#518910](https://kb.cert.org/vuls/id/518910) • [CERT Polska](https://cert.pl/en/posts/2026/04/CVE-2026-42248/) • [CSO Online](https://www.csoonline.com/article/4168584/ollama-vulnerability-highlights-danger-of-ai-frameworks-with-unrestricted-access.html) • [Cybersecurity News](https://cybersecuritynews.com/ollama-vulnerability-exposes-servers/)
**📖 完整报告:** [Medium — k4w_wak](https://medium.com/@k4w_wak_21591)
## TL;DR — 为什么你应该关注
| 影响 | 详情 |
|--------|---------|
| 🔴 **通过更新流程实现 RCE** | `ollama pull` 可执行任意代码 (CVE-2026-42248/9) |
| 🔴 **SSRF/钓鱼** | URL 策略绕过导致 Ollama 获取内部资源 (CVE-2026-5530) |
| 🔴 **内存泄漏** | 3 个未经身份验证的 API 调用即可转储 **整个进程内存** — API 密钥、prompt、凭据 (CVE-2026-5757) |
| 🔴 **"Bleeding Llama"** | 未经身份验证的堆读取从 30 万+ 实例中泄漏凭据 (CVE-2026-7482) |
| 🟡 **配置劫持** | Codex 启动配置接管 |
| 🟡 **SDK 泄漏** | macOS SDK 目标信息泄露 |
| 🔴 **15+ 个 GGUF 解析器漏洞** | 模型解析器中未修补的整数溢出 |
**25,000–175,000+ 个 Ollama 实例公开暴露。大多数未打补丁。**
## 漏洞公告摘要
Ollama 是全球最受欢迎的本地 LLM 运行时(GitHub Star 数 173K+,公开暴露实例 25K+),它存在一种**系统性的模式:在不发布 CVE、安全公告或致谢研究人员的情况下,静默修补安全漏洞**。本披露记录了:
- **7 个主要发现**(从 10 个重构而来 — Regex 绕过合并入 SSRF;CVE-2026-5757 和 CVE-2026-7482 分离并阐明;根据 6 月 8 日的深入研究添加了 CVE-2026-5530)
- **15+ 个额外的未修补 GGUF 解析器漏洞**
- Ollama 团队的**“拒绝 → 修补 → 沉默”循环**
- 尽管 Ollama 发布了 15+ 个与安全相关的补丁,但发布了**零 CVE、零公告、零致谢**
- **打压研究人员的模式**(5+ 名研究人员被无视或拒绝)
- Ollama 团队的**“拒绝 → 修补 → 沉默”循环**
- 尽管 Ollama 发布了 15+ 个与安全相关的补丁,但发布了**零 CVE、零公告、零致谢**
- **Huntr.com 证据:38/40 份漏洞赏金报告被拒绝,0 份被接受,0 份被修复** — 规模化的相同模式
- Ollama 团队的**“拒绝 → 修补 → 沉默”循环**
- 尽管 Ollama 发布了 15+ 个与安全相关的补丁,但发布了**零 CVE、零公告、零致谢**
## 漏洞发现摘要(已重新校准)
| # | 发现 | CVE/PR | CVSS v3.1 | 严重性 | 状态 |
|---|---------|--------|-----------|----------|--------|
| 1 | 通过 URL 策略的 SSRF/钓鱼(包括 Regex 绕过) | PR #16380/#16436 | **7.1** | 高危 | ✅ 已在 v0.30.2 修复 (静默) |
| 2 | 更新流程 RCE | CVE-2026-42248/9, PR #16100 | **7.5** | 高危 | ✅ 已在 v0.30.0 修复 (静默) |
| 3 | Codex 启动配置劫持 | PR #16437 | **7.1** | 高危 | ✅ 已在 v0.30.2 修复 (半静默) |
| 4 | macOS SDK 目标泄漏 | PR #16053 | **INFO** | 信息级 | ✅ 已在 v0.30.0 修复 (静默) |
| 5 | CVE-2026-5757 — GGUF 内存泄漏 | CVE-2026-5757 | **5.3** (v4.0) / **7.5** (v3.1, 如果 /api/create 开放) | 中高危 | 🔴 未修补 |
| 6 | CVE-2026-7482 "Bleeding Llama" | CVE-2026-7482 | **7.5** | 高危 | ✅ 已在 v0.17.1 修复 (静默) |
| 7 | CVE-2026-5530 — 通过 skipVerify 冲突导致的 SSRF | CVE-2026-5530 | **6.3** | 中危 | 🔴 未修补 (修复 PR 被无视 2 个月) |
## 发现 1:通过 URL 策略导致的 SSRF/钓鱼 (高危 — CVSS 7.1)
| 字段 | 值 |
|-------|-------|
| **PR** | [#16380](https://github.com/ollama/ollama/pull/16380) — "Harden app markdown URL handling" |
| **CVSS v3.1** | **7.1** (AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:L/A:N) |
| **类型** | SSRF / 间接 Prompt 注入 → 钓鱼覆盖 |
| **作者** | dhiltgen (Daniel Hiltgen) |
| **合并日期** | 2026-06-02 |
| **修复于** | v0.30.2 |
| **发布说明** | ❌ **未提及** |
| **CVE** | ❌ 无 |
### 漏洞描述
Ollama 的 agent 工具(`BrowserOpen`、`WebFetch`、`WebSearch`)以前允许 AI 模型作为工具参数访问**任何 URL** — 包括通过间接 Prompt 注入注入的、由攻击者控制的 URL。
攻击者可以:
1. 在网页上嵌入隐藏的 Prompt 注入(1pt 白底白字文本)
2. AI 模型读取该页面,获取注入的指令
3. 模型调用 `WebFetch` 或 `BrowserOpen`,并将攻击者的 URL 作为参数
4. 攻击者接收请求 (SSRF) 或提供一个覆盖 Ollama UI 的钓鱼页面
这是对 PromptArmor 披露(2025 年 12 月)的**直接修复**,而 Ollama 对此**没有做出回应**。
### 修复方案 (PR #16380)
**新文件:** `app/tools/url_policy.go` (58 行)
```
type directURLContextKey struct{}
var directURLPattern = regexp.MustCompile(`https?://[^\s<>"']+`)
func WithAllowedDirectURLs(ctx context.Context, text string) context.Context {
allowed := make(map[string]struct{})
for _, match := range directURLPattern.FindAllString(text, -1) {
addAllowedDirectURLToMap(allowed, match)
}
return context.WithValue(ctx, directURLContextKey{}, allowed)
}
func allowedDirectURL(ctx context.Context, raw string) bool {
// Only URLs explicitly provided by the user or returned by web_search are allowed
}
```
**修改:** `app/tools/browser.go`、`app/tools/web_fetch.go`、`app/tools/web_search.go` — 现在在执行前都会检查 `allowedDirectURL()`。
**新测试:** `app/tools/browser_test.go` — `TestBrowserOpen_RejectsUncachedDirectURL`
**新增:** `StreamingMarkdownContent.test.tsx` — 移除了 `raw` rehype 插件,防止通过 `
标签:AI安全, AI风险缓解, Chat Copilot, CISA项目, LLM评估, Ollama, PoC, SSRF, Web报告查看器, 代码执行, 日志审计, 暴力破解, 漏洞披露, 防御加固