Claude Code 2.1.309 的官方版本說明列出一項 macOS 與 Linux 修正:沙箱 Bash 命令此前會在沙箱外執行 shell 啟動檔,現在已修正。這個描述指向命令啟動前的初始化流程,不能解讀成所有 Bash 命令都曾逃出沙箱,也沒有資料證明因此發生資料外洩。升級前更值得先問的是:自己的 shell 啟動檔會載入什麼,當中的設定或命令是否會影響日常開發?

2.1.309 修正的是哪一段 Bash 執行流程?

它修正 macOS 與 Linux 上沙箱 Bash 命令會在沙箱外執行 shell 啟動檔的行為。官方說明沒有列出漏洞編號、受影響版本區間或利用條件,因此判讀應限於這項具體修正。

版本說明的英文原文是 “running the shell’s startup files outside the sandbox before each command”。重點在「每個命令之前」與「沙箱之外」:修正對象是 shell 初始化檔執行的位置,不是宣告沙箱內每條命令都曾不受限制。也沒有公開資料可據以斷言有攻擊者利用、程式任意執行或特定使用者受害。

Shell 啟動檔是命令列 shell 啟動時讀取的設定檔;沙箱則是限制命令可觸及檔案或網路範圍的隔離環境。兩者處理流程不同,所以「命令受沙箱限制」並不能直接回答「命令開始前的初始化也在哪裡執行」。Anthropic 的安全說明把沙箱 Bash 列為具檔案系統與網路隔離的防護,並提醒使用者仍須檢查建議執行的命令。

為什麼啟動檔會影響沙箱命令的判讀?

啟動檔可能設定環境變數、調整 PATH、載入工具,也可能執行外部命令。不同 shell 與啟動方式會讀取不同檔案,需按自己的實際組合確認。

GNU Bash 手冊指出,互動式登入 shell 會讀取系統與使用者登入設定;互動式非登入 shell 通常讀取 ~/.bashrc;非互動 shell 則會檢查 BASH_ENV 指向的檔案。zsh 的官方手冊列出的流程不同,可能依序涉及 .zshenv、登入設定檔、互動設定檔等。因此只看檔名,或假定 Claude Code 一定採用終端機相同啟動方式,都不足以判斷實際行為。

先盤點 Claude Code 使用的 shell、啟動模式和環境變數,再查看對應檔案中是否有 export、PATH 修改、source 其他檔案、版本管理工具初始化、套件管理器呼叫或自訂腳本。這些內容可能改變工具位置、環境值或命令輸出;是否真的造成影響,取決於實際啟動方式與檔案內容,不能光憑存在某段設定就推定有風險。

盤點時也要區分「shell 讀取了檔案」和「檔案內的操作有可見副作用」。例如,設定 PATH 通常改變命令搜尋順序;初始化工具管理器可能再呼叫其他程式;自訂腳本則可能讀寫專案以外的位置。逐行標出這些行為,才能挑選有代表性的測試命令。若啟動檔再載入另一個檔案,檢查範圍也應延伸到該檔,否則只讀 .bashrc 或 .zshenv 仍可能漏掉真正執行設定的位置。

「When Bash is started non-interactively, it looks for the variable BASH_ENV」, GNU Bash Reference Manual 說明非互動式 Bash 對啟動設定的處理方式。

這也說明版本修正之外,根因判讀要回到初始化邊界:沙箱政策保護的是命令執行環境,但啟動檔可能在命令進入該環境前先被讀取。Anthropic 只在版本說明中指出修正行為,沒有公開更底層的實作原因;把「初始化檔在外部執行」延伸成特定繞過機制,超出目前證據。

同版其他沙箱修正反映哪些不同邊界?

不是同一問題。版本說明另列 symlink 路徑的寫入拒絕規則,以及 --mcp-config 檔案可被修改的修正;它們分別涉及路徑解析和設定檔保護,只能作為邊界案例理解。

第一個例子是 macOS 沙箱的 denyWrite glob(拒絕寫入的路徑樣式)在資料夾透過符號連結(symlink)抵達時,未套用到實際路徑。Anthropic 在 2.1.309 說明已修正這個情況。它提醒開發者:政策寫了某個路徑,不代表所有經連結抵達同一位置的路徑都必然按預期匹配。這是特定路徑規則的修正,不能與 shell 啟動檔問題混為一談。

第二個例子是沙箱命令與自動接受的編輯原先可能修改透過 --mcp-config 指定的 MCP 設定檔。MCP(Model Context Protocol,模型上下文協定)設定描述 Claude Code 可連接的外部工具服務;官方說明只指出該檔案修改權限的問題已修正,沒有說所有 MCP 設定都曾遭竄改。對使用者而言,這提醒版本檢查還要看重要設定檔是否應保持唯讀,以及執行後有無非預期差異。

這幾則 release note 可當成三個具體檢查案例:啟動檔問題關注命令開始前的執行位置;symlink 問題關注規則如何對應實際路徑;MCP 設定檔問題關注命令與編輯能否改寫設定。它們來自同一版本公告,沒有附上重現步驟或獨立測試,因此適合說明修正類型,不足以推算每個開發者的風險高低。讀者可以把這三種邊界對照自己的工作目錄、連結與設定檔位置,找出值得納入回歸檢查的項目。

