SymJack: The Symlink Is the Host's Problem. The Payload Is a Detection Problem.
SymJack (Adversa AI, 2026-05-26) symlink-hijacks an approved file copy to overwrite an AI coding agent's .mcp.json or .claude/settings.json with a malicious MCP server. Most affected vendors declined to patch. The symlink is a filesystem problem the host must fix — but the payload it plants is one an open detection-rules layer already flags. Run it through ATR and 15 rules fire, reproducibly.
_SymJack 是兩個攻擊穿同一件風衣。聰明的那一半——用 symlink 把「複製這個影片檔」變成「覆寫我的 agent 設定」——是主機與檔案系統的問題。另一半,被植入的東西,是一個惡意 MCP server,而那是規則層早就解決的偵測問題。_
SymJack 做了什麼
Adversa AI(Rony Utevsky)在 2026-05-26 揭露 SymJack。惡意 repo 附帶一個指令檔(CLAUDE.md / AGENTS.md)加上一個 symlink,用無害的檔名(docs/vid-settings.mp4)指向 .claude/settings.json 或 .mcp.json。Agent 請使用者核准一個看似無害的 cp media/vid0.mp4 docs/vid-settings.mp4;kernel 跟著 symlink 走,把真正的設定覆寫成植入的 MCP server,下次重啟就執行子行程。Claude Code 只有部分修補(v2.1.129);Cursor、Gemini、Antigravity、OpenAI Codex CLI 拒絕修補;GitHub Copilot 與 Grok Build 還在評估。
投遞 vs payload
symlink 加上核准提示的欺騙是主機層的控制——agent 與作業系統必須阻止一個被核准的檔案操作跟著 symlink 進入設定路徑。內容偵測層看不到這個,也不該假裝看得到。但攻擊植入的東西——一個 command 是 node、帶 inline -e 旗標呼叫 child_process.exec 的 MCP server——正是規則層天生要抓的惡意 MCP server 形狀,不管它怎麼進到硬碟。
ATR 早就抓得到
我們把 SymJack 植入的 payload 丟進開源的 Agent Threat Rules 引擎,對著目前的規則集、沒有加任何 SymJack 專屬規則。從 pyatr import scan、把每個 match 的 rule_id 印出來,對這個 payload 回傳 15 個命中(在 450 條規則的語料庫上)——包含 ATR-2026-00010(critical)、ATR-2026-00415(critical)、ATR-2026-00419(cursor-mcp-zero-click-config,critical)、ATR-2026-00541(high)。惡意 MCP server 的形狀早就被涵蓋。投遞手法是新的;payload 的形狀不是。
每一層各看到什麼
| 層 | 看得到 symlink 把戲? | 看得到被植入的 MCP server? |
|---|
|---|---|---|
| 主機 / 檔案系統 / 核准 UI | 看得到——修補該在這裡 | — |
|---|
| Runtime LLM 輸出 guardrail | 看不到 | 看不到,它跑在輸出階段 |
|---|
| MCP / skill 內容掃描 | 看不到 | 看得到——ATR 規則在這裡命中 |
|---|
| Process / EDR | 部分(設定被寫、子行程) | 部分 |
|---|
我們沒有在宣稱什麼
ATR 偵測不到 symlink 或核准欺騙本身——那是主機層的控制,而修補的責任在受影響的 vendor,不在規則層。偵測層是補強主機修補,不是取代它。上面的 payload 覆蓋是真的、可重現的,但它也不保證能擋下未來每一種 MCP server payload 的混淆。誠實的分層,不是萬靈丹。
這週可以做什麼
主機端:把 agent 設定路徑(.mcp.json、.claude/settings.json、.cursor/mcp.json、.gemini/settings.json)當成完整性敏感的檔案——阻止被核准的檔案操作把 symlink 解析進這些路徑,並在拉取不信任的 repo 後檢查設定來源。偵測端:在初始化 MCP server 定義之前,掃描其中帶 inline-exec 旗標的直譯器命令(node -e、python -c)——ATR 的 MCP-poisoning 規則在任何接受 ATR 格式的 runner(npm、MISP、Cisco AI Defense)裡都能做到。
_Adam Lin 維護 Agent Threat Rules,一套開源、MIT 授權的 AI agent 威脅偵測語料庫。ATR 規則已在 Microsoft、Cisco、MISP 生產環境運行。Panguard AI 創辦人,圍繞 ATR 標準打造商業產品。聯絡:[email protected]_