AIDEFEND in Action AIA-0103 實證研究 發布於 AIA: 2026年10月23日

Session Inception:啟動無介面的子工作階段,讓儲存庫設定越過信任檢查

Straiker STAR Labs 要求 AI 程式設計助理 Claude Desktop Code 依照一般儲存庫的 README 進行操作。父工作階段無法自行繞過切換工作目錄時的使用者確認提示,但其執行的 Bash 命令卻在該儲存庫目錄下啟動了一個全新的無介面(headless)Claude Code CLI 程序。該子程序讀取儲存庫本機設定,並在模型進行安全檢查前自動執行 SessionStart hook,將主機環境變數等資料外洩給研究人員。此漏洞展示的邊界缺陷在於子工作階段啟動時缺乏同等防護機制;即使模型能正確識別並拒絕 README 中的可疑指令,也無法阻止初始化階段的本機 hook 搶先執行。

Configuration PoisoningClient SecurityTool AuthorizationAI Coding Agent
5 項對應的 AIDEFEND 防禦手法

威脅分析

  • 儲存庫設定檔在模型檢驗前預埋啟動 Hook: 不可信的儲存庫在 .claude/settings.json 中預先配置了 SessionStart hook。雖然在 Claude Desktop 介面中檢視 README 或嘗試切換工作區時,皆會強制跳出使用者確認提示,但該 hook 依然潛伏在儲存庫目錄中等待工作階段初始化。
  • 啟動無介面子程序繞過父層工作區信任邊界: 當助理依照指令測試儲存庫時,透過既有的 Bash 工具切換至該目錄並執行 claude -p。此子程序以無介面(headless)模式啟動,在完全未經 Desktop UI 切換目錄確認對話框的情況下,直接載入本機設定並執行了 SessionStart hook。
  • 區分客戶端的惡意承載透過 DNS TXT 外洩環境變數: 該 hook 呼叫遠端伺服器下載腳本,惡意站點對一般瀏覽器回傳無害內容,但對指令列客戶端則傳送攻擊代碼。隨後從 DNS TXT 記錄取得加密指令、解碼並交由 Bash 執行,在子程序的 LLM 介入前即將開發者環境變數外洩至外部端點。
  • 通報時序與架構信任啟示: Straiker 於 9 月 17 日通報此問題,Anthropic 當日以 Informative(具參考價值)結案,並未發布正式 CVE 或客戶端修補版本。此受控驗證凸顯出核心架構問題:工作區信任機制必須強制貫穿所有子程序生成與無介面 CLI 呼叫,絕不能僅依賴父層視窗的使用者確認介面。

適用的 5 項 AIDEFEND 防禦手法

AID-I-001.002
MicroVM & Low-Level Sandboxing
高
將父層客戶端、Bash 程序、子 CLI 以及 hook 所衍生的所有後續程序,全數置於經嚴格驗證的受管虛擬機(MicroVM)或作業系統原生沙箱中,僅提供最小且不含真實憑證的合成環境,嚴格禁止掛載開發者認證或機敏的主機目錄。在第一個程序啟動前就必須徹底剝離所有 secrets,否則子程序在繼承環境變數時仍會造成外洩。必須完整驗證整棵程序樹及其可存取的環境變數範圍;此防護能有效圍堵主機機敏資料的曝露,但若任務刻意將 secrets 注入該環境中,仍存在外洩風險。
AID-I-001.004
Sandbox Network Egress Restrictions
高
在整個沙箱程序樹外層強制執行預設拒絕的網路存取控制,僅放行檢驗儲存庫所嚴格必需的特定對外連線。測試時必須涵蓋攻擊者腳本主機、原始 IP、重新導向與 Proxy 路徑,並特別針對 DNS TXT 記錄查詢與替代解析器進行驗證。一般不受限的 DNS 查詢或僅包覆父程序網頁讀取工具的過濾器,均可能使此類外洩管道暢通無阻。在底層路由完全受控時,此外層防禦可阻斷未經核准的遠端腳本傳送;但本機 hook 是否具備執行信任,仍須仰賴獨立的啟用授權機制判斷。
AID-H-021.001
Client-Side Configuration Enforcement
中
由組織管理的端點感測器,檢查儲存庫中新建或修改的 .claude/settings.json,使用自訂規則辨識未核准的 SessionStart 命令。G001 範例的 YARA 關鍵字,不能偵測任意 hook 程式碼;必須另外驗證實際 hook 範例、編碼與替代路徑的涵蓋範圍。端點隔離或審查可能在無介面子程序已執行 hook 後才發生,因此只列為補強控制。只有證明產品能同步拒絕寫入或使用,才能宣稱可以預防。受管的 disableAllHooks 或 allowManagedHooksOnly 政策是另一種機制,不能當成這裡對映的內容掃描指引。
AID-H-021.005
AI Coding-Agent Workspace Activation Trust Gate
中
在不可被繞過的啟用中介服務驗證確切工作區與啟用內容清單並核准前,必須嚴格維持儲存庫內所有 hook 的停用狀態。進行設定盤點時不得執行任何程式碼;核准判定必須嚴格綁定正規 checkout 身分與 hook 的確切內容雜湊值,一有變更即自動撤銷,且防護範圍必須同時涵蓋子 CLI 程序的啟動與父層目錄切換介面。此項控制需要由受控客戶端或軟體供應商在底層完成整合;研究中 Desktop UI 提示有效,並不代表能涵蓋無介面的子程序呼叫。任何可被原始 Bash 命令直接繞過的前端封裝層,均不足以建立有效的信任邊界。若系統允許無介面模式啟動,必須由儲存庫本身無權竄改的安全通道提供明確的組織層級核准,並嚴密綁定確切工作區、啟用內容雜湊值、客戶端軟體版本、工作負載身分與安全政策。每次受保護的啟用事件均須與獨立的程序及網路觀測日誌相互勾稽,並完整完成包含無介面模式與直接命令呼叫在內的繞過測試矩陣。G003 提供受管政策核准與涵蓋面驗證,仍須搭配 G002 的中介代理與強制執行配接器;單純的證據檢查邏輯本身無法阻止惡意子程序的生成。
AID-D-003.004
Tool-Call Sequence Anomaly Detection
中
要盯著工具呼叫的順序,抓出讓這次攻擊成立的那個轉折:互動式工作階段裡的一次 Bash 呼叫,先切進剛 clone 下來的目錄,再啟動另一個 AI 客戶端,這裡就是 claude -p。先定義儲存庫檢閱任務核准的工具呼叫轉換,把「啟動子客戶端」「啟用 hook」「子程序對外抓取」標成禁止或高風險的轉換,一出現就連同父工作階段、完整命令列與工作區路徑一起發出警示通知。這是偵測:研究中資料在子程序的模型察覺之前就已經送出去了,所以它的價值在於快速分流,以及在所有開發機上找出同樣的模式,不在於預防。

