问答
发起
提问
文章
攻防
活动
Toggle navigation
首页
(current)
问答
商城
实战攻防技术
漏洞分析与复现
NEW
活动
摸鱼办
搜索
登录
注册
CNVD-2025-04094 Ollama 未授权访问漏洞
漏洞分析
DeepSeek 本地化部署有风险!Ollama 是一个开源的大语言模型(LLM)运行环境和工具集,旨在帮助开发者轻松部署、管理和使用模型(如 DeepSeek 等)。 Ollama 存在未授权访问漏洞,攻击者可以直接访问敏感接口进行读取、下载或删除私有模型文件,或滥用模型推理资源等高危操作。
描述 -- Ollama 是一个开源的大语言模型(LLM)运行环境和工具集,旨在帮助开发者轻松部署、管理和使用模型(如 DeepSeek 等)。 DeepSeek本地化部署基本都是采用Ollama进行部署,然而Ollama存在着至今没有修复(文末含处置建议)的高危漏洞。攻击者可以直接访问敏感接口进行读取、下载或删除私有模型文件,或滥用模型推理资源等高危操作。 漏洞分析 ---- Ollama是利用go语言写的web应用。一般接口的认证会放在路由前边。先来看一下服务端的主函数。 首先来到服务端的开始处,并没有认证相关的代码。`http.Handle("/", s.GenerateRoutes())`用来注册路由,跟进看一下具体逻辑。  可以看到,唯一的验证是验证**请求来源**。其实大部分开源大模型是要部署在公网上的,所以会开放外网访问。  该应用注册了如下接口。  默认情况下,访问部署后的应用,页面会显示“Ollama is running”。对应上图1168行。  接着再看一看接口函数内部是否有权限验证。这里看一下`/api/tags`接口,这个接口列出 Ollama 提供的 LLM 模型。 该接口对应的处理函数是`ListHandler`,可以看到,未进行任何权限,直接返回模型。 func (s \*Server) ListHandler(c \*gin.Context) { ms, err :\\= Manifests(true) if err != nil { c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) return } models :\\= \[\]api.ListModelResponse{} for n, m :\\= range ms { var cf ConfigV2 if m.Config.Digest != "" { f, err :\\= m.Config.Open() if err != nil { slog.Warn("bad manifest filepath", "name", n, "error", err) continue } defer f.Close() if err :\\= json.NewDecoder(f).Decode(&cf); err != nil { slog.Warn("bad manifest config", "name", n, "error", err) continue } } // tag should never be masked models \\= append(models, api.ListModelResponse{ Model: n.DisplayShortest(), Name: n.DisplayShortest(), Size: m.Size(), Digest: m.digest, ModifiedAt: m.fi.ModTime(), Details: api.ModelDetails{ Format: cf.ModelFormat, Family: cf.ModelFamily, Families: cf.ModelFamilies, ParameterSize: cf.ModelType, QuantizationLevel: cf.FileType, }, }) } slices.SortStableFunc(models, func(i, j api.ListModelResponse) int { // most recently modified first return cmp.Compare(j.ModifiedAt.Unix(), i.ModifiedAt.Unix()) }) c.JSON(http.StatusOK, api.ListResponse{Models: models}) } 大模型拉取函数,也就是下载任意模型,也没有进行任何权限验证。  根据模型名字删除指定模型  由此可见,导致攻击者只需访问服务端口(默认 11434)即可调用敏感功能接口,进而读取、下载或删除私有模型文件,或滥用模型推理资源等。 由此可见,我们可以通过未授权访问任意接口,进行操作。 漏洞复现 ---- 直接请求api路径即可,这里查看都有哪些模型 `curl http://127.0.0.1:11434/api/tags`  处置建议 ---- ### 方法一 最好的修复方法肯定是修改代码逻辑,给 Ollama API 添加认证的需求。当然这需要原作者的配合。 ### 方法二 对web服务器配置进行修改,这里拿nginx进行举例: 对访问接口的请求,添加一个简单的密码验证。 server { listen 11434; location / { auth\_basic "Restricted Content"; auth\_basic\_user\_file /etc/nginx/.htpasswd; proxy\_pass <http://192.168.1.100:11434>; proxy\_set\_header Host $host; proxy\_set\_header X-Real-IP $remote\_addr; proxy\_set\_header X-Forwarded-For $proxy\_add\_x\_forwarded\_for; } }
发表于 2025-03-03 16:46:02
阅读 ( 1356 )
分类:
Web应用
1 推荐
收藏
1 条评论
c铃儿响叮当
1秒前
感谢分享1111
请先
登录
后评论
请先
登录
后评论
Harper Scott
7 篇文章
×
发送私信
请先
登录
后发送私信
×
举报此文章
垃圾广告信息:
广告、推广、测试等内容
违规内容:
色情、暴力、血腥、敏感信息等内容
不友善内容:
人身攻击、挑衅辱骂、恶意行为
其他原因:
请补充说明
举报原因:
×
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!