Cursor 市集上的 Claude Code 擴充遭植入 SSH 後門:技術拆解與 HN 信任總清算

Cursor 市集 2.1.312/2.1.313 版 Claude Code 擴充遭植入 SSH 後門:常駐隧道、持久化、主機偵察的技術拆解,裝過的人只刪擴充不夠;以及 HN 824 則討論指向的市集代理、免簽章、自動更新三個結構問題。

來源:Phorion 技術分析〈Backdoor in Claude Code for VS Code extension on the Cursor Marketplace〉(https://phorion.io/blog/offical-claude-code-vsx-compromise/ )+ Cursor 官方安全公告(https://cursor.com/blog/claude-code-extension-security-notice )。HN 主串 id 50300683,約 824 分、503 則留言(2026-10-31 中午 live 值)。

譯註:原文 URL 拼作 offical(應為 official),保留原樣。本文數字為抓取時 live 值,與原文刊出時不同。

先講結論

Cursor Marketplace 上的 Claude Code 擴充 2.1.312/2.1.313(macOS/Windows)在美西時間 10 月 29 日 02:27 至 13:35 上架約十一小時,內含常駐 SSH 後門。Cursor 已下架、市集重建、攻擊伺服器已協同下線。裝過這兩個版本的人,只刪擴充不夠——後門會寫攻擊者公鑰進 authorized_keys、留持久化、開反向隧道,必須照修復步驟清乾淨並輪換憑證。

後門怎麼運作

被污染的 extension.js 開頭被前置一段立即執行函式,後面才是正常擴充本體。Node 載入檔案當下就執行,早於 activate 回呼——使用者零互動即中獎。

第一階段:鋪 SSH 通道。 確保 ~/.ssh 存在,把攻擊者 Ed25519 公鑰(註記 svc-telemetry)附加進 authorized_keys。腳本只檢查檔內有無該字串而非比對金鑰本身,獵捕時請對公鑰指紋。接著設法打開本機 SSH:Linux 走 systemctl,macOS 查遠端登入狀態,Windows 用 PowerShell 裝 OpenSSH Server。全程無提權漏洞,sudo -n 非互動、沒預先配好免密碼 sudo 就會失敗。

macOS 有個關鍵臭蟲。 未提權執行 systemsetup -getremotelogin 只會拿到管理員權限錯誤、且結束碼是 0 而非 Off;腳本只在輸出含 Off 時才嘗試啟用 SSH,於是啟用步驟整個被跳過。在本來沒開 SSH 的 Mac 上,這個錯誤掐斷了入侵通道的最後一哩——但金鑰和持久化照樣落地。若該 Mac 本來就開著遠端登入、或事後才打開,後門立刻可用,不能當作防禦指望。

第二階段:反向隧道。 以 tunnel 使用者對 134.209.82[.]225:22 建 outbound 連線,用另一把內嵌私鑰(註記 svc-telemetry-tun)認證,寫到暫存目錄 .stk_+雜湊前綴。隧道用 -R *:0:localhost:22 請攻擊端動態配埠再轉回本機,-N 只佔轉發不下指令;有 autossh 就用、否則原生 ssh,包在 detached 重試迴圈(60 秒),關掉 IDE 隧道還在。

第三階段:持久化。 macOS 是偽裝成 com.apple.sysmond 的使用者 LaunchAgent,執行 ~/.config/.smt;Linux 是 @reboot cron;Windows 是排程 SysMon(要 SYSTEM)加開機資料夾退路。

第四階段:主機偵察。 收集主機名、使用者、平台、Git email、公網 IP、各階段狀態,以及最多四十個環境變數「名稱」(KEY/TOKEN/SECRET/PASS/AWS/GCP,不含值),明文 POST 到攻擊者 :8099/beacon。不偷值,但讓操作者知道哪台機器值得優先啃。

怎麼查、怎麼清

  • 自查:grep -qs svc-telemetry ~/.ssh/authorized_keys && echo "中獎" || echo "沒事"
  • Cursor 官方提供 remediate-macos.sh/remediate-windows.ps1(見官方公告)。
  • 修復四步:殺 tunnel 行程;移除持久化(plist/cron/排程)與 ~/.config/.smt*;清 authorized_keys、刪 /tmp/.stk_*、確認遠端登入狀態;若 SSH 曾開著或有登入證據,輪換該帳戶可及的所有憑證。
  • 偵測要點:IDE helper 程序直接用 Node 寫 authorized_keys(盯 shell 的規則抓不到,要檔案遙測);非 Apple 程序寫 com.apple.* LaunchAgent;ssh -N -R '*:0:localhost:22' 對外連 134.209.82[.]225;入侵登入在 log 看起來來自 localhost。

HN 在吵什麼:不是事件,是整個信任鏈

全串六大主題:①責任羅生門——Anthropic 說被冒名(「沒有建置、發布或託管」)vs 使用者認品牌(畫面上就寫 Anthropic);② Cursor 的市集代理架構說不清(走自家 marketplace.cursorapi.com,號稱「為了更好的安全性」);③根因是平台設計債——VS Code 擴充免簽章,2018 年的 issue 八年未關;④自動更新是放大器——延遲設定不適用 trusted publishers,預設兩小時讓美工作時段九小時機器自動中獎,對策是 extensions.installCooldownHours: 72;⑤ agentic 工具本質即每天在跑的 RCE,該進沙盒(隔離 VM、無 production 存取、部分機器根本不放 SSH key);⑥信任反噬與陰謀論並生。

正反分歧:掛名是否等於負責、官方說法是否自洽、2.1.313 是否真存在過、LLM 能否拿來審 extension、這對 Cursor 是不是致命傷。

筆者註

這次最值得記的不是 payload 本體,而是三個結構問題:市集代理不透明、擴充免簽章、trusted publisher 免延遲。任何一條修好, blast radius 都會小一個量級。個人使用者當下能做的:關自動更新或設冷卻、擴充裝上架三天以上版本、agentic 工具丟進沒生產存取的 VM。

視覺懶人包:https://static.blog.derekhsu.net/claude-code-backdoor-hn.html

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *