1949 字
10 分鐘

Plugin4Shell 影響哪些 AI coding agent?插件 SHA 驗證與盤點清單

Plugin4Shell 是 2026 年 9 月公開的 AI coding agent Plugin supply-chain 研究。它指出一個容易被忽略的差異:安裝器「想要 checkout 某個 commit」不代表最後工作目錄真的停在那個 commit。如果代理程式只相信 fetch 或 checkout 的輸入值,卻沒有讀回 git rev-parse HEAD 驗證結果,移動中的 branch、tag 或遠端內容就可能讓實際載入的程式碼和預期版本不同。

直接答案是:先列出每個 agent 實際載入的 Plugin 與 commit,再核對工作目錄的 HEAD 是否等於預期 SHA;無法確認修補狀態時先停用自動更新與高權限 Plugin,並把 agent、Plugin、token、workspace 和 sandbox 分開盤點。 本文只整理防禦檢查,不提供利用漏洞的步驟,也沒有在本機重現攻擊。

先分清楚:研究報告、修補狀態與你的環境#

Air Security 於 9 月 17 日公開 Plugin4Shell 研究,Cloud Security Alliance(CSA)在 9 月 18 日發布研究摘要。兩份資料都描述了 Plugin checkout 與 SHA 驗證之間的風險;CSA 也提醒當時尚未有 CVE。這些是公開研究的時間點,不是「所有版本現在都一定受影響」的判決。

目前能確認的資訊應分三層讀:

  1. 漏洞模型:Plugin 來源或 branch 被替換後,安裝流程可能沒有確認實際 resolved HEAD 是否等於預期 SHA。
  2. 產品修補:不同 agent 的修補版本與策略不同,不能用一個 agent 的版本號推論另一個 agent 已修好。
  3. 部署實況:即使 agent 已升級,既有 Plugin checkout、cache、workspace mount 與 token 權限仍要重新盤點。

公開資料中的版本線索#

Agent截至查核日的可用線索使用時的保守做法
Claude CodeAir Security 與 CSA 將修補線索指向 Claude Code 2.1.179;Anthropic 的 release 頁面仍應以目前版本與公告為準升級到供應商目前支援版,重新檢查既有 Plugin,不要只更新 CLI binary
CodexOpenAI Codex rust-v0.146.0 release 的 changelog 列出「Verify Git plugin SHA checkouts」使用目前支援版本,並以實際 checkout HEAD 驗證防護是否生效
GitHub CopilotCSA 研究摘要當時沒有記錄 Microsoft 已公開相同修補確認以目前官方公告確認前,停用不必要的第三方 Plugin 或自動更新
Gemini CLICSA 摘要記錄 Gemini CLI 的產品處置是棄用並轉向 Antigravity,而不是照搬其他 agent 的 patch不要把舊 Gemini CLI Plugin 流程當成仍受支援的安全基線

上表的版本線索不是長期保證。若你的環境由企業管理、封裝映像或內部 Plugin registry 控制,還要以實際安裝 commit、發布渠道與 administrator policy 為準。

十分鐘 Plugin 盤點流程#

1. 列出「實際啟用」而不是「曾經安裝」的 Plugin#

先從每個 agent 的設定、Plugin directory、lock file、container image 與啟動 log 找出:

  • Plugin 名稱、來源 repository、branch/tag 與預期 commit SHA。
  • 實際 checkout 路徑、最後更新時間與目前 agent 版本。
  • Plugin 能讀取的 workspace、環境變數、Secrets、shell、browser、network 與外部 API。
  • 是否開啟自動更新,更新由誰觸發,以及失敗時是否會繼續啟動舊 cache。

「在 registry 看得到」或「以前裝過」都不等於目前回合會載入;把 inventory 和實際啟動 log 對照,才知道需要修補哪一份 checkout。

2. 讀回 HEAD,不能只比對設定檔#

下列是可套用到一般 Git Plugin workspace 的示意檢查。PLUGIN_DIREXPECTED_SHA 必須替換成你的實際值;這段命令沒有在本文環境執行:

Terminal window
plugin_dir=/path/to/plugin
expected_sha=0123456789abcdef0123456789abcdef01234567
actual_sha="$(git -C "$plugin_dir" rev-parse HEAD)"
printf 'expected=%s\nactual=%s\n' "$expected_sha" "$actual_sha"
if [ "$actual_sha" != "$expected_sha" ]; then
printf '%s\n' 'Plugin checkout does not match the expected commit.' >&2
exit 1
fi

再保存一份不含 Secret 的版本證據:

Terminal window
git -C "$plugin_dir" show -s --format='%H%n%ci%n%s' HEAD
git -C "$plugin_dir" status --short
git -C "$plugin_dir" remote -v

如果 Plugin 目錄不是 Git checkout,改從套件 lock、image digest、release artifact checksum 或 agent 提供的安全驗證報告取得證據;不要自行把「資料夾名稱看起來像版本」當作固定版本。

