安全
miao 是运行在你本机的 AI 编程助手。它提供一套代理系统,可访问能力很强的工具,包括执行 shell、 操作文件和访问网络。
默认情况下,miao 不对代理做沙箱隔离。 权限系统是一项体验功能 —— 它在执行命令、写入文件等操作前 请求确认,帮助你了解代理在做什么。但它不是用来提供安全隔离的。
此外还有一个需要手动开启的内核级沙箱,用于 V2 的 bash 工具;不开启则不生效。它在 macOS 上为
sandbox-exec 构建 seatbelt 策略,在 Linux 上应用 Landlock;miao-sandbox 在 Windows 上报告没有
可用后端。
{ "sandbox": { "mode": "workspace-write", "network": true } }MIAO_SANDBOX=1 与 MIAO_SANDBOX_DENY_NETWORK=1 会覆盖配置。有三条性质属于威胁模型,必须写明:
- 不开启就不生效。
mode默认为"off"。 - 它默认“失败即放行”。 请求了沙箱但没有可用后端时,
on_unavailable默认为"warn",命令会在 没有沙箱的情况下执行。想让它直接拒绝,设为"fail"。 workspace-write限制的是写入,不是读取。 写入被限制在活动 Location、命令的工作目录、临时 目录、writable_roots,以及在被拦截后你批准过的路径(随后会用新增的目录重跑该命令)。网络默认 允许,除非显式禁止。
如果你需要真正的隔离,请在 Docker 容器或虚拟机中运行 miao。
服务端模式需要手动开启:用 miao serve 启动,聊天桥接则是 miao remote;不启动时它不在运行。
该服务只监听 127.0.0.1,也不通过 mDNS 对外广播,因此它只能从本机访问,而不是从网络上。
鉴权方式是 HTTP Basic Auth,通过设置 MIAO_SERVER_PASSWORD 开启。不设置时服务照常启动,并且会
自己说明这一点:
MIAO_SERVER_PASSWORD 没有设置,本机其它进程可以不经鉴权访问 127.0.0.1 上的服务
这就是需要权衡的暴露面:不是远程攻击者,而是你机器上的其它进程。未设密码的实例在设计上就是 本机可见的;如果“仅本机”对你来说不够,就设上密码。由于该服务是需要手动开启、且按设计只绑定回环地址的, 它在这种配置下的行为不构成漏洞。
不在受理范围内
Section titled “不在受理范围内”| 类别 | 理由 |
|---|---|
| 开启服务端后的访问 | 启用服务端模式后,API 可被访问是预期行为 |
| 权限系统的“逃逸” | 那套系统本身不是沙箱(见上)。内核级沙箱是另一套独立机制 |
| 请求了沙箱却未生效 | 已记录的行为:on_unavailable 默认 "warn";设为 "fail" 可拒绝 |
| LLM 供应商的数据处理 | 发送给你所配置供应商的数据由他们的策略约束 |
| MCP 服务端行为 | 你自己配置的外部 MCP 服务端不在我们的信任边界内 |
| 恶意配置文件 | 配置由你自己掌控,修改它不构成攻击途径 |
报告安全问题
Section titled “报告安全问题”请使用 GitHub Security Advisory 的 “Report a Vulnerability” 入口。在公开之前,它一直是私密的。
你会收到一封回信说明后续如何推进,之后也会同步修复的进展。这里没有安全团队,也没有承诺的响应时限 —— 如果一周内没有收到答复,请在同一线程里再问一次。
Synced from oxdingzg/miao@efb8c00.