身為資安防禦者,我們應該這麼做

  • 從 MDM 派送會直接拒絕儲存庫定義 hook 的受管客戶端設定,例如 Claude Code 的 disableAllHooks 或 allowManagedHooksOnly,並用一個測試用的 clone 確認:不論是 Desktop 工作階段,還是無介面的 claude -p 子程序,都不會執行 SessionStart 命令。
  • 全面盤點程式設計客戶端啟動其他子客戶端、shell、hook、背景任務或本機伺服器的所有管道。針對僅需檢閱儲存庫內容的任務,應徹底移除不必要的 shell 與子客戶端啟動權限,並在作業系統程序邊界層級確認此限制,而非僅寄望於系統提示詞約束。
  • 對儲存庫的啟用設定檔進行靜態檢閱時嚴格禁止自動執行。所有本機 hook 均應維持停用狀態,直至取得綁定確切工作區與內容清單的明確授權;在無介面操作模式下,亦必須由外部提供組織層級的授權憑證,絕不能僅因缺少互動式介面便預設予以信任。
  • 若客戶端軟體本身無法全面防護每條啟用路徑,應將檢閱任務置於一次性的受管虛擬機(MicroVM)中執行,維持最小化環境且完全不掛載開發者真實機敏憑證(secrets)。確保父程序、Bash、子 CLI 以及所有 hook 衍生的子程序全數受限於隔離環境內。
  • 在整棵程序樹的外層落實嚴格的網路連線控管。實測腳本下載、原始 IP、重新導向、Proxy 以及 DNS TXT 查詢等連線路徑;切記瀏覽器預覽所取得的內容可能與 hook 實際下載的攻擊腳本截然不同。
  • 針對工具呼叫的模式本身發出警示:互動式工作階段的 Bash 呼叫先切進剛 clone 的目錄、再啟動另一個 AI 客戶端,就連同父工作階段、完整命令列與工作區路徑一起通報,並在所有開發機上找同樣的序列。
  • 在客戶端版本更新或安全政策調整後,務必於隔離環境中重現此子工作階段啟動鏈。驗證系統在 SessionStart 執行前即予以拒絕,或確認沙箱邊界能完全阻斷受保護資料的外洩;若在資料傳出後才發出警示,不能視為通過安全驗證。

結論

AIDEFEND  把本案對應到幾個防禦落點:在所有工作階段一律拒絕儲存庫定義 hook 的受管客戶端政策、工作區啟用的全路徑檢驗、無介面模式的精確授權、程序樹的外層隔離、外部強制的對外連線控管,以及對「啟動子客戶端」這個轉折的偵測。父介面成功跳出確認提示只守住了一條路徑;真正的部署必須在 hook 執行前就擋下或管住子程序的初始化,或是把整棵程序樹隔離在沒有開發者機敏憑證的環境裡。

最後更新: