CVE-2024-37032 Ollama远程代码执行漏洞分析报告
字数 1920 2025-08-29 22:41:10

Ollama远程代码执行漏洞(CVE-2024-37032)深度分析与防护指南

1. 漏洞概述

漏洞基本信息

  • 编号:CVE-2024-37032
  • 类型:远程代码执行(RCE)
  • 发现时间:2024年5月5日
  • 公开时间:2024年6月24日
  • 严重等级:高危(CVSS 3.1评分9.1)
  • 影响版本:Ollama < 0.1.34
  • 修复版本:Ollama 0.1.34及以上

2. 受影响产品介绍

Ollama是一个开源工具,专为在本地环境中运行和定制大型语言模型(LLM)而设计。它提供:

  • 简单高效的接口用于创建、运行和管理AI模型
  • 丰富的预构建模型库
  • 易于集成到各种应用程序中
  • 目标是简化大型语言模型的部署和交互

3. 漏洞技术细节

3.1 漏洞原理

该漏洞源于Ollama对digest字段验证不严格,导致路径遍历攻击可能。攻击者可通过构造恶意digest字段实现:

  • 任意文件读取
  • 任意文件写入
  • 最终可能导致远程代码执行

3.2 漏洞利用机制

攻击流程分为四个阶段:

  1. 初始请求阶段

    • 攻击者向Ollama的/api/pull端点发送请求
    • 请求指向攻击者控制的恶意服务器
    • 使用insecure: true参数绕过SSL验证
  2. 恶意响应阶段

    • 恶意服务器返回特制的manifest文件
    • digest字段包含路径遍历payload(如../../../../etc/passwd)
  3. 漏洞触发阶段

    • Ollama处理manifest时不验证digest格式
    • 路径遍历序列被当作合法路径处理
    • 系统访问预期目录外的文件
  4. 数据泄露阶段

    • 攻击者通过/api/push请求获取敏感文件内容

3.3 关键脆弱代码分析

漏洞存在于modelpath.go文件的GetBlobsPath函数中:

// 漏洞版本代码(v0.1.33及之前)
func GetBlobsPath(digest string) string {
    return filepath.Join(blobsDir, digest) // 直接拼接路径,无验证
}

问题点:

  1. 未验证digest是否符合SHA256格式(64位十六进制)
  2. 直接将未过滤的输入拼接到文件路径
  3. 允许路径遍历序列(如../)生效

3.4 修复方案分析

修复提交:2a21363bb756a7341d3d577f098583865bd7603f

修复方法:

// 修复后代码(v0.1.34)
func GetBlobsPath(digest string) (string, error) {
    if !sha256DigestRegex.MatchString(digest) {
        return "", fmt.Errorf("invalid digest format")
    }
    return filepath.Join(blobsDir, digest), nil
}

修复关键点:

  1. 引入正则验证digest格式(^[a-f0-9]{64}$)
  2. 确保输入为合法SHA256哈希值
  3. 阻止路径遍历序列注入

4. 漏洞影响评估

4.1 影响范围

  • 国内风险资产:约3,955个(关联IP 994个)
  • 全球风险资产:约5,960个(关联IP 1,581个)

4.2 潜在危害

  1. 数据泄露:读取系统敏感文件(/etc/passwd等)
  2. 系统破坏:写入恶意文件导致服务中断
  3. 权限提升:获取系统高级权限
  4. 横向渗透:作为内网渗透跳板

5. 漏洞复现指南

5.1 环境搭建

# 搭建漏洞环境
docker run -d -p 11434:11434 ollama/ollama:0.1.33

5.2 验证步骤

  1. 克隆利用代码:

    git clone https://github.com/Bi0x/CVE-2024-37032.git
    
  2. 修改PoC脚本:

    • 设置poc.pyserver.py中的目标IP
  3. 启动恶意服务器:

    python server.py
    
  4. 执行攻击:

    python poc.py
    
  5. 验证结果:

    • 检查是否读取到目标系统的/etc/passwd

5.3 攻击请求示例

{
  "name": "malicious-registry:5000/exploit",
  "insecure": true
}

6. 防护与缓解措施

6.1 官方修复方案

  1. 立即升级到Ollama 0.1.34或更高版本
  2. 关注官方安全公告和更新

6.2 临时缓解措施

  1. 网络隔离

    • 限制Ollama服务的网络访问
    • 避免暴露在公网
    • 防火墙限制11434端口访问
  2. 权限控制

    • 使用最小权限原则运行Ollama服务
    • 限制文件系统访问权限
  3. 监控措施

    • 监控可疑的API请求
    • 记录异常文件访问行为

6.3 长期安全建议

  1. 安全开发实践

    • 实施严格的输入验证
    • 遵循最小权限原则
    • 定期安全代码审计
  2. 运维安全

    • 建立漏洞监控机制
    • 定期安全评估和渗透测试
    • 制定应急响应计划
  3. 安全意识

    • 加强开发人员安全培训
    • 提高安全编码意识
    • 建立安全开发生命周期(SDLC)

