返回
2026/10/29
惡意 AGENTS.md 與 CLAUDE.md 檔案:Downloads 資料夾如何劫持 AI 程式設計代理
Downloads 中被植入的指示檔案試圖讓 AI 程式設計代理安裝 npm 惡意軟體。本文說明事件經過、研究結果與防禦方法。
重點摘要
- 使用者
~/Downloads資料夾中被植入的AGENTS.md檔案,指示 AI 程式設計代理安裝一個已知的惡意 npm 套件。這次嘗試在任何程式碼執行之前就被攔下。 - 在實驗室測試中,OpenAI Codex 在超過 90% 的嘗試中遵循了惡意指示檔案,Claude Code 則約有一半的情況會遵循。
- 這不是修補程式能解決的漏洞。代理會信任其啟動資料夾中的指示檔案,而瀏覽器可以將檔案寫入 Downloads。
- 主要的防禦方式很簡單:不要在 Downloads 中啟動代理;閱讀並非由您撰寫的指示檔案;檢查代理設定中是否有您未設定的端點;保持核准與沙箱功能開啟。
事件經過
2026 年 10 月 22 日,資安公司 Forever Security 發表了由 Gal Weizman 與 Omer Samet 撰寫的文章〈Markdown Is the New Executable〉。文章描述該公司一位客戶電腦上發生的真實事件。一個 AI 程式設計代理正在使用者的 ~/Downloads 資料夾中工作,該資料夾中的 AGENTS.md 檔案指示它安裝惡意 npm 套件 function-color。Forever 在套件安裝之前、在任何惡意程式碼執行之前就停止了這個代理。
沒有人知道這個檔案是如何進入 Downloads 資料夾的。Forever 表示無法判定這一點,BleepingComputer 與 The Hacker News 的報導也重申了這一點。之後,Forever 建立了實驗室示範,展示網頁如何植入這類檔案,以及代理會如何處理它。
這個套件本身並不新。Checkmarx 與 CloudSEK 將 function-color 與 MALFEX npm 攻擊活動連結在一起。該套件只是一個引入 function-flag 的輕量包裝,而 function-flag 的安裝指令碼會從遠端伺服器下載並執行進一步的酬載。這項攻擊活動以 Windows 為目標,根據 Checkmarx 的報告,其操作者自 2023 年 8 月以來一直很活躍。我們在 2026 年 10 月 29 日檢查 npm 登錄庫時,function-color、function-flag 與 cdn-img-fetch 都已被替換為 npm 的 0.0.1-security 預留套件。
為什麼一個 Markdown 檔案能操縱代理
Forever 的論點建立在兩種平常的行為上,兩者結合後就會變得危險。
- 代理會自動載入指示檔案。程式設計代理在啟動時會讀取專案的指示檔案,並將其視為使用者的指引。Codex 會讀取從專案根目錄到目前資料夾路徑上的
AGENTS.md;如果沒有專案根目錄,則只讀取目前資料夾中的檔案。Claude Code 會從其啟動的資料夾以及上層的所有資料夾載入CLAUDE.md;當沒有CLAUDE.md時,則改為讀取AGENTS.md。 - 網頁可以將檔案寫入 Downloads。根據 BleepingComputer 的報導,Chrome、Edge 與 Firefox 預設會將檔案存到 Downloads,而不會詢問儲存位置。網頁可以決定檔案的名稱與內容。Markdown 檔案不是程式,因此作業系統針對下載的執行檔所做的檢查,不會將其視為危險檔案。
兩者結合,代表網頁可以放下一個檔案,而代理之後會把它當成指示來讀取。代理甚至不需要在一般意義上被「欺騙」:它只是照著設計運作。Forever 也指出,有些代理會自行瀏覽網頁。在這種情況下,可能根本沒有人看到下載發生。
同樣的邏輯也適用於 Downloads 以外的地方。任何不受信任的內容能夠到達的資料夾都可能成為目標:剛複製下來的儲存庫、解壓縮的封存檔或共用資料夾。以 Claude Code 為例,即使專案被解壓縮到 Downloads 的某個子資料夾中,也會載入位於 Downloads 本身的 CLAUDE.md,因為上層資料夾中的檔案同樣會被載入。
研究證實了什麼
Forever 測試了兩個代理。大多數測試使用的是無害的替代酬載(開啟小算盤)。真正的惡意套件只在一台隔離的虛擬機器中執行過一次。
OpenAI Codex
研究人員沿用了客戶電腦上真實的 AGENTS.md。該檔案指示 Codex 在其全機適用的設定檔 ~/.codex/config.toml 中新增一個 MCP 伺服器項目。該項目會在啟動時執行一道指令來安裝這個 npm 套件。由於這項設定是全域性的,此變更會延續到該電腦之後的每一個 Codex 工作階段,而不只是讀取該檔案的那個工作階段。Forever 表示,這次攻擊需要幾種變通手法:冗長乏味的文件風格、以繞過沙箱的旗標啟動的子工作階段,以及一種避開 Codex 啟動逾時的啟動方式。即便如此,Codex 仍在超過 90% 的嘗試中執行了酬載。
Claude Code
針對 Claude Code,研究人員自行撰寫了一份 CLAUDE.md,偽裝成內部 API 閘道的設定說明。它要求 Claude 將 ANTHROPIC_BASE_URL 設定寫入專案的 .claude/settings.json,把 API 流量導向研究人員控制的伺服器。根據 Forever 的說法,這會洩漏工作階段的 OAuth 權杖,也能讓攻擊者的伺服器冒充模型並回傳工具呼叫,包括在停用沙箱的情況下執行的 shell 指令。Forever 示範了權杖竊取(重送權杖以冒充受害者)以及下次啟動時的程式碼執行。他們也展示了一條透過啟動子代理,在同一工作階段內觸發攻擊的途徑。
這種方式的可靠度較低。Claude Code 在寫入設定檔之前會請求核准,而且經常拒絕可疑的變更。Forever 回報的成功率約為一半,而同一工作階段的子代理途徑則約為五次中成功一次。
尚未證實的部分
- Forever 並未查明真實檔案是如何進入客戶的 Downloads 資料夾。網頁下載途徑是經過示範的可能性,而非已確認的原因。
- 只測試了 Codex 與 Claude Code。Forever 認為其他會載入指示檔案的代理也以同樣方式暴露於風險中,但並未進行測試。
- 相關文章沒有列出具體的工具版本,也沒有報導廠商的聲明。Forever 的立場是「這裡沒有什麼需要 OpenAI 或 Anthropic 修補的」:代理正在依照設計運作。
為什麼這很重要
指示檔案看起來像文件,因此很容易被忽略。但實際上它們的作用類似設定,而透過具有 shell 存取權限的代理,它們還可能像程式碼一樣發揮作用。以下三點讓這項風險變得切實可見:
- 代理經常在 Downloads 中啟動。人們會使用代理來整理檔案,或處理剛下載的內容。Forever 向 BleepingComputer 表示,其數百家客戶在 Downloads 中執行程式設計代理,在那裡啟動的 Claude Code 工作階段超過 1,300 個。
- 影響會持續到工作階段結束之後。被變更的全域設定、新增的 MCP 伺服器或被重新導向的 API 端點,在原始檔案刪除後仍會繼續運作。
- 憑證才是真正的目標。被竊取的代理工作階段權杖就是一組可用的登入憑證。攻擊者不需要在電腦上執行任何程式碼就能使用它。
實用的防禦措施
1. 選擇代理的啟動位置
- 切勿在
~/Downloads或任何瀏覽器、電子郵件、聊天應用程式會寫入的資料夾中啟動程式設計代理。請先將工作內容移動或複製到專用的工作區資料夾。 - 也應避免在家目錄中啟動代理,而應在特定的專案資料夾中啟動。BleepingComputer 指出,OpenAI 與 Anthropic 也提出了同樣的建議。
- 可以考慮將瀏覽器設定為每次下載時詢問儲存位置。這會多一次點擊,但能阻止無聲無息的下載。
2. 尋找並非由您撰寫的指示檔案
搜尋不受信任的檔案容易落腳的位置以及您的家目錄。在 Linux 與 macOS 上:
find ~/Downloads ~/Desktop ~ -maxdepth 3 \( -name AGENTS.md -o -name AGENTS.override.md -o -name CLAUDE.md -o -name CLAUDE.local.md \) -print 2>/dev/null | sort -u
在 Windows 上,使用 PowerShell:
Get-ChildItem $HOME\Downloads, $HOME\Desktop -Recurse -Depth 3 -Force -ErrorAction SilentlyContinue -Include AGENTS.md, AGENTS.override.md, CLAUDE.md, CLAUDE.local.md | Select-Object FullName, LastWriteTime
在讓代理接觸之前,請閱讀找到的每一個檔案。對於要求安裝套件、新增伺服器、變更 API 端點或關閉核准的指示,要高度警覺。同時也請檢查您的個人指示檔案 ~/.codex/AGENTS.md 與 ~/.claude/CLAUDE.md,因為它們適用於每一個工作階段。
正當的專案指示檔案說明的是專案如何建置與測試。它沒有理由變更代理的全域設定、API 端點或安全性設定。任何要求進行這類變更的檔案都應視為惡意檔案。
3. 檢查代理設定中是否有並非由您做出的變更
依照 Forever 的建議,尋找意料之外的 MCP 伺服器設定區塊、被變更的 chatgpt_base_url,或您未設定的 ANTHROPIC_BASE_URL 及其他 API 端點:
grep -nE '^\[mcp_servers|base_url' ~/.codex/config.toml
grep -nE 'BASE_URL|mcpServers' ~/.claude/settings.json .claude/settings.json .claude/settings.local.json .mcp.json 2>/dev/null
使用 Claude Code 的團隊可以透過受管理設定集中強制套用設定,也可以使用 ConfigChange 掛鉤在工作階段期間稽核或封鎖設定變更。
4. 保持防護機制開啟
- 保持核准提示與沙箱處於啟用狀態。除非是在用完即丟的環境中,否則不要使用繞過它們的旗標,例如 Codex 的
--dangerously-bypass-approvals-and-sandbox或 Claude Code 的--dangerously-skip-permissions。 - 仔細閱讀針對設定檔與組態檔的核准提示。在 Claude Code 的測試中,約有一半的情況正是核准步驟阻止了攻擊。
- 在新資料夾中接受 Claude Code 的工作區信任對話方塊之前,請先閱讀其內容。
- 在虛擬機器或開發容器中處理不受信任的儲存庫與下載內容,而不是在您的主要工作站上。
- 對於 npm,請封鎖已知的 MALFEX 套件,並考慮對未經審查的安裝使用
ignore-scripts。
5. 如果發現被植入的檔案
- 不要在該資料夾中啟動代理。保留一份檔案副本以供調查,然後將其從該資料夾中移除。
- 檢查上方列出的代理設定檔,移除任何並非由您新增的內容。
- 假設代理的工作階段權杖可能已經外洩。登出後重新登入,並輪替代理能夠存取的所有 API 金鑰。
- 在鎖定檔與
node_modules資料夾中搜尋function-color與function-flag。如果曾安裝其中任何一個,請將該電腦視為已遭入侵,並依照您的事件應變流程處理。
更宏觀的角度
Forever 的文章標題是「Markdown Is the New Executable」(Markdown 是新的執行檔)。對於代理當作指示讀取的任何檔案,這都是一種實用的思考方式。指示檔案決定了具有 shell 存取權限的代理下一步會做什麼,因此值得像對待指令碼一樣謹慎:了解它們的來源、審查對它們的變更,並讓它們遠離網際網路上任何人都能寫入的資料夾。這裡的因應措施主要是習慣而非修補程式,採用的成本也很低。
參考資料
- Forever Security,〈Markdown Is the New Executable〉(2026 年 10 月 22 日),原始來源
- BleepingComputer,〈AI coding agents hijacked using AGENTS.md file in Downloads folder〉(2026 年 10 月 25 日)
- The Hacker News,〈Malicious File in Downloads Folder Tries to Trick AI Coding Agent Into Installing Malware〉(2026 年 10 月 26 日)
- Checkmarx,MALFEX npm 惡意軟體攻擊活動(2026 年 10 月 5 日)
- CloudSEK,MALFEX 惡意 npm postinstall 供應鏈攻擊活動
- OpenAI,Codex AGENTS.md 文件
- Anthropic,Claude Code 記憶(CLAUDE.md)文件與 Claude Code 安全性文件
Global
Japan
Korea
China
Vietnam
Thailand
Indonesia
Portugal
Spain
France
Germany
Egypt
Russia