Downloads 裡的 AGENTS.md 為何會變成攻擊入口?Forever 公開 AI 程式代理劫持研究
Forever Security 發現 Downloads 中的 AGENTS.md 曾誘導程式代理安裝惡意套件,並重建 Codex、Claude Code 攻擊鏈。解析真實事件與測試差別、設定檔風險及工作目錄檢查方法。
把下載的壓縮檔交給 AI 整理,看起來只是省下找檔案的時間。但代理從哪個資料夾開始工作,也可能決定它先讀到 AGENTS.md 裡誰寫的指示。
Forever Security 在 2026 年 10 月 22 日公開研究,稱曾在一台客戶電腦的 Downloads 資料夾找到惡意 AGENTS.md,代理依它指示嘗試安裝惡意套件,並被安全產品及時攔下。
AGENTS.md 是提供專案規範的純文字文件。它不會像一般程式自己執行,卻可能讓能操作檔案與工具的代理,把裡面的要求當成下一步工作。
研究者隨後在隔離環境重建 Codex 攻擊鏈,另為 Claude Code 設計轉移 API 連線的測試。API 是程式向模型服務提出請求的介面。這些結果說明風險可行,不能改寫成真實客戶已被盜取權杖,或所有瀏覽者都會中招。
我會把工作目錄當成需要先檢查的輸入來源,尤其不讓整理下載檔案的方便,順手變成改寫代理全域設定的授權。
要知道這個界線在哪裡,先要把真實客戶遭攔阻的事件,和研究者後來重建的攻擊路徑分開。
Forever 在真實客戶電腦上發現了什麼?
真實觀察是一個被攔阻的惡意套件安裝嘗試,指令來自 Downloads 裡的 AGENTS.md。這是Forever Security 原始研究與後來測試的共同起點。
事件中,安全產品先發現代理正要安裝已知惡意的套件,再往前追查它為何要這樣做。研究者說,這次要求來自下載資料夾內的指令文件,與專案相依套件或正常程式庫設定不同。
因此,這項差別會改變調查方向。只檢查使用者有沒有主動執行下載程式,可能看不到代理把純文字轉成工具操作的過程。
報告指出,客戶電腦上的嘗試在惡意程式執行前就被阻擋。因此,能確認的是曾出現可疑指令與安裝動作,不能把它擴寫成客戶電腦已被完全接管。
檔案到達方式仍然未知
不過,研究者沒有確認那份檔案如何進入客戶的 Downloads。後來用受控網頁展示下載方式,證明的是一條可行的傳遞路徑,並沒有替真實事件補上尚缺的證據。
所以這也限制了新聞可以下的結論。不能只因網頁下載在技術上可行,就說原攻擊一定由使用者看過某個網站發動,更不能推成所有人只要開網頁就會感染。
把這兩件事分開,仍不會削弱原事件的警訊:代理已經遇到一份來源不明、卻像專案規範的文件,而且一度依它安排後續工作。
因此,要查的是文件怎麼被提升成操作依據,以及操作是否越過使用者原本要整理檔案的範圍。這比只按副檔名判斷檔案是否危險更貼近這次事件。
要讓這份文字影響代理,還必須碰上代理如何尋找工作目錄指示的規則。

