跳转到内容

安全

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 上的服务

这就是需要权衡的暴露面:不是远程攻击者,而是你机器上的其它进程。未设密码的实例在设计上就是 本机可见的;如果“仅本机”对你来说不够,就设上密码。由于该服务是需要手动开启、且按设计只绑定回环地址的, 它在这种配置下的行为不构成漏洞。

类别 理由
开启服务端后的访问 启用服务端模式后,API 可被访问是预期行为
权限系统的“逃逸” 那套系统本身不是沙箱(见上)。内核级沙箱是另一套独立机制
请求了沙箱却未生效 已记录的行为:on_unavailable 默认 "warn";设为 "fail" 可拒绝
LLM 供应商的数据处理 发送给你所配置供应商的数据由他们的策略约束
MCP 服务端行为 你自己配置的外部 MCP 服务端不在我们的信任边界内
恶意配置文件 配置由你自己掌控,修改它不构成攻击途径

请使用 GitHub Security Advisory 的 “Report a Vulnerability” 入口。在公开之前,它一直是私密的。

你会收到一封回信说明后续如何推进,之后也会同步修复的进展。这里没有安全团队,也没有承诺的响应时限 —— 如果一周内没有收到答复,请在同一线程里再问一次。


Synced from oxdingzg/miao@efb8c00.