AIDEFEND in Action AIA-0089 實際事件 發布於 AIA: 2026年10月1日

Clinejection:公開 Issue 標題注入讓分類 agent 執行命令,與發布憑證暴露風險

Cline 是一款開源的 AI 寫程式工具。研究者發現,其用來分類 GitHub Issue 的 Claude 工作流程會讀取公開標題,且具備執行 shell 命令的權限;研究者在鏡像儲存庫中成功重現,只要在標題放入惡意提示詞,就能觸發命令執行。該流程與夜間自動發布工作流程共用 GitHub Actions 快取,因而形成一條可能通往發布機密憑證的路徑。另一方面,Cline 官方證實第三方曾利用一把仍有效的 npm token 發布夾帶額外腳本的 cline@2.3.0;但公開鑑識資料並無法證明該 token 是透過前述快取路徑取得。

Indirect Prompt InjectionSupply Chain CompromiseSupply Chain DefenseGitHub Security
7 項對應的 AIDEFEND 防禦手法

威脅分析

公開的 GitHub Issue 標題屬於不可信的外部輸入,但分類工作流程卻讓模型在預設分支的 runner 上直接取得 Bash 執行權限。研究者在鏡像儲存庫中證實,標題中的指示確實能誘發命令執行;而該流程與夜間自動發布工作流程共用的 GitHub Actions 快取,更形成了一條可能通往發布機密憑證的路徑。

  1. 研究者在 Issue 標題中放入惡意指示,誘導分類 agent 安裝攻擊者指定的套件。此入口點是在鏡像儲存庫中進行受控驗證,不能直接視為真實環境中的入侵路徑。
  2. 在鏡像環境中,Claude 分類工作流程順從標題中的指示,透過 Bash 執行了 npm install 命令;該套件的 preinstall 腳本隨即在 GitHub Actions runner 內執行。
  3. 研究者指出,攻擊者若利用低權限的分類流程在共用 Actions 快取中植入惡意內容,夜間自動發布工作流程就可能讀取該內容。Cline 官方確認了這項架構暴露風險,但公開證據並未證明後來的真實憑證竊取包含每一項快取操作。

後來發生的未授權發布事件,必須分開看待。公開鑑識資料目前無法證明,後來的發布者就是透過研究者所描述的快取路徑取得該憑證。

  1. Cline 官方證實,在接獲漏洞通報後誤撤銷了另一把 token;2 月 17 日,第三方利用那把仍處於有效狀態的 npm token,發布了未經授權的 cline@2.3.0。
  2. 該版本中唯一的未授權變更,是一段在 postinstall 時全域安裝合法 OpenClaw 套件的命令。Cline 鑑識調查指出,CLI 主程式並未遭竄改,亦未發現使用者資料外洩。

Cline 官方的事後檢討報告證實,確實有人未經授權發布了 cline@2.3.0,且先前撤銷 npm token 時誤刪了無關的物件;但公開資料並未完整還原第三方最初是如何取得該 token。套件中新增的 postinstall 腳本僅安裝了合法的 OpenClaw,官方並未發現 CLI 執行檔遭植入惡意程式碼,也未發現使用者機敏資料遭竊。

適用的 7 項 AIDEFEND 防禦手法