AGENTS.md 為何能影響程式代理?
程式代理會在啟動工作時讀取適用的指令文件,因此文件來源與當下工作目錄都會影響它收到的要求。AGENTS.md 原本用來交代測試、程式風格與專案工作方式。
OpenAI 的指令文件說明指出,Codex 會組合全域與專案層級的規範。找到專案根目錄時,會沿路讀到目前工作目錄。找不到專案根目錄時,則只檢查當前目錄。
因此,在專案裡工作和直接在 Downloads 啟動,並不是同一個輸入環境。後者可能把剛下載、尚未核對來源的文件,放進代理尋找規範的位置。
純文字不會自己跑,代理卻能照著做
雖然一般文字檔沒有執行權限,也不會自己安裝程式。但如果讀取它的軟體能修改檔案、呼叫終端機與連線,文字就有機會影響那些能力如何被使用。
這不是說每個 Markdown 檔都會被自動執行。檔名、所在位置、工具的文件探索規則,以及工作目錄是否受信任,都是攻擊能否繼續的條件。
Forever 在研究中也提到 Codex 的信任關卡:代理不會對任意未受信任目錄的 AGENTS.md 都照單全收。曾把下載資料夾當工作區使用,才會使這個前提變得值得注意。
文件的內容也刻意像一般工程指引。研究者發現,短而直接的安裝要求較容易遭拒,長篇規範包住的「例行準備工作」則較可能被接受。
所以風險不只在某個關鍵字,而在來源與權限被混在一起。文件可以提供專案資訊,並不表示作者因此取得改動代理自身設定的資格。
當文件不只描述專案,還要求改寫代理自身設定時,影響範圍就可能越出目前的資料夾。
Codex 測試如何讓影響留到其他專案?
研究中的 Codex 路徑,利用看似例行工具設定的文字,要求代理修改機器層級的工具設定。這使一次資料夾內的指令,有可能變成之後工作階段的啟動行為。
報告提到的目標是 ~/.codex/config.toml。這是代理使用的全域設定位置,和只存在於某個下載檔案旁的備註不同。
攻擊文件把一個套件包裝成專案需要的工具伺服器,要求登記進設定。MCP 是代理連接外部工具的協定。工具伺服器設定若能在啟動時執行命令,就不只是多加一段說明文字。
從一個工作階段跨到下一個
研究者說,這些伺服器在工作階段開始時載入,因此改寫設定不一定立刻影響原來連線。攻擊文件另要求啟動子工作階段,假裝是在確認環境已準備好。
如此一來,原本應由人確認的新工具,就被包進「先做設定、再驗證設定」的連續步驟。代理若把兩者都當成任務必要準備,就會替陌生來源完成更多操作。
文件還試圖說服代理停用原有保護來完成驗證。這表示來源不明規範正在要求擴大自己的執行能力。
而全域設定也使影響不會隨離開 Downloads 自動消失。若工具已被登記,之後在其他正當專案啟動工作,也可能讀到相同項目。
這不代表看到陌生文件後,所有設定都必然已遭修改。檢查時要分清文件存在、設定已改、程序已執行等不同階段,才能決定需要處理哪一層。
另一條路徑沒有先追求安裝套件,而是改變 Claude Code 要把模型請求送去哪裡。
延伸閱讀:Claude Code Mods 團隊管理:核准外掛之前,先分清權限與部署範圍
Claude Code 的連線轉向測試代表什麼?
Forever 為 Claude Code 設計的測試,把專案模型端點改到研究者控制的伺服器,再觀察登入權杖與工具回應。這是另外製作的受控測試,不是從真實客戶機器發現第二宗完整攻擊。
研究者使用 CLAUDE.md 包裝成內部模型閘道的準備說明,誘使代理把連線位置寫進專案設定。端點就是程式要把請求送往的服務地址。
所以若地址改成攻擊者控制的服務,原本應交給模型供應商的請求便可能走向別處。研究者表示,他們因此取得測試用的登入權杖,並驗證能以該身分呼叫服務。
有有效憑證,仍要確認目的地
受控伺服器具有正常的 TLS 傳輸加密憑證。問題不是加密協定遭破解,而是程式把原本不該收到資料的一方,當成了新的連線對象。
因此,把它形容成「權杖在網路上明文傳輸」並不精確。就算傳輸過程有加密,目的地控制者仍可能看見送到自己伺服器的內容。
而改變目的地也會影響接下來收到什麼。研究者能以模型服務的形式回傳工具要求,讓客戶端把攻擊者安排的操作視為模型回應的一部分。
原有工作階段通常沿用啟動時建立的連線,所以另開工作階段會影響新設定何時被使用。研究中用來「驗證設定」的子代理,正是試圖讓變更在同一次工作裡生效。
這說明看似無害的驗證要求,也要看它驗證了什麼、從哪裡重新載入設定。檢查一份資料表欄位,不應自然變成更改模型端點或授權陌生服務的理由。
兩種路徑都在文字與工具權限相接時產生風險,但測試比例必須放回各自條件解讀。
九成、五成與半數客戶,分母有何不同?
報告中的比例描述不同測試與客戶遙測,不能合併成所有開發者的受害率。熱傳文章把它們放在一起時,最容易遺失的就是測量對象。
Forever 表示,Codex 在其測試中有超過九成嘗試完成了攻擊路徑。Claude Code 測試約有一半跟進所設計的流程,同一次工作階段內執行程式的情況則約為五分之一。
但這些數字沒有附上完整樣本數與版本配置,不能拿來推估任何讀者今天開一次工具就會中招的機率,也不是兩個產品在所有條件下的安全排名。
觀察到使用習慣,不等於觀察到受害
另外,報告說,自家遙測中約半數客戶曾在 Downloads 內啟動程式代理,約四分之一代理工作階段開啟真實瀏覽器。這是使用情境的分布,不是惡意程式成功安裝的比例。
因此,「全球半數開發者做過」和「半數使用者受害」都超出了原資料。研究沒有公布能代表整個開發者群體的抽樣方式。
而測試材料也要分開。報告說明多數測試採會開啟計算機的替代行為,另外曾在隔離虛擬機中執行真實惡意套件,以確認路徑可行,不能把每一筆嘗試都寫成真實受害。
作者認為這是多種正常功能交會造成的問題,並主張不能靠單一修補處理。這屬於研究者的分析,不是 OpenAI 或 Anthropic 已發布永不修復的正式承諾。
因此,實務防範應針對已展示的信任轉移路徑,而不是依熱傳比例猜自己有沒有被攻擊。
如何切開下載資料與代理的設定權限?
把來源不明檔案先當資料檢查,再放進獨立工作目錄,能避免整理內容時一併接受陌生指令。目錄分開的目的,是讓資料來源和工作規範不會因位置相同而混在一起。
對需要整理下載內容的人,可以先確認資料夾裡是否有未經自己加入的指令文件,再決定哪些內容要交給代理。換到新目錄仍要檢查帶過去的檔案,並不是搬家就自動安全。
檢查要跟著影響範圍走
若已出現不明工具註冊或模型連線位置,應交由管理者核對設定來源、變更時間與實際使用情況。全域工具和專案端點的影響範圍不同,處理方式也不應混成刪一個文字檔就結束。
Forever 建議保留批准關卡與沙箱,並對要求繞過它們的文件保持警覺。這些控制能限制可做的動作,和單靠模型辨認語氣是否可疑,是兩種不同防線。
因此若調查確認登入資料可能已送到不應接收的一方,還需要由帳號負責人處理撤銷與輪替。刪除指令檔不會自行使已外流的有效權杖失效。
我認為這份研究最值得帶走的,是把「能讀」和「能授權」分開。日常使用可以讓代理協助理解陌生資料,但改設定、接工具與送出憑證,應有自己清楚知道的來源與目的。
要守住的,是哪些文字可以提供資訊,哪些操作必須由使用者與工具權限明確允許。
延伸閱讀:OpenAI AI 代理安全事故:53 起使用者圖片外傳、政府網站事件與 Hugging Face 入侵怎麼看?
常見問題
任何 AGENTS.md 都是惡意檔案嗎?
不是。它原本是專案規範文件,風險來自來源不明內容被當成可操作指令。需要核對作者、位置和實際要求,不能只看檔名。
真實客戶已被竊取 Claude 登入權杖嗎?
原報告沒有這樣證明。真實事件是被攔阻的安裝嘗試,Claude Code 端點轉向與權杖測試是研究者另外建構的控制環境結果。
只要避開 Downloads,就能保證安全嗎?
不能。這能減少下載資料和指令規範混在一起的情況,來源不明專案、工具設定與其他資料也仍需檢查。保護應跟著可讀內容與工具權限設計。