Claude Code 擴充套件被植後門:Cursor 市集 11 小時、5,000 人中招

Anthropic 官方 Claude Code 的 VS Code 擴充套件在 Cursor 市集被換成含 SSH 後門的版本:10 月 29 日上架約 11 小時、官方稱最多 5,000 名用戶受影響。後門會寫入 authorized_keys、開反向 SSH 隧道、用 LaunchAgent/crontab/排程工作做持久化,還會回傳 40 個環境變數名稱。本文整理時間線、三平台行為對照、一行自檢指令、各方說法矛盾處,以及為什麼「卸載擴充套件」不等於清乾淨。

  • Dennis
  • 9 分鐘閱讀
Claude Code 擴充套件被植後門:Cursor 市集 11 小時、5,000 人中招

Anthropic 官方 Claude Code 的 VS Code 擴充套件,在 Cursor 市集被換成含 SSH 後門的版本。惡意版本 2.1.313 在 2026 年 10 月 29 日上架約 11 小時,Cursor 官方公告稱最多 5,000 名用戶受影響。

這起事件最刺眼的地方不是「AI 工具被駭」,而是攻擊者根本不需要動到 Anthropic:只要在一個第三方市集裡,用同一個發行者身分推一個版本上去,所有開啟自動更新的開發者就會自己把後門裝進來。對每天把 IDE 當半個作業系統用的工程師來說,這是一個新的常態風險。

時間線:11 小時發生了什麼

時間(太平洋時間 PT)對應台灣時間事件
10/29 02:2710/29 17:27惡意版 anthropic.claude-code 2.1.313 開始在 Cursor 的擴充套件市集提供下載
10/29 白天10/29 晚間以 EDR 起家的 Phorion 偵測到異常,研究員 Kevin Beaumont 同步擴散
10/29 13:3510/30 04:35Cursor 下架惡意版本、封鎖後續散布
10/29 當日10/30 凌晨Cursor 進一步「整個 VS Code 市集關閉」做全面稽核,確認沒有其他套件被同樣手法篡改
10/29–10/30—Cursor 輪換內部金鑰、重建市集後重新上線;並與雲端業者合作把攻擊者伺服器下線
10/3010/30Anthropic 在各官方通路發出乾淨的 2.1.314

暴露窗口約 11 小時,換算下來是一個上班日的三分之一。Cursor 在公告裡把影響上限寫得很明確:「At most 5,000 users were affected, and we will reach out directly.」

後門做了什麼:66 行的 IIFE,跑在你的 activate 之前

Phorion 的技術通告指出,被篡改的 extension.js 最前面被塞進一段 66 行的立即執行函式(IIFE),後面才是正常的擴充套件程式碼。這一點很關鍵:它不需要你打開 Claude Code、不需要你輸入任何 prompt、不需要你跟它互動,只要 Node 載入這個檔案,payload 就已經跑完。

它拉進來的模組全是 Node 內建的:child_process、fs、os、path、http、crypto。

階段行為細節
偵察收集主機資訊主機名、使用者名、OS/架構、home 路徑、工作目錄、git config --global user.email、對外 IP(查 ifconfig.me/api.ipify.org)
盤點環境變數名稱清單抓最多 40 個符合 KEY/TOKEN/SECRET/PASS/AWS/GCP 的變數「名字」,不含值
植入寫入攻擊者公鑰以 svc-telemetry 為標籤的 Ed25519 公鑰附加到 ~/.ssh/authorized_keys(必要時建立目錄,權限設 0700/0600)
通道反向 SSH 隧道用內嵌的私鑰(標籤 svc-telemetry-tun)連 134.209.82.225:22,開反向隧道;背景腳本約每 60 秒重試
外傳Beacon以明文 HTTP POST 到同一個 IP 的 8099/beacon,回報主機資訊與後門各階段狀態
持久化三平台各自開路見下方對照表

「只抓變數名稱、不抓值」這個設計很多人會誤讀成「影響有限」。實際上它的用途是資產盤點:攻擊者一眼就知道哪幾台機器上有雲端憑證或 API token,該優先打哪一台。Cursor 的公告也特別提醒:這裡沒有收到值,不代表後續不能透過那條隧道去拿。

三平台持久化對照

