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 是一個值得關注的安全加固工具。