请不要开公开 issue。用 GitHub 的 Private vulnerability reporting,或邮件联系维护者(见仓库 commits)。
请在报告里说明:受影响的版本、复现步骤、影响面(能否读到本机文件 / 能否执行命令 / 能否让应用崩溃)。
48 小时内会收到首次回复。修复发布前请勿公开细节。
理解下面这几条能省掉很多误报:
- 网关不鉴权,且只监听回环。
127.0.0.1:9000绑定在requiredLocalEndpoint(GatewayHTTPServer.swift:137),填任意 API Key 都能用。这不是漏洞,是设计。 任何能连上本机回环的进程本来就能起自己的推理服务。要对外提供服务请自行加反向代理。 - 引擎运行时是第三方二进制。 pack 从
pack-index.json声明的地址下载,带 sha256 校验。应用只按manifest.json启动它,不解释其余文件。 - WebUI 是随包的本地静态资源,通过
file://加载,不加载远程脚本,也不需要网络请求。
- Swift↔JS 桥是一条无鉴权的原生命令面(
WebViewShell.swift的handle(type:body:))。任何能在 WebUI 里执行脚本的注入点都等价于拿到这些命令:写设置、起停引擎、下载模型、openURL。- 现有防线:
decidePolicyFor只允许加载包内index.html,其余导航一律取消并把 http(s) 交给系统浏览器;openURL与createWebViewWith都只放行 http/https;index.html带 CSP(connect-src 'none',因此被注入的脚本没有外发通道)。绕过其中任何一条都是有效漏洞。
- 现有防线:
- 模型广场展示 Hugging Face 的 README 与仓库元数据。 全部经
esc()转义后渲染;若发现未转义路径即为有效漏洞。 - 引擎日志会进日志页并落盘。 日志内容来自引擎 stdout,属于不可信输入。