Cursor MarketplaceのClaude Code拡張2.1.313にSSHバックドア

Phorionは、Cursor Marketplaceで配布された公式Claude Code for VS Code拡張機能のバンドル(バージョン2.1.313)に、macOS・Linux・Windowsで永続的なSSHバックドアを設置する不正コードが含まれていたと2026年10月30日に報告しました。Cursorは関連リリースをMarketplaceから削除し、2.1.313のNPM版とVS Code版も各レジストリから取り下げています。

Claude CodeはAnthropicが提供するコーディングエージェントで、端末やIDE拡張などから利用できます。

何が仕込まれていたか

侵害されたextension.jsは、minify済みバンドルの先頭に即時実行関数(IIFE)が挿入されていました。挿入部分はchild_process、fs、os、path、http、cryptoを読み込み、Node.jsがファイルを読み込んだ時点で、通常のactivateコールバックやユーザー操作より前に実行されます。拡張機能はIDEと実行ユーザーの権限で動くため、ローカルファイル、ソースコード、開発者ツールに即座にアクセスできます。

ペイロードの段階は次のとおりです。

  • Stage 1: ~/.ssh/authorized_keysに攻撃者のEd25519公開鍵(コメントsvc-telemetry)を追加し、ディレクトリを0700、ファイルを0600に設定します。重複確認は鍵本体ではなくコメント文字列で行います。
  • Stage 2: 別の埋め込み秘密鍵(暗号化なしOpenSSH Ed25519、コメントsvc-telemetry-tun)を一時ディレクトリに.stk_で始まる名前で書き出し、134.209.82[.]225へリバースSSHトンネル(-R *:0:localhost:22、-N)を張ります。オペレーターは割り当てポート経由で被害端末のSSHに、Stage 1の鍵でログインできます。
  • Stage 3: OSごとに再起動後の永続化を設定します。
  • Stage 4: ホスト情報を一度だけ攻撃者サーバーへ送信します。

通信・収集の仕様

項目 値
接続先 134.209.82[.]225
ポート 22(tunnelユーザー)
リトライ間隔 60秒(デタッチされたループ、IDE終了後も継続)
キープアライブ 30秒、ServerAliveCountMax=3
使用コマンド autosshがあれば使用、なければssh
環境変数名の収集上限 40件(値は送らない)

SSHはホスト鍵検証無効、known_hosts無視、BatchMode・IdentitiesOnly・ExitOnForwardFailure有効で動きます。収集対象は、ホスト名、ユーザー名、OS、アーキテクチャ、ホームディレクトリ、作業ディレクトリ、git config --global user.emailのメールアドレス、公開IP、各段階のセットアップ状態、/KEY|TOKEN|SECRET|PASS|AWS|GCP/iに一致する環境変数名です。

OS別の永続化と確認すべき痕跡

Phorionは、2.1.313の利用環境を直ちに確認し、見つかった場合はインシデント対応を行うよう求めています。authorized_keysのsvc-telemetry鍵は、コメントだけでなく公開鍵フィンガープリントでも確認するよう推奨しています。

OS 確認対象 仕組み
macOS ~/Library/LaunchAgents/com.apple.sysmond.plist、~/.config/.smt、~/.config/.smtk RunAtLoad・KeepAlive有効のユーザーLaunchAgentをlaunchctlで読み込み
Linux ~/.config/.smt、~/.config/.smtk、ユーザーのcrontab @rebootエントリを追加。繰り返し実行で既存cronジョブを消すバグあり
Windows ~/.config/smt.cmd、~/.config/smtk、%APPDATA%/Microsoft/Windows/Start Menu/Programs/Startup/sysmon.cmd、タスクSysMon SYSTEM権限のタスク作成(管理者権限が必要)を試み、失敗時はStartupフォルダーにsysmon.cmdを配置

macOSのRemote Login判定の不具合

スクリプトはsystemsetup -getremoteloginをsudoなしで実行します。標準ユーザーでは管理者権限エラーを標準出力に出してステータス0で終了するため、出力がOffと一致せず、sudo -n systemsetup -setremotelogin onは実行されません。Remote Loginが無効のMacでは、トンネル自体は接続できても転送先のlocalhostの22番ポートが閉じており、侵入経路が成立しない可能性があります。ただし鍵と永続化設定は残り、Remote Loginが既に有効、または後から有効にされた場合はバックドアが機能します。Phorionはこの不具合を防御として頼るべきではないとしています。

この記事の固有名詞

コメント (0)

まだコメントはありません。

コメントを書く

2000文字以内