跳轉到內容

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。