符號連結解析後的拒絕寫入路徑與受保護的 MCP 設定檔示意
路徑規則要涵蓋符號連結的實際位置,重要設定檔也應維持預期的寫入界線。

Anthropic 的安全文件將沙箱 Bash 描述為提供「filesystem and network isolation」的防護,並指出使用者仍需審查建議命令。

升級前後如何確認自己的工作流?

先記錄作業系統、Claude Code 版本、shell 與啟動檔,再核對沙箱、權限和工作區信任設定。升級後用可控專案重跑代表性命令,比較環境、輸出及檔案變化。

  1. 記下基準狀態:確認作業系統及 Claude Code 版本,並記錄 Claude Code 實際使用的 Bash 或 zsh、啟動方式與相關環境變數。
  2. 檢視初始化內容:找出該 shell 會讀取的啟動檔及其 source 載入的檔案,標記環境變數、PATH 變更、外部命令和會寫檔的操作。
  3. 檢查防護設定:查看沙箱是否啟用、檔案與網路界線、Bash 權限規則、工作區信任狀態,以及 --mcp-config 等重要設定檔的存取方式。
  4. 選擇可丟棄的專案副本:不要在含重要憑證或未提交工作的目錄首次比較。先保存檔案狀態與相關環境值,避免測試輸出難以辨認。
  5. 升級後重跑相同命令:比較環境變數、PATH、輸出、檔案差異及權限提示;若結果改變,逐一確認是版本、啟動檔或設定差異,再決定是否調整初始化流程。
開發者在升級前後於可丟棄的專案副本重跑命令並比對環境、輸出與檔案差異
前後使用相同命令並逐項比對結果,才能判斷工作流是否真的改變。

測試要能重複比較,命令本身與執行位置應保持一致。先挑不會改動重要資料的讀取命令,再測試一項平常會寫入工作目錄的操作;每次只變更一個條件,例如先更新版本、再改啟動檔,避免結果同時受多項變更影響。可在命令前後記錄選定環境變數、工具實際路徑與版本,並用版本控制檢視檔案差異。若輸出不同,依序確認 shell 啟動模式、環境變數來源、權限提示與沙箱設定,讓問題能回到具體一層,而不是只用「升級造成」概括。

此流程有三個可查證的官方案例作為檢查依據:2.1.309 修正 shell 啟動檔執行位置、修正 symlink 後的 denyWrite 路徑匹配,也修正 --mcp-config 檔案可被修改。三者分別對應啟動順序、路徑解析與設定檔寫入權限,不能合併成一種故障;但都提示測試需包含真實工作流會經過的邊界。

哪些結論可以從 2.1.309 得出?

不能。可以確認的是官方列出特定修正及 macOS、Linux 的平台範圍;無法單憑版本說明推定所有環境都受影響、所有風險已消失,或升級後必然符合個人工作流。

官方 release note 沒有提供漏洞編號、量化風險、受影響版本區間、利用條件或獨立測試結果。這些資訊缺席時,較妥當的做法是按公告描述特定修正,不自行補上受害情境或風險等級。實際命令行為還受 shell、啟動模式、啟動檔內容和個人設定影響;一台機器測試通過,也不代表團隊所有作業系統與設定都相同。

Anthropic 安全文件指出,沙箱可隔離 Bash 命令的檔案系統與網路存取,降低權限提示並提供一層防護;文件同時要求使用者審查建議程式碼與命令。權限模式、命令核准、工作區信任和沙箱各自負責不同控制,應一起檢視。若管理的是團隊環境,還要把共用 shell 初始化檔與政策設定納入版本管理,讓每位開發者能比較自己的例外設定。

因此,升級判斷不是只看版號。若工作流使用自訂啟動檔、載入多層 source 設定,或透過符號連結管理專案與設定,就應選擇代表性命令實測。若沒有使用 Bash 沙箱,這項特定修正對現有流程的關聯可能較低,但其他權限修正仍應依版本說明評估。檢查結果才是決定要否調整設定的依據。

  • 2.1.309 修正 macOS 與 Linux 沙箱 Bash 命令執行 shell 啟動檔的位置;公告沒有證明所有命令曾逃出沙箱或發生資料外洩。
  • 升級前記錄 shell、啟動檔、權限與沙箱設定;升級後在可控專案重跑代表性命令,檢查環境、輸出和檔案差異。

常見問題

Q1:這項修正只適用 macOS 和 Linux 嗎?

2.1.309 的這一項 release note 明確列出 macOS 與 Linux。不能因此推定 Windows 上的 Bash 或其他執行方式曾有相同行為;應以對應平台版本說明為準。

Q2:升級後需要重寫 shell 啟動檔嗎?

不一定。先確認 Claude Code 使用哪個 shell 與啟動方式,再核對實際載入的檔案及其副作用。只有測試發現設定與預期工作流衝突時,才需要修改相關內容。

Q3:沙箱開啟後,還要審查命令與權限嗎?

要。Anthropic 將沙箱描述為降低風險的檔案與網路隔離層,並提醒使用者審查程式碼和命令。沙箱、核准權限與工作區信任需要一併設定,不能只依版本號判斷整體安全狀態。