跳转到内容

Windows 沙箱安全详情

有关 Codex 中沙箱的总体背景,请参见 sandbox.md

实现概览

当命令通过 codex sandbox windows … 运行时(或当 CLI/TUI 在沙箱化轮次中进程中调用相同的 crate 时),启动器配置受限的 Windows 令牌和限制在声明的工作区根目录范围内的允许列表策略。写入在这些根目录之外的任何地方都会被阻止(当请求工作区写入模式时加上 %TEMP%),常见的逃逸向量如替代数据流、UNC 路径和设备句柄被主动拒绝。CLI 还在主机 PATH 前面注入存根可执行文件(例如,包装 ssh),以便我们可以在危险工具离开沙箱之前截获它们。

已知安全限制

使用完整文件系统和网络访问运行 python windows-sandbox-rs/sandbox_smoketests.py 目前导致 37/41 通过的案例。下面的列表重点介绍了烟雾测试中第 #32 及以上编号的四个高价值失败(早期测试的安全性较低)。

测试目的
ADS 写入被拒绝 (#32)确保替代数据流无法在工作区内被写入,防止工具在 ADS 中隐藏有效载荷。沙箱目前允许写入(进程返回 rc=0)。
受保护路径大小写变化被拒绝 (#33)确认受保护目录(如 .git)即使在攻击者使用大小写技巧(如 .GiT)时也保持被阻止。当前允许列表将 .GiT 视为不同,因此写入成功。
PATH 存根绕过被拒绝 (#35)验证在主机 PATH 前面放置的工作区提供的 ssh.bat 垫片运行而不是实际的 ssh。沙箱在发出垫片的 stubbed 输出之前提前退出,因此我们无法证明拦截有效。
启动流程 https 被拒绝(已知失败)(#41)验证只读运行无法通过 Start-Process 'https://...' 启动主机的默认浏览器。今天该命令成功(退出代码 0),因为 Explorer 在沙箱外处理 ShellExecute 请求。失败由 windows-sandbox-rs/sandbox_smoketests.py(最后一个案例)捕获。

想帮助吗?

如果您是有安全意识的 Windows 用户,请帮助我们通过这些测试!改进的实现使这些烟雾测试通过,显着减少了 Codex 的逃逸面。迭代后,重新运行 python windows-sandbox-rs/sandbox_smoketests.py 来验证修复,并帮助我们推动套件朝向 41/41。