7. 参考资料

  1. Wiz Research Blog - Probllama: Ollama Vulnerability CVE-2024-37032
  2. GitHub Advisory - GHSA-8hqg-whrw-pv92
  3. Ollama Fix Commit
  4. Bi0x/CVE-2024-37032 PoC

附录:技术要点总结

  1. 漏洞根源:缺乏对digest字段的格式验证和路径遍历防护
  2. 利用条件:未认证的Ollama服务+恶意registry服务器
  3. 攻击复杂度:低(无需特殊权限)
  4. 修复关键:严格的SHA256格式验证
  5. 防御核心:输入验证+权限控制+网络隔离

通过全面理解该漏洞的技术细节和防护措施,可以有效防范类似安全风险,确保AI模型服务的安全运行。

Ollama远程代码执行漏洞(CVE-2024-37032)深度分析与防护指南 1. 漏洞概述 漏洞基本信息 : 编号 :CVE-2024-37032 类型 :远程代码执行(RCE) 发现时间 :2024年5月5日 公开时间 :2024年6月24日 严重等级 :高危(CVSS 3.1评分9.1) 影响版本 :Ollama < 0.1.34 修复版本 :Ollama 0.1.34及以上 2. 受影响产品介绍 Ollama是一个开源工具,专为在本地环境中运行和定制大型语言模型(LLM)而设计。它提供: 简单高效的接口用于创建、运行和管理AI模型 丰富的预构建模型库 易于集成到各种应用程序中 目标是简化大型语言模型的部署和交互 3. 漏洞技术细节 3.1 漏洞原理 该漏洞源于Ollama对 digest 字段验证不严格,导致 路径遍历攻击 可能。攻击者可通过构造恶意 digest 字段实现: 任意文件读取 任意文件写入 最终可能导致远程代码执行 3.2 漏洞利用机制 攻击流程分为四个阶段: 初始请求阶段 : 攻击者向Ollama的 /api/pull 端点发送请求 请求指向攻击者控制的恶意服务器 使用 insecure: true 参数绕过SSL验证 恶意响应阶段 : 恶意服务器返回特制的manifest文件 digest 字段包含路径遍历payload(如 ../../../../etc/passwd ) 漏洞触发阶段 : Ollama处理manifest时不验证 digest 格式 路径遍历序列被当作合法路径处理 系统访问预期目录外的文件 数据泄露阶段 : 攻击者通过 /api/push 请求获取敏感文件内容 3.3 关键脆弱代码分析 漏洞存在于 modelpath.go 文件的 GetBlobsPath 函数中: 问题点: 未验证 digest 是否符合SHA256格式(64位十六进制) 直接将未过滤的输入拼接到文件路径 允许路径遍历序列(如 ../ )生效 3.4 修复方案分析 修复提交: 2a21363bb756a7341d3d577f098583865bd7603f 修复方法: 修复关键点: 引入正则验证 digest 格式( ^[a-f0-9]{64}$ ) 确保输入为合法SHA256哈希值 阻止路径遍历序列注入 4. 漏洞影响评估 4.1 影响范围 国内风险资产 :约3,955个(关联IP 994个) 全球风险资产 :约5,960个(关联IP 1,581个) 4.2 潜在危害 数据泄露 :读取系统敏感文件( /etc/passwd 等) 系统破坏 :写入恶意文件导致服务中断 权限提升 :获取系统高级权限 横向渗透 :作为内网渗透跳板 5. 漏洞复现指南 5.1 环境搭建 5.2 验证步骤 克隆利用代码: 修改PoC脚本: 设置 poc.py 和 server.py 中的目标IP 启动恶意服务器: 执行攻击: 验证结果: 检查是否读取到目标系统的 /etc/passwd 5.3 攻击请求示例 6. 防护与缓解措施 6.1 官方修复方案 立即升级到Ollama 0.1.34或更高版本 关注官方安全公告和更新 6.2 临时缓解措施 网络隔离 : 限制Ollama服务的网络访问 避免暴露在公网 防火墙限制11434端口访问 权限控制 : 使用最小权限原则运行Ollama服务 限制文件系统访问权限 监控措施 : 监控可疑的API请求 记录异常文件访问行为 6.3 长期安全建议 安全开发实践 : 实施严格的输入验证 遵循最小权限原则 定期安全代码审计 运维安全 : 建立漏洞监控机制 定期安全评估和渗透测试 制定应急响应计划 安全意识 : 加强开发人员安全培训 提高安全编码意识 建立安全开发生命周期(SDLC) 7. 参考资料 Wiz Research Blog - Probllama: Ollama Vulnerability CVE-2024-37032 GitHub Advisory - GHSA-8hqg-whrw-pv92 Ollama Fix Commit Bi0x/CVE-2024-37032 PoC 附录:技术要点总结 漏洞根源 :缺乏对 digest 字段的格式验证和路径遍历防护 利用条件 :未认证的Ollama服务+恶意registry服务器 攻击复杂度 :低(无需特殊权限) 修复关键 :严格的SHA256格式验证 防御核心 :输入验证+权限控制+网络隔离 通过全面理解该漏洞的技术细节和防护措施,可以有效防范类似安全风险,确保AI模型服务的安全运行。