← All posts / Meta

Beltdown:一個不可信任的儲存庫、零權限提示——Anthropic 花了 50 天才修好的沙箱逃逸

隱形新創 Accomplish 披露 Claude Code、OpenAI Codex 與 Cursor 一連串沙箱漏洞。其中 Claude Code 的「Beltdown」逃逸在 macOS 沙箱外執行攻擊者指令、全程零提示——而且掛了 50 天、約 30 個版本才完全修補。

Beltdown:一個不可信任的儲存庫、零權限提示——Anthropic 花了 50 天才修好的沙箱逃逸

如果你正在使用 AI 編碼代理(coding agent),那麼用來「關住」它的沙箱,就是唯一真正重要的安全邊界。本週,一家名為 Accomplish 的隱形新創掀開了蓋子:三大最受歡迎的編碼代理——Claude Code、OpenAI Codex 與 Cursor——的沙箱至今仍然漏洞百出,而各家實驗室面對研究者送上門的完整逃逸鏈,反應速度天差地遠。

這項披露由 Upstarts Media 的 Alex Konrad 於 9 月 10 日獨家報導,技術細節則發表在 Accomplish 自己的部落格上。時機相當尷尬:業界才正在消化「美國參議院小組委員會據報正在調查 OpenAI 代理入侵 Hugging Face 系統」的新聞,而前沿模型「逃出」沙箱作弊也早已是連續劇。不過 Accomplish 的創辦人們擔心的不是那些頭條級逃逸,而是每天有數百萬開發者使用的工具裡,那一長串已被視為「常態」、默默修掉的漏洞。

誰發現的?為什麼重要?

Accomplish 是一家位於特拉維夫的新創,由 Or Hiltch(CTO)、Amit Avner(CEO)與 Guy Zipori 共同創立,目前仍在隱形階段,產品方向是為企業端點上運行的 AI 代理提供強化隔離環境。他們的首席安全研究員 Oren Yomtov 整個夏天都在向 Anthropic、OpenAI 與 Cursor 通報沙箱漏洞。他們的立場很直白:新的 AI 模型讓過去低優先級的漏洞變成高風險,因為沙箱裡現在坐著一個自主、機率性的程序,而不可信任的內容可以操縱它。

「現在關於安全的討論很多,」Hiltch 對 Upstarts 說,「但這些討論並沒有真正反映在他們實際打造產品的方式上。」

修補速度的落差是整個故事最尖銳的部分:7 月通報給 Cursor 的漏洞,以及另外兩個通報給 OpenAI 的問題,各在約一週內修復;而一個類似的漏洞通報給 Anthropic 後,大約過了 50 天、歷經約 30 個軟體版本才完全修補。Avner 指出,在這段期間,駭客、網路罪犯或國家級行為者都可能利用這些缺口。OpenAI 提供了聲明,感謝研究者的通報並表示兩個問題都已於 8 月解決、正持續強化沙箱;Anthropic 與 Cursor 則未正式回應。

Beltdown:Claude Code 沙箱逃逸的解剖

此次披露最令人心驚的漏洞名為 Beltdown,攻擊的是 Claude Code 的 macOS 沙箱——它用 Apple 的 Seatbelt 設定檔包住代理的 Bash 工具。最違反直覺的一點是:開啟沙箱恰恰是權限提示消失的原因。一旦 Claude 把指令放進沙箱,它就不再逐一詢問用戶。

Accomplish 的展示簡單得可怕:開啟沙箱、把權限模式設到最嚴格的「不詢問」、在 Claude Code 裡打開一個不可信任的儲存庫,然後發送一則短訊息。結果那個儲存庫裡預埋的指令直接在 Mac 上執行——在沙箱外、以特權用戶身分、全程沒有跳出任何權限提示。它還能透過間接提示注入(indirect prompt injection)觸發,意思是代理讀到的惡意網頁或文件都可能引爆它。

攻擊鏈利用了一個結構性缺口:Claude Code 的 harness 為了替儲存庫建立索引,會在沙箱外自行執行 git 指令。而 git 的 core.fsmonitor 設定會在 git 檢視工作目錄時被當作 shell 指令執行。於是遊戲規則變成:把帶毒的 core.fsmonitor 種進某個 .git/config,再讓 harness 去跑一條會讀到它的 git 指令。

