AI News HubLIVE
站内改写

Cplt:在核心級沙箱中執行AI編碼代理或普通Shell

Cplt 是一個沙箱包裝器,用於執行 AI 編碼代理(如 GitHub Copilot CLI、OpenCode、Google Gemini CLI)或普通 shell,在核心級別隔離檔案系統和環境變數,保護使用者機密。支援 macOS(Apple Seatbelt)和 Linux(Landlock LSM + seccomp-BPF)。提供細粒度的許可權控制,包括檔案讀寫、網路埠、環境變數等。

文章情報

工程師進階

要點

  • Cplt 為 AI 編碼代理提供核心級沙箱,防止訪問使用者機密。
  • 支援 macOS 和 Linux,透過 sandbox-exec 或 Landlock/seccomp 實現隔離。
  • 預設阻止對 .env、金鑰檔案、SSH 金鑰、雲憑證等的訪問,僅允許專案目錄和少量必需路徑。
  • 提供環境變數白名單、網路埠控制、生命週期指令碼阻止等安全強化功能。

為什麼重要

這條新聞值得關注,因為Cplt 為 AI 編碼代理提供核心級沙箱,防止訪問使用者機密。

技術影響

可能影響模型選型、推理成本、產品能力和評測基準。

Cplt 是一個專門為 AI 編碼代理設計的沙箱包裝器,它允許使用者在核心級隔離環境中安全執行 GitHub Copilot CLI、OpenCode、Google Gemini CLI 等代理,或僅執行一個普通 shell。該專案由挪威勞工和福利管理局(NAV)開發,旨在解決 AI 編碼代理可能帶來的安全風險,特別是保護敏感憑據和機密檔案不被洩露。

Cplt 利用作業系統核心的安全機制來實現隔離。在 macOS 上,它使用 Apple Seatbelt/SBPL 透過 sandbox-exec 命令實現;在 Linux 上,它使用 Landlock LSM 和 seccomp-BPF 組合(要求核心 5.13+,完整網路過濾需 6.7+)。這種核心級別的沙箱確保了即使代理或子程序嘗試訪問受限資源也會被核心直接阻止。

Cplt 的核心功能是檔案系統隔離。它預設允許代理讀寫專案目錄,但核心級阻止對以下檔案的訪問:

  • 以 .env 開頭的檔案、.pem、.key 等金鑰檔案。
  • .git/hooks、.git/config、.gitmodules 等 Git 配置,防止持久化攻擊(如惡意 Git 鉤子、submodule 劫持)。
  • /tmp、/var/folders 等臨時目錄的執行許可權,防止寫入後執行攻擊。
  • ~/Library/Caches 中的執行檔(除非特別豁免)。
  • ~/.ssh、~/.gnupg、~/.aws、~/.azure 等常用機密目錄。
  • 雲服務憑據檔案,如 ~/.kube、~/.docker、~/.config/gcloud 等。
  • 包管理器憑據,如 ~/.npmrc、~/.pypirc、~/.gem/credentials 等。

除了檔案系統,Cplt 還強化了環境變數。它透過白名單機制只傳遞安全的環境變數,同時注入安全強化變數,例如阻止 npm/yarn/pnpm 生命週期指令碼(postinstall 鉤子),這是軟體供應鏈攻擊的主要途徑。預設情況下,所有以 AWS_、AZURE_、NPM_TOKEN、DATABASE_URL 等開頭的變數以及 SSH 相關變數都會被過濾掉。使用者可以透過 --pass-env 標誌顯式新增所需變數。

網路控制方面,Cplt 預設只允許出站 TCP 埠 443,其他埠全部阻止。使用者可以使用 --allow-port 新增額外埠。值得注意的是,預設情況下禁止訪問 localhost(出站),以防止代理訪問本地服務(如正在執行的資料庫、Web 伺服器等)。如果某些構建工具需要訪問 localhost(如 Turbopack、Vite),可用 --allow-localhost-any 全部放行。

安裝 Cplt 非常簡單。推薦使用 Homebrew:brew install navikt/tap/cplt,也可以透過 curl 指令碼或 GitHub Releases 下載二進位制檔案。安裝後,執行 cplt --shell-install 即可設定 shell 別名,讓 copilot 命令自動使用沙箱版本。Cplt 還內建了遞迴保護:如果檢測到已經在沙箱內執行,它會拒絕再次啟動。

Cplt 還提供了豐富的配置選項,包括指定專案目錄(-d)、允許讀寫外部路徑(--allow-read/--allow-write)、阻止特定路徑(--deny-path)、允許本地迴環連線(--allow-localhost)等。對於高階使用者,可以透過 --allow-lifecycle-scripts 允許 npm 生命週期指令碼執行,或透過 --allow-gpg-signing 允許 Git 簽名(僅公鑰訪問)。

該專案已在 GitHub 上開源,並提供了詳細的安全模型文件(SECURITY.md)。Cplt 的目標是讓 AI 編碼代理在享受自動化便利的同時,不犧牲使用者的安全性。對於使用 Copilot、OpenCode 等工具的開發者來說,Cplt 是一個值得關注的安全加固工具。