ai4biz.tw
← 全部專題
2026.09.19· 8 段

最大的 Agent 風險,也在你裝進去的插件

你 review 過一個 Coding Agent plugin,也把它 pin 到特定 SHA。

Plugin4Shell

AIR Security 揭露 · 2026 年 9 月

最大的 Agent 風險不只在模型, 你裝進去的插件也算

Coding Agent 的 plugin、skill 看起來像小功能,實際上更像裝進同事電腦的軟體。

它通常繼承操作者可及的檔案、憑證、內部系統與 production 環境。

AIR Security 的 Plugin4Shell 研究指出,四個主流 Coding Agent 都曾有同一類問題:review 過、也 pin 了 SHA 的插件,仍可能跑到別的程式碼。

以為已經防住

review → pin commit → 安裝

SHA pinning 的承諾是: 你審的是哪版, 跑的就該是哪版

企業審完 plugin,marketplace 把它鎖到某一個 commit。照理說,日後 repo owner 就算改了預設分支,也不該改到已安裝版本。

這正是 SHA pinning 的用途:把「我看過這份程式碼」變成可重複驗證的事實。

Plugin4Shell 繞過的不是 review 流程,而是這個最後一哩的驗證。

少了一個比對

請求 checkout SHA,不等於真的落在那個 SHA

Agent 問 Git 拿 pin, 卻沒有確認 working tree 的 HEAD

AIR 的 PoC 利用 Git ref 的名稱解析,讓 Agent 送出看似正確的 checkout 請求,實際工作目錄卻落到攻擊者控制的內容。

關鍵不是 pin 有沒有寫進設定檔,而是 checkout 後是否斷言:HEAD 必須等於被 pin 的 commit。

沒有這一步,畫面顯示「已依 pin 安裝」,執行的仍可能是另一份程式碼。

為何會是 0-click

不是新裝一個惡意 plugin 才有風險

已安裝
受害前提是已有一個曾經 review、也受信任的 plugin 在 agent 裡
背景更新
AIR 指出 Claude Code 與 Codex 預設會自動更新已安裝的 plugin
0 次
不必重新安裝、不必點確認;上游換掉內容後,更新就可能帶入惡意程式碼

為何企業要在意

plugin 不是 browser extension 那麼簡單

它拿到的是 Agent 已經拿到的權限

這類攻擊不一定需要再提權。Agent 用誰的身分做事,plugin 通常就拿到誰可及的資源。

對工程團隊,可能是 repository、SSH key、cloud credential、內網服務或 production shell。

所以它的治理單位不該只是「一個方便的小工具」,而是一條會進入 endpoint 的軟體供應鏈。

範圍與修補

依 AIR Security 截至 2026/09/17 的揭露

2.1.179
Claude Code 已修補。請確認使用版本不低於此版本
0.146.0
OpenAI Codex 已修補。請確認使用版本不低於此版本
未修
GitHub Copilot 尚未有修補;AIR 表示 Microsoft (NASDAQ:MSFT) 尚未發布修補程式
不會修
Gemini CLI 已 deprecated、不會修;AIR 建議遷移 Antigravity

企業現在能做什麼

把 plugin 當軟體供應鏈,不是當 prompt 的附屬品。

先完成 patch,盤點所有 Coding Agent 版本,更新 Claude Code 與 Codex,並為 Copilot、Gemini CLI 的未修狀態建立替代或隔離方案。

接著盤點已安裝 plugin、marketplace 與 Git host;對每次更新驗證實際 commit,並以最小權限、短期憑證與 production approval 降低單一 plugin 的爆炸半徑。

重點不是停止用 Agent,而是讓更新、來源與權限都能被治理。

出處與限制

這件事要讀懂, 也要讀準

這是研究團隊以 PoC 證明的漏洞,不等於已有公開的大規模實際受害案例。Gemini CLI 的 FETCH_HEAD 變體與前述 Git ref 變體不同。

  • 原始研究與完整技術細節

    AIR Security〈Plugin4Shell〉· 2026/09/17

  • 受影響的 Agent 與修補狀態

    Claude Code、Codex、GitHub Copilot、Gemini CLI;版本與狀態以 AIR 揭露日為準

  • Git host 的重要差異

    SHA-shaped branch 變體僅在 host 接受 40-hex branch name 時成立;GitHub 會拒絕

  • 0-click 的必要條件

    已安裝 plugin 加上背景 auto-update;不是每一次新安裝都必然 0-click

Source · air.security/blog-posts/plugin4shell