内容提要
Docker Sandboxes 的隔离存在设计例外:共享 Skills 默认以读写方式挂载给Claude、Codex等五种Agent,它们可互相改写技能文件,OpenCode等不支持;宿主机侧MCP Gateway运行本地stdio服务器,Agent可借此绕过microVM边界。这些不算漏洞,但使用前需考虑是否关闭共享Skills或接入本地MCP。
延伸解读
共享 Skills 的信任边界
共享 Skills 默认以读写方式挂载给 Claude、Codex、Copilot、Cursor 和 Droid 五种 Agent,它们共用同一份宿主机目录,可互相改写技能文件。这意味着这些 sandbox 处于同一信任边界内,并非 microVM 隔离失效,而是该挂载本身就在隔离之外。若需严格隔离,可使用 --no-share-skills 参数关闭共享。
OpenCode 等 Agent 的例外
OpenCode、Gemini、Kiro 虽被 sbx 识别为受支持的 agent,但共享 Skills 的挂载表并未包含它们。实测显示,OpenCode sandbox 中不存在 .agents 目录,尽管该目录可被 sbx skills import 识别。这并非文档遗漏,而是代码中就没有相关字符串常量。因此,使用这些 Agent 时,共享 Skills 边界默认不成立,无需额外关闭。
宿主机 MCP 的隔离盲区
MCP Gateway 运行在宿主机侧,本地 stdio 类型的 MCP Server 实际在开发机上执行,而非 microVM 内。Agent 通过此类 MCP 调用的能力可绕过 microVM 边界,触及宿主机资源。这属于设计上的例外,而非漏洞。使用前需评估 MCP Server 的权限范围,避免意外暴露敏感操作。
Q&A
Docker Sandboxes 的隔离例外有哪些?
Docker Sandboxes 的隔离例外主要有两个:一是共享 Skills,默认以读写方式挂载给 Claude、Codex、Copilot、Cursor 和 Droid 五种 Agent,它们可以互相改写技能文件;二是宿主机侧的 MCP Gateway,本地 stdio 类型的 MCP Server 实际运行在宿主机上,Agent 可以借此绕过 microVM 边界。
哪些 Agent 支持共享 Skills?OpenCode 支持吗?
共享 Skills 支持 Claude、Codex、Copilot、Cursor 和 Droid 五种 Agent。OpenCode 不支持,尽管它自身有能力读取共享目录,但 Docker 没有为其挂载。
共享 Skills 的挂载路径是什么?
共享 Skills 的挂载路径因 Agent 而异:Claude 挂载到 /home/agent/.claude/skills,Codex 挂载到 /home/agent/.agents/skills,Copilot 挂载到 /home/agent/.copilot/skills,Cursor 挂载到 /home/agent/.cursor/skills,Droid 挂载到 /home/agent/.factory/skills。
如何关闭共享 Skills?
可以使用 sbx run --no-share-skills 命令来关闭共享 Skills,该参数适用于所有五种受支持的 Agent。
宿主机 MCP Gateway 是如何工作的?
Docker 的 MCP Gateway 运行在宿主机侧,不在 microVM 中。当添加本地 stdio 类型的 MCP Server 时,该进程实际运行在宿主机上,Agent 通过它调用的能力可以绕过 microVM 边界。
共享 Skills 的隔离例外有什么安全影响?
共享 Skills 的隔离例外意味着多个 sandbox 共用同一份可读写的技能文件,Agent 可以互相改写技能内容,因此这些 sandbox 处于同一个信任边界内。如果担心安全问题,建议使用 --no-share-skills 参数关闭共享 Skills。
OpenCode 和 Gemini 为什么不支持共享 Skills?
根据实测和二进制分析,Docker 的共享 Skills 挂载表只包含 Claude、Codex、Copilot、Cursor 和 Droid,没有为 OpenCode、Gemini 和 Kiro 提供挂载。尽管这些 Agent 自身有能力读取共享目录,但 Docker 未将其纳入例外机制。