3. 安裝或更新後立即再驗證#

安全的更新流程至少要在 checkout 後重新讀回 HEAD。概念上應包含:

Terminal window
git fetch --quiet origin "$expected_sha"
git checkout --detach "$expected_sha"
actual_sha="$(git rev-parse HEAD)"
test "$actual_sha" = "$expected_sha"

這只是一般 Git 專案的驗證示意;各 agent 的 Plugin manager 可能使用自己的 cache、sandbox 或 package format。若 manager 沒有公開實際 resolved commit,也就不能把設定中的 pin 宣稱為已驗證的安全保證。

暫時無法確認時怎麼降風險#

無法確認 agent 版本、Plugin SHA 或修補狀態時,先做可回復的限制:

  1. 暫停該 Plugin 的 auto-update 與自動載入;不要為了保持便利而讓未知版本繼續取得新 token。
  2. 停用不必要的 shell、browser、寫檔、network 與 production credential,讓 Plugin 只看到測試 workspace。
  3. 保存 agent version、Plugin repository、實際 HEAD、安裝時間與 log;不要先刪除可能有用的證據。
  4. 用乾淨 checkout 或經驗證的 image 重新安裝,再做最小權限 smoke test。
  5. 如果 Plugin 曾能讀取高敏感 token 或執行外部副作用,依組織 incident policy 評估撤銷與輪替,不要只重新下載同一個 branch。

Plugin4Shell 的核心提醒不是「所有 Git Plugin 都不能用」,而是要把來源可信度、版本固定、實際 resolved commit 和執行權限視為四個分開的控制點。

AI coding agent 的最小權限檢查表#

控制點低風險預設需要額外審查的訊號
Repository只讀或測試 branch可 push、merge、改 CI 或讀取多個 repository
Secrets無 Secret 或單一短期 tokenproduction key、長期 PAT、cloud credential、SSH key
Shellallow-list 指令或隔離 container任意 shell、sudo、套件安裝、讀取 home directory
Network預設拒絕或只開必要 host任意外連、webhook、下載執行檔、上傳 workspace
更新人工 review 後切換固定版本branch auto-update、無法讀回 commit、背景自動安裝
Recoverybranch/worktree、可重建 image、保留 log直接覆寫工作目錄、沒有 rollback 或 audit trail

如果你正在整理 Codex Plugin 本機權限,也可以參考 Codex Plugin 目錄權限檢查清單。那篇聚焦目錄、檔案 owner 與本機權限;本文補上跨 agent 的 Git SHA 與 supply-chain 驗證。

不要把社群訊號當成修補證明#

Threads、issue、轉貼與安全研究可以幫助你發現名稱、版本和產品範圍,但它們不能代替:

  • vendor release notes 或 security advisory。
  • 實際安裝版本與 resolved commit。
  • 可重複的本機檢查、sandbox log 與最小權限測試。

本文查核日是 2026-09-21;Copilot、Gemini CLI 與各 agent 的修補狀態可能在之後變動。遇到新的公告時,先更新 inventory 與版本證據,再決定是否恢復自動更新。

常見問題#

Q: 設定檔裡已經寫了 commit SHA,還需要讀回 HEAD 嗎?#

A: 需要。設定值是輸入,git rev-parse HEAD 是 checkout 後的結果;兩者一致才能證明目前目錄停在預期 commit。若 manager 沒有暴露結果,就把它列為無法驗證的風險。

Q: 升級 Codex 或 Claude Code 後,既有 Plugin 會自動安全嗎?#

A: 不要假設。先確認目前 agent 版本,再重新盤點 Plugin cache、實際 HEAD、權限與 token。升級 binary 不一定會重建每一份既有 checkout。

Q: Plugin4Shell 有 CVE 編號嗎?#

A: 本文查核的 CSA 研究摘要指出當時沒有 CVE。這不影響你做版本、commit、權限與 auto-update 盤點,也不要把「沒有 CVE」解讀成「不需要處理」。

Q: 沒有企業資安團隊,也需要做這麼多檢查嗎?#

A: 至少做 inventory、實際 HEAD 比對、停用不必要權限與一個乾淨 workspace smoke test。這四項成本低,卻能避免把未驗證的 branch 與高權限 token 同時交給 agent。

參考資料:

Air Security:Plugin4Shell

Cloud Security Alliance:Plugin4Shell AI coding agent supply-chain research note

OpenAI Codex v0.146.0 release

Anthropic Claude Code v2.1.179 release

Plugin4Shell 影響哪些 AI coding agent?插件 SHA 驗證與盤點清單
https://laplusda.com/posts/plugin4shell-ai-coding-agent-supply-chain/
作者
Zero
發佈於
2026-09-21
許可協議
CC BY-NC-SA 4.0