平台持久化方式落地檔案失敗點
macOSLaunchAgent,標籤偽裝成 com.apple.sysmond(看起來像 Apple 系統服務),RunAtLoad 與 KeepAlive 都設 true~/Library/LaunchAgents/com.apple.sysmond.plist、~/.config/.smt、~/.config/.smtk、$TMPDIR/.stk_<10 碼 hex>需要管理員權限才能開 SSH 服務
Linux使用者 crontab 寫入 @reboot 項目~/.config/.smt、~/.config/.smtk、/tmp/.stk_*副作用:有通告指出它的 crontab 寫入邏輯會在重複執行時覆蓋掉使用者原本的其他 cron 工作
Windows建立名為 SysMon 的排程工作並嘗試以 SYSTEM 執行;失敗則退回 Startup 資料夾%USERPROFILE%\.ssh\authorized_keys、%USERPROFILE%\.config\smt.cmd、%USERPROFILE%\.config\smtk、%TEMP%\.stk_*、…\Startup\sysmon.cmd一般權限下開服務與建 SYSTEM 排程都會失敗;且有通告指出它的命令輔助函式硬編了 /bin/sh,在原生 Windows 跑不起來

為什麼 macOS 上「多數人打不進去」——一個 bug 救了半條命

這是整起事件最值得記錄的細節:後門在 macOS 上有個實作錯誤,讓它在多數機器上拿不到互動式登入。

流程是這樣:惡意腳本要先確認 macOS 的「遠端登入(Remote Login,也就是 SSH 服務)」是否關閉,於是以一般使用者權限執行 systemsetup -getremotelogin。問題是 systemsetup 需要管理員權限,沒權限時它會印出 You need administrator access to run this tool... exiting! 然後以狀態碼 0 結束。

腳本用 /Off/i 去比對輸出,比對失敗 → 判定「SSH 已經開著」→ 直接跳過 sudo -n systemsetup -setremotelogin on 這一步。

結果:隧道建立了、金鑰植入了、持久化也裝了,但攻擊者從隧道連回本機 22 埠時,埠是關的。

Phorion 執行長 Calum Hall 的說法是「這個 bug 只是把 macOS 的影響壓低,不是防禦」:如果那台 Mac 本來就開著 Remote Login,或使用者事後自己打開,後門隨時可用。Cursor 的公告也採同樣說法,並補上「除非你剛好是用管理員權限啟動 Cursor 這種極端情況」。

你的機器有沒有中:先跑這一行

後門會在使用者的 authorized_keys 留下一把標籤為 svc-telemetry 的公鑰。macOS/Linux 一行就能查:

grep -qs svc-telemetry ~/.ssh/authorized_keys && echo "FOUND: 可能受影響" || echo "not found"

Windows(PowerShell):

$files = "$HOME\.ssh\authorized_keys", "C:\ProgramData\ssh\administrators_authorized_keys" | Where-Object { Test-Path $_ }
if ($files -and (Select-String svc-telemetry $files)) { "FOUND: 可能受影響" } else { "not found" }

這裡有個一定要講清楚的重點:卸載擴充套件不等於清乾淨。 payload 落地的是獨立腳本與系統層的持久化項目,把擴充套件從 IDE 移除,.smt、LaunchAgent、crontab 項目、排程工作都還在。Cursor 的公告寫得很直白:「Uninstalling the extension may not be sufficient.」

官方提供的處置順序是:

  1. 用上面的指令確認是否命中。
  2. 在端點、網路、擴充套件安裝紀錄三處搜尋 IOC。
  3. 隔離有執行痕跡的主機。
  4. 清掉未授權的 SSH 金鑰、持久化項目與執行中的隧道程序(Cursor 有提供 macOS 與 Windows 的修復腳本,跑完若仍有殘留會回非零狀態),並評估是否直接重裝。
  5. 從另一台乾淨的機器輪換所有該主機可觸及的憑證與 session:SSH 私鑰、AWS/GCP 金鑰、Git 憑證、所有符合 KEY|TOKEN|SECRET|PASS 的環境變數。

第 5 點特別容易漏。很多人在受感染的機器上開瀏覽器改密碼,等於把新密碼再送一次。

三方說法對照:哪些已經確認、哪些還在打架

這起事件的資訊品質很典型——同一件事,三份通告三個版本。把矛盾處攤開來看,比記住任何單一說法有用。

