回到頂部
深色資安實驗室中,amber 紅魚鉤鉤住信任邊界內的 AI 代理核心,象徵假錯誤報告劫持編碼代理

Agentjacking:一則假錯誤報告,就能劫持你的 AI 編碼代理

Tenet 揭露 Agentjacking:攻擊者用一則偽造的 Sentry 錯誤報告,就能誘導 Claude Code、Cursor 執行惡意程式,約 2,388 家組織暴露。給台灣團隊四條防線。

內容查核: 來源查核:

資安公司 Tenet Threat Labs 近期公開一種新的攻擊手法,取名 Agentjacking:攻擊者不需要駭進你的系統、不需要偷任何帳密,只要往你用的 Sentry 專案送進一則偽造的錯誤報告,就能劫持 Claude Code、Cursor、Codex 這類 AI 編碼代理,讓它用開發者自己的權限,在本機執行攻擊者指定的程式。Tenet 光靠公開資料就掃到 約 2,388 家組織暴露,實測對主流代理有 85% 成功率,連一家 市值約 2,500 億美元的 Fortune 100 科技公司,開發者的機器都在測試中執行了攻擊碼。

這件事真正的意義,不是「又一個 AI 漏洞」。它是 prompt injection 從「內容安全」升級成「供應鏈+執行層」真實攻擊的又一個案例。過去我們擔心的是模型被誘導講出不該講的話;Agentjacking 把同一個弱點推到更危險的地方——AI 編碼代理最大的資安風險,從來不是模型本身被駭,而是它被一段不可信輸入誘導,用自己的高權限去執行惡意動作。 而那段不可信輸入,只是一則假錯誤報告。

攻擊怎麼運作:合法的每一步,串成一條攻擊鏈

關鍵在兩個東西的交會。第一是 Sentry 的 DSN——那是一組公開、可寫入的憑證,Sentry 本來就設計成嵌在前端 JavaScript 裡,任何人打開網站原始碼都看得到,也就能往那個專案送事件。第二是 Sentry 的 MCP server:當開發者叫代理「幫我修掉 Sentry 上未解決的問題」,代理透過 MCP 把錯誤事件讀進來,並把它當成可信的系統輸出

攻擊者要做的,只是把惡意指令包裝成一則長得跟 Sentry 官方修復建議一模一樣的錯誤事件。代理讀到後分不出這是資料還是指令,就把「診斷步驟」照做——例如安裝一個攻擊者控制的 npm 套件,把 環境變數裡的 AWS 金鑰、GitHub token、git 憑證、私有 repo 網址 整包外傳。整個過程沒有釣魚、沒有事先入侵,開發者只是照平常的流程叫代理修 bug。

Tenet 把這叫「Authorized Intent Chain」(授權意圖鏈):攻擊者用合法 API 送事件、MCP 合法回傳、代理用開發者的合法權限執行——每一步都被授權,所以 EDR、WAF、防火牆、IAM 全都不會亮紅燈。這也是它比傳統入侵更難防的原因。

為什麼補不掉:模型分不清資料和指令

Tenet 說得很直接:這不是設定錯誤,是模型本身的限制。AI 代理讀到的東西,它沒有一條可靠的界線去區分「這是要我參考的資料」還是「這是要我執行的命令」。把一段指令藏在代理一定會讀、但人幾乎不會去看的地方(例如錯誤日誌),它就可能照做。

更麻煩的是責任歸屬。Tenet 通報後,Sentry 選擇不從根本修補,只針對這次研究用到的特定 payload 字串加了一層內容過濾,並認為緩解應該由模型供應商的中介層處理。但那種過濾是被動的——換個字串就能繞過,而「用一組可公開嵌入的 DSN 接受任意事件」這個底層機制沒有改變。Cloud Security Alliance 也已經把 Agentjacking 歸類為一種系統性的 MCP 漏洞類別,而非單一平台的 bug。這代表它 不只是 Sentry 的問題:Datadog、PagerDuty、Jira,任何會把「外部可控內容」餵給代理的 MCP 資料源,都有同一個盲點。

台灣團隊:你正好站在攻擊面上

這一段是台灣讀者最該對號入座的地方。台灣工程團隊大量在用 Claude Code、Cursor,而且為了效率,常把代理直接接上公網來源——GitHub issue、Sentry 或其他錯誤監控、外部 API 的回應。這些正是 Agentjacking 的入口。你不需要被特別針對,只要你的 Sentry DSN 攤在前端、代理又有 shell 執行權限,你就落在那份暴露名單的風險輪廓裡。

這和我們先前談過的 AI 編碼代理供應鏈攻擊台灣資安的信任邊界框架 是同一條主線:問題不在單一漏洞,而在於代理把不可信來源當成了可信輸入。

四條可以今天就上的防線

一、不可信輸入永遠不當指令。 錯誤報告、issue、外部 API 回應、日誌,對代理來說都是「資料」,不是「命令」。在系統提示與工具設計上明確標記外部內容為不可信,禁止代理直接執行來自這些來源的步驟。

二、最小權限。 給代理的 token 和帳號要範圍受限、可撤銷;讀資料用唯讀、短期憑證,別讓一台開發機同時握著生產金鑰。

三、高風險動作人工確認。 安裝套件、執行 shell、對外連線、寫入檔案——這些動作預設要停下來等人點頭,別開全自動。

四、鎖工具權限。 用 allowlist 限制代理能呼叫的工具與指令。Tenet 也開源了 agent-jackstop,提供可直接套用的 Cursor、Claude Code 強化設定,專門降低來自不可信遙測與日誌的風險,值得先拿來當基線。

想看完整的代理式攻擊全貌,可以對照 JADEPUFFER 代理式勒索 那一篇——同樣是「合法權限被自動化濫用」的故事,只是入口換成一個舊漏洞。

常見問題

我沒有用 Sentry,是不是就沒事?

不是。Sentry 只是這次被示範的入口。真正的弱點是「代理把外部可控內容當成可信指令」,任何會把外部內容餵給代理的 MCP 資料源都適用——Datadog、PagerDuty、Jira、issue 追蹤、日誌聚合都在內。該檢查的是:你的代理有沒有 shell 執行權限、接了哪些外部來源。

把 Sentry DSN 藏起來不要放前端,是不是就安全了?

能降低被鎖定的機率,但不是根本解。DSN 本來就被設計成公開可寫入,而問題核心是代理不會區分資料和指令。就算換一個資料源、或攻擊者用別的方式送進內容,只要代理照著外部內容執行動作,風險就還在。真正的解法是最小權限加上高風險動作人工確認。

Claude Code、Cursor 之後會修掉嗎?

這更像是整個代理生態要一起面對的系統性問題,而不是單一產品一次修補就能解決。Tenet 明說這是模型層的限制,Sentry 也把緩解推給模型供應商。實務上別等官方,先用最小權限、工具 allowlist、人工確認把自己的攻擊面收好,並參考 agent-jackstop 這類強化設定。

參考來源

№ · further reading

延伸閱讀