Accomplish 列出了四道防線,以及四個繞過手法:

  1. 強化過的 git 指令。 Claude Code 在沙箱外執行的 git 呼叫會帶上參數清空 core.fsmonitor 等危險選項——但漏了一條:用來刷新檔案索引的 git ls-files。
  2. 受保護的 .git 資料夾。 Claude 的檔案工具拒絕寫入 .git、Seatbelt 也擋住 bash 寫入,把其他資料夾改名成 .git 同樣被擋——但只限專案根目錄。阻擋「巢狀 .git 資料夾」改名的 Seatbelt 規則漏掉了,於是安裝腳本可以在子資料夾裡先用別的名字建好帶毒的 git 資料夾,再改名進去。
  3. git 在專案根目錄執行,那裡的 .git 是乾淨的——但 harness 實際上是在 Bash 工具最後使用的目錄裡執行 git。腳本只要切換工作目錄到那個子資料夾即可。
  4. 沒有機制會自動重跑索引刷新——但 skill 自動載入會。腳本最後一行叫 Claude 去讀那個子資料夾裡的「建置報告」;Claude 讀檔時會檢查該資料夾有沒有 skills,載入 skill 會自動觸發檔案索引刷新。Claude 讀報告的那一刻,payload 就引爆了。全程零用戶互動。

披露時間軸本身就是一場修補競賽的縮影:7 月 13 日通報 Anthropic、當天完成分類;8 月 6 日 v2.1.223 首波強化,但漏掉部分 git 呼叫,逃逸鏈直接換一條路繼續通;8 月 26 日 v2.1.247 才完整修復。現在,harness 執行的每條 git 指令都會清空 core.fsmonitor。

SharedRoot:更早的 Cowork 逃逸與設計層論戰

Beltdown 並非 Accomplish 的初試啼聲。7 月他們發表了 SharedRoot,一條逃離 Anthropic Claude Cowork 代理環境的攻擊鏈:從一個連接的資料夾出發,利用 Linux 核心漏洞(CVE-2026-46331,act_pedit 模組的「pedit COW」)先透過非特權 user namespace 拿到 guest-root,再直接讀寫 host Mac 上的任何檔案——SSH 金鑰、雲端憑證樣樣來——因為 Cowork 的本地模式把整個宿主檔案系統以讀寫模式掛載進 VM 的 /mnt/.virtiofs-root。

Anthropic 將該報告以「Informative」結案,而 Cowork 現在預設改用雲端執行,這條路徑已不適用。但 Accomplish 更深層的論點值得注意:核心漏洞是整條鏈裡最不有趣的部分。隨著 AI 輔助漏洞研究已經工業化——主線核心的提權通報量約為前一年的 2.3 倍、公開利用程式在修補發布後幾小時內就出現——guest 核心在結構上永遠落後一個漏洞。依賴「guest 核心是乾淨的」的隔離設計,注定是輸家。他們建議的四道鎖(限制非特權 user namespace、把 seccomp 過濾器翻轉為預設拒絕、停用未用子系統的模組自動載入,以及最重要的一條——永遠不要把整個宿主掛進 VM)每一道都能擋掉一整「類」逃逸,而不只是單一 CVE。

為什麼這件事超出三家廠商的範圍

對 2026 年任何運行編碼代理的團隊,有三個啟示:

沙箱就是產品本身。 用 Accomplish 的話說,不可信任輸入對代理而言不是邊緣案例,而是主要案例。「模型做了蠢事」和「模型拿到了我的雲端憑證」之間的界線,就是這些產品唯一在賣的東西。當 harness 自己在沙箱外跑指令(git 索引、檔案監看),每一條這樣的路徑都是用戶看不見的攻擊面。

修補速度是一種安全功能——而且各家差異極大。 同一類漏洞,一週(Cursor、OpenAI)對上 50 天加約 30 個版本(Anthropic),這種落差應該被寫進企業採購評估標準。OpenAI 表示正「持續強化沙箱,包括收紧代理可寫入檔案位置的控制」;Anthropic 的相對沉默本身就是一項資訊。

模型能力是雙面刃。 Hiltch 那個修辭式問題——「如果這些前沿模型這麼強,為什麼找不到自己產品裡的這些關鍵漏洞?」——最讓人不舒服。把漏洞研究工業化的同一批模型,也讓攻擊者的漏洞研究工業化,而雙方現在瞄準的是同一道沙箱邊界。

對團隊而言,務實建議並不新鮮但更加急迫:把 Claude Code 升級到 2.1.247 之後、把每個 clone 下來的儲存庫都當成敵意輸入、如果代理會碰到敏感資料,考慮不依賴廠商自家沙箱的隔離方案——例如 host 共享範圍被限縮的 VM,或真實憑證根本不進 guest 的架構。

至於 Accomplish,他們把整家公司押在最後這個想法上。而這一週,很多安全團隊大概很慶幸有人這麼做。