爭議點各方說法目前可怎麼看
惡意版本從哪個市集進來Cursor 說是「Cursor 的 VS Code 擴充套件市集」;Help Net Security、Coralogix、StepSecurity 說是 Open VSX(Eclipse 基金會);OpenSourceMalware 後來改口,稱是 Cursor 市集、Open VSX 上的版本並非惡意尚未有官方根因報告。Anthropic 的講法是「惡意行為者利用了 Cursor 市集的存取權」,Cursor 未說明如何進入
哪幾個版本有毒Cursor 公告頁面點名 2.1.313(部分索引與轉載版本另提到 2.1.312)兩個版本號都當成可疑,實務上以「有沒有 svc-telemetry 字串」判斷最快
檔案雜湊Cursor 公告列 macOS 版 fcbb327e…、Windows 版 3de17229…;Phorion 等第三方通告列 80402fdc…(macOS)與 6786ec90…(Windows)同一份 VSIX 出現兩組 SHA-256,不要只靠雜湊比對。改用「extension.js 內是否含 svc-telemetry 與 134.209.82.225」當判準
官方通路是否受影響Anthropic:VS Code Marketplace、npm、Open VSX 的官方版本都沒有受影響;10/30 發出乾淨的 2.1.314這點三方一致,可信度高
CVE未分配企業內部的例外處理流程不要等 CVE 才動作
攻擊者伺服器Cursor 與託管業者合作下線 134.209.82.225官方稱隧道與 beacon 已失效;但已植入的金鑰與持久化不會因此消失

還有一個已經被確認的教訓:擴充套件在 VS Code 系的 IDE 裡沒有沙箱。它繼承 IDE 行程與使用者的完整權限,能讀原始碼、寫檔、執行系統命令、連外網。Cursor 在公告裡也把這個前提講明了:「extensions run with the permissions of the IDE and the user running it」。

換句話說,你在 Cursor 裡裝的每一個擴充套件,技術上都等於一個能 sudo 你整個專案、能碰 ~/.ssh、能讀 .env 的本機程式。這在 2026 年不是新聞,但這次是第一次有知名 AI 工具的官方套件被這樣用。

同一個月稍早,站上才寫過 OpenCode Console 的金鑰外流事件——那次是服務端失守,這次是發布通路失守。兩件事合起來看,AI 開發工具的攻擊面已經從「模型」轉移到「供應鏈與市集」。

給台灣團隊的五個動作

如果你的團隊有人用 Cursor(或用任何基於 VS Code 的 IDE),這週可以做的事:

  1. 先掃再談:把上面那行 grep 做成臨時腳本,對開發機全掃一遍,不要只問「有沒有人裝過 2.1.313」——自動更新會讓人根本不知道自己裝了什麼版本。
  2. 把「卸載即修復」的錯誤認知改掉:資安宣導裡直接寫明要清 LaunchAgent/crontab/排程工作與 SSH 金鑰,並以「重裝機器」為預設選項之一。
  3. 盤點擴充套件來源:企業內用 allowlist 管擴充套件、固定版本、對碰生產環境或 CI/CD 的開發機關掉自動更新。這三件事在這次事件裡全部直接對應到攻擊鏈的某一環。
  4. 憑證輪換要有「乾淨機器」流程:這次的 beacon 只拿變數名稱,下次未必。平時就該有一台不裝 IDE 的跳板機專門做輪換。
  5. 把 ~/.ssh 的寫入當告警:EDR 若能看到「IDE 行程寫 ~/.ssh/authorized_keys」「IDE 行程開反向 SSH」,這次就能提早攔下。這條規則不貴,但多數公司沒設。

至於 Anthropic 這一側,官方通路的版本沒有被動到,2.1.314 已經補上。想回頭補齊 Claude Code 的基本安裝與使用,可以看站上的 Claude Code 完整使用指南;如果你正在評估換 IDE,Zed 編輯器完整教學 也討論了 ACP 外部代理的權限邊界。

站內延伸閱讀

原始來源

本文為資訊整理與風險提示,不構成任何法律或資安稽核建議;受影響主機的處置請依組織 incident response 流程執行。

📬 訂閱 most.tw 電子報

每週精選 AI 工具教學與技術乾貨,直接送到你的信箱。免費、隨時可退訂。

訂閱即表示同意收到 most.tw 電子報,隨時可一鍵退訂。

💬 有問題想討論?加 LINE 聯絡我

歡迎透過 LINE 官方帳號直接留言,我會盡快回覆你的問題。

加入 LINE 好友