Ollama允许删除任意文件漏洞CVE-2025-44779
Ollama是一个开源框架,用于在个人机器上本地运行和管理大型语言模型,专为在本地机器上便捷部署和运行大型语言模型(LLM)设计。
一、基本情况
Ollama是轻量级、用户友好的平台,允许用户轻松下载、配置强大的人工智能模型,如LLaMA和Mistral,并与之交互,无需云基础设施。
Ollama简化的界面和本地优先的方法,使其在人工智能工作流、数据隐私和系统性能进行更多控制的开发人员和研究人员之中特别受欢迎。
栋科技漏洞库关注到Ollama受影响版本存在向/api/pull端点发送特制请求包删除任意文件漏洞,追踪CVE-2025-44779,CVSS 3.1评分6.6。
二、漏洞分析
CVE-2025-44779导致Ollama相关版本HTTP服务器暴露多个 API 端点,每个端点执行不同的操作,这些端点的功能在如下图表有所说明。
使用Docker通过一条命令部署Ollama 0.1.33版本:
1、清单文件
根据Ollama的机制,/api/pull端点默认可以从官方Ollama注册表中拉取镜像。
但是,也可以从自托管的私有服务器拉取镜像。经过研究发现,在拉取请求时指定以下参数,可以从私有服务器中获取镜像。
10.211.55.3:11434是Ollama客户端的地址。
192.168.200.237是自定义私人服务器的地址。
POST /api/pull HTTP/1.1
Host: 10.211.55.3:11434
Content-Type: application/json
Content-Length: 77
{
"name": "192.168.200.237/tianweng-anquan/a1batr0ss",
"insecure": true
}
首先,我们使用 FastAPI 来设置一个私人服务器,并查看当我们发送上面的请求包时会发生什么。
从 fastapi 导入 FastAPI, Request, Response
app = FastAPI()
if __name__ == "__main__":import uvicorn uvicorn.run(app, host='0.0.0.0', port=80)
ollama pull <model>我们发现响应数据包报告了一个错误:拉取镜像时未找到清单文件。
这是Ollama的机制:当你运行时,Ollama客户端首先向注册服务器发送请求以查询模型的元数据。
服务器还报告了一个错误,显示一个地址:/v2/tianweng-anquan/a1batr0ss/manifests/latest,该地址必须是向注册服务器请求清单URL。
我们无法避免讨论这里的清单文件。以下是典型的清单文件:
配置(容器配置层): 存储Docker容器的元数据,包括运行时配置、环境变量、Entrypoint、CMD、工作目录等。
图层(图像图层数据): 存储Docker镜像的文件系统图层(RootFS)。每个图层代表一个文件更改,例如COPY或RUN指令的结果。
摘要: 原来的目的是 digest 以验证 config 和 layers 部分的哈希值。
{
"schemaVersion": 2,
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"config": {
"mediaType": "application/vnd.docker.container.image.v1+json",
"digest": "sha256:9c46aefae6c6d1e9c1c1b25b8a6f8e67a10bffbdf1b5a82842a527776b8f447a",
"size": 7023
},
"layers": [
{
"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
"digest": "sha256:3a2e9a64b4e5e2b77f9a6f2bb2e9235db934e6d3a9c0b1d3837cd8b24d3f6dfb",
"size": 2794576
},
{
"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
"digest": "sha256:5b8c05cddf924c0c3e5f5a5e3f0b4a2c1b96a8a5ff8b2e99a3d5372c5f1e3a28",
"size": 1484567
}
]
}
2、构建恶意服务器
Ollama客户端拉取镜像前先向恶意注册服务器/v2/tianweng-anquan/a1batr0ss/manifests/latest端点发送请求检索元数据(即清单文件)。
通过我们的研究,我们发现Ollama客户端遍历元数据中的每个digest部分的layers值来请求和验证它们,然后尝试保存它们
请注意,digest部分的第一个layers不完全保存。
根据Ollama机制,它还会删除该路径上已存在文件digest保存过程中,若目标路径上已存在一个文件,Ollama将抛出一个摘要不匹配错误。
在报告错误时,
三、POC概念验证 POC
在/file/targetFile服务器上创建文件。
部署一个伪装成私有注册服务器的恶意服务器。
发送一个精心构造的数据包到/api/pull端点,其中10.211.55.3:11434是Ollama服务地址,192.168.200.237是精心构造的恶意服务器地址。
再次检查 /file/targetFile Ollama 服务器上的文件,发现它已被删除。
四、影响范围
Ollama < = 0.1.33
五、修复建议
Ollama > = 0.1.33
六、参考链接
[/lv]https://a1batr0ss.top/2025/08/06/CVE-2025-44779-Ollama-arbitrary-file-deletion[/lv]