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はこの不具合を防御として頼るべきではないとしています。

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