AID-H-018.002
Policy-Based Access Control
極高
在 claude-code-action 啟動分類工作前,應由可信工作流程預先安裝無法被 agent 改寫或繞過的 PreToolUse 授權 hook。該 hook 必須直接從已驗證的 GitHub 事件中取得 Issue 作者身分與任務類型,對公開 Issue 分類工作一律拒絕執行 Bash 與套件安裝命令;若 hook 發生錯誤或無法解析出上述事實,必須採預設拒絕(fail-closed)阻擋呼叫。工作流程的靜態 allowed_tools 清單也須移除這些能力;模型輸出的指示或 agent 自行寫入的 hook,不能作為授權依據。
AID-H-023
Publisher Integrity & Workflow Hardening
極高
以 OIDC 將 npm 可信發布綁定至受保護的 CI 工作流程,撤銷既有發布 token,並在套件設定選擇要求雙因素驗證且禁止 token 的選項,以阻斷遭竊 token 的發布路徑。只啟用可信發布不會關閉其他發布方式;上述 npm 設定仍允許獲授權者以互動式雙因素驗證發布。因此,只准由 CI 發布還需要組織落實發布政策,並查核 registry 設定與發布者權限。套件來源證明可供查核發布來源,但不能保證程式碼沒有惡意內容。
AID-H-017.002
Least-Privilege Tool Architecture
極高
公開 Issue 分類 agent 的工具清單應移除 Bash、套件安裝與檔案修改能力,只提供限定用途的唯讀、標籤管理及範本留言工具。若 agent 無法呼叫 shell 工具,Issue 標題中的惡意指示就不能透過這個 agent 在 runner 上執行;研究者示範的後續快取投毒路徑也會在此受阻。
AID-E-001.001
Root & Long-Lived Credential Object Eviction
極高
應直接在 npm 簽發端全面盤點所有維護者帳號底下具備發布權限的 token,精確識別出受本次事件影響的 token 物件並徹底撤銷,絕不能只看組織管理儀表板。撤銷後,必須從簽發端紀錄比對已撤銷的 token ID 或指紋;若在安全可控的前提下持有原憑證,應實際測試驗證其請求已被拒絕。組織管理頁面顯示「零個 token」,完全無法證明個別維護者帳號名下的個人 token 已經失效。
AID-H-022.001
Sandboxed Dependency Installation
高
持有發布機敏憑證的工作流程,絕不能從儲存庫共用的 Actions 快取中還原相依套件。發布工作應僅使用已簽章、經審查,且逐一列出允許套件物件與雜湊值的快取清單(manifest)來建立相依套件層,並以唯讀方式掛載至無網路連線的一次性安裝環境;只要有任何套件物件不在清單內或雜湊值不符,安裝流程必須直接中斷。如此一來,低信任的分類 runner 即使在共用快取中植入惡意內容,發布工作也不會從該快取取用未經核准的物件。
AID-E-004
Incident Exploit-Path Closure Verification
高
在分類流程、共用快取與發布憑證完成處置後,應由獨立的驗證人員重新讀回各防禦點實際生效的設定狀態:確認預設分支上的公開 Issue 分類流程已無 Bash 呼叫能力、發布工作不再還原不可信快取,且涉案的每把 npm token ID 在簽發端均已顯示撤銷。若安全持有舊憑證,應實際發送請求驗證其驗證失敗;若沒有舊憑證,就依簽發端紀錄確認撤銷狀態,不要寫成已用舊憑證實測。最後,在隔離的鏡像儲存庫中重新提交含惡意標題的 Issue,確認分類 agent 已無法執行原先的 shell 命令。
AID-E-003.003
Confirmed Malicious Code & Persistence Eviction
中
在發布端,應立即於 npm registry 將未經授權的 cline@2.3.0 標記為棄用(deprecated),並在企業內部鏡像庫中封鎖該版本;而在使用端組織中,應針對主機與 CI 映像檔全面盤點 cline 版本,將 2.3.0 汰換為 2.4.0 或更新的乾淨版本,並移除未經預期全域安裝的 OpenClaw 套件。此步驟專注於未授權發布的環境清理,官方鑑識並未發現二進位執行檔遭到竄改或有資料遭竊情事。

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

  • 全面清查 Cline CLI 安裝版本:確認環境中是否曾安裝 cline@2.3.0,並立即升級至 2.4.0 或更新的官方乾淨版本;若無使用需求,請一併移除被自動安裝的全域 OpenClaw 套件。
  • 限縮公開 Issue 分類 agent 權限:將處理公開輸入的 agent 限制為純讀取、打標籤與套用範本留言,徹底移除 Bash、套件安裝及檔案寫入能力,並與持有發布機密的作業流程完全隔離 Actions 快取。
  • 全面改用 CI/CD OIDC 可信發布:停用並淘汰長效 npm token,並於 npm 簽發端逐一清查維護者名下的所有憑證物件予以撤銷;核對確切的 token ID 或指紋,在安全可控的前提下實測確認舊憑證已無法通過驗證。

1 個額外的防禦考量

證據與部署界線

目前尚未查明真實環境中憑證竊取的確切路徑。快取投毒雖有研究分析與架構設計佐證,但不能直接等同於 2 月 17 日未授權發布事件的完整經過。
建議做法: 若曾安裝 Cline CLI,應檢查是否安裝過 2.3.0 版;請盡速升級至 2.4.0 或更新的乾淨版本,若無使用需求,亦應移除先前遭自動安裝的全域 OpenClaw 套件。

結論

AIDEFEND  對應的防禦手法作用在兩個關鍵位置:公開 Issue 分類 agent 不應取得 shell 執行能力;套件發布則應由受保護的 CI 工作流程透過 OIDC 執行,並以組織政策和權限設定限制其他發布方式。團隊還須隔離分類與發布工作的快取,並在 npm 簽發端撤銷受影響的 token。這些控制可防止惡意標題觸發命令執行,並降低遭竊 token 被用於發布的風險;實際的憑證竊取路徑仍待釐清。

最後更新: