10月30日、opensourcemalware.comが「Trojanized Claude Code Extension Plants an SSH Backdoor」と題した記事を公開した。Cursorマーケットプレイスで配布されていたClaude Code拡張機能が侵害され、SSHバックドアを仕込まれた事件を詳細に報告した内容だ。
CursorはAIコーディング支援に特化したVS Codeフォークのエディタで、開発者の間で急速に普及している。そのマーケットプレイスはOpen VSXとは別に独自のパッケージ配布基盤を持っており、今回はその基盤上の「公式パッケージ」が侵害された。単に悪意あるパッケージを紛らわしい名前で公開するのではなく、正規の識別子を持つパッケージそのものが汚染されたという点が事件の深刻さを際立たせている。2025年に多発した悪意あるVSCode拡張機能によるサプライチェーン攻撃の流れを汲みながらも、手口は一段と洗練されている。
何が起きたのか
2026年10月29日、Cursorマーケットプレイスで配布されていたClaude Code拡張機能のバージョン2.1.313(識別子:anthropic.claude-code@2.1.313)が侵害された。変更されたのはextension.jsのみで、正規のコードの前に66行の悪意あるローダーが挿入されていた。バンドルされたバイナリもUIも本物のままで、一見して異常を検知することは困難だ。
影響範囲は以下のとおりだ:
- 侵害あり: Cursor Marketplace の
anthropic.claude-codeバージョン 2.1.313 - 侵害なし:
@anthropic-ai/claude-codeNPMパッケージ、Open-VSX版、Microsoft VSCode Marketplace版
opensourcemalware.comはCursorから連絡を受け、悪意あるバージョンの配布元はOpen-VSXではなくCursor Marketplace側で何らかの侵害が発生したことが確認されている。侵害の具体的な経路(アカウント奪取・CI/CDへの不正アクセス等)は現時点では公開されていない。
なぜ気づきにくいのか
攻撃の巧妙さは、拡張機能の見た目が完全に正常であることに尽きる。悪意あるコードはVS Code起動時・WebView表示時に自動実行されるため、ユーザーがClaudeとの会話を始める必要すらない。拡張機能モジュールを読み込むだけで攻撃が始まる。
package.jsonにpreinstallやpostinstallのようなインストールスクリプトが存在しないため、パッケージマネージャーの監視をすり抜ける。ほぼすべての例外はサイレントに握りつぶされ、正規の拡張機能は普通に動き続ける。
攻撃チェーンの詳細
起動直後、インプラントは以下の情報を収集する:
- ホスト名・ローカルユーザー名・OS・CPUアーキテクチャ
- ホームディレクトリ・カレントディレクトリ
git config --global user.emailのグローバルGitメールKEY、TOKEN、SECRET、PASS、AWS、GCPを含む環境変数名(値ではなく名前のみ、最大40件)
環境変数の値は初回ビーコンには含まれないが、名前だけでもクラウドプロバイダーやCI環境の構成を把握できる。SSHアクセスが確立された後は、攻撃者が直接アカウントを検査できるため、初回収集の限定性は実質的な防御にならない。
SSHバックドアの仕込み方
~/.ssh/authorized_keysに以下のEd25519公開鍵が追記される:
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDdvylCEJ/k2TpezcTfedrkHyFSK9IZ3vmP6vhY4Ss0P svc-telemetry
コメント欄のsvc-telemetryは管理用アカウントに見せかけるための偽装だ。フィンガープリントはSHA256:0Z6R+DF64Do2nwQic8a7kkfDLNNk4IiK+2U2Rci4htk。
リバースSSHトンネル
インプラントはbase64エンコードされたOpenSSHの秘密鍵を内包しており、一時ファイル.stk_<identifier>としてデコードする。その後、以下のコマンド相当の処理でC2サーバーへ接続し続ける:
-N -R '*:0:localhost:22'
接続先はtunnel@134.209.82.225。ホスト鍵検証を無効化し、known-hostsを無視し、60秒ごとに再接続する。Unixではautosshを優先し、なければsshを使う。これにより攻撃者は被害者のSSHポートへの直接アクセスルートを得る。
OS別の永続化
| OS | 永続化手法 |
|---|---|
| macOS | ~/Library/LaunchAgents/com.apple.sysmond.plist(Appleコンポーネントを装った名前) |
| Linux | ~/.config/.smtをcrontabの@rebootエントリに追加 |
| Windows | SysMonという名前のスケジュールタスク(SYSTEM権限)、またはsysmon.cmdをStartupフォルダに配置 |
macOSのcom.apple.sysmondという名前は特に悪質で、Appleのシステムコンポーネントと混同させる意図が明らかだ。
偵察ビーコン
起動1.5秒後、ifconfig.meとapi.ipify.orgでパブリックIPを取得し、収集情報をJSON形式で以下の2箇所に送信する:
http://127.0.0.1:8099/beacon
http://134.209.82.225:8099/beacon
追加のマルウェアダウンロードは確認されていないが、SSHアクセスが確立された後の後続活動は静的解析では追えない。
侵害指標(IOC)と対応手順
ネットワーク: 134.209.82.225(ポート22・8099)
ファイル:
~/.config/.smt、~/.config/.smtk~/Library/LaunchAgents/com.apple.sysmond.plist${TMPDIR}/.stk_*~/.config/smt.cmd、~/.config/smtk
SSH: コメントsvc-telemetryの鍵、tunnel@134.209.82.225
extension.jsのSHA-256: ecb58cb29078d9646ad1dcdbe51526f2d9cfea06be5fb2ab183e8ecc3ab6bf15
バージョン2.1.313をインストールしていた場合、まずシステムをネットワークから切断し、フォレンジック証拠を保全する。その後、134.209.82.225のポート22・8099をブロックし、拡張機能と永続化ファイルを証拠収集後に削除する。認証情報のローテーションはクリーンな別端末から行うこと。
元記事は「既知のファイルを削除しただけでは信頼を回復できない」とし、ホストの再構築を推奨している。SSHによる対話的アクセスが確立された後の活動は静的解析では追えないためだ。
大きな正規バンドルの前にコンパクトなバックドアを挿入し、エラーを握りつぶして正規アプリを動かし続けるこの手口は、今後同様の攻撃のテンプレートになりうる。エディタ拡張機能のアップデートに対してもサプライチェーンの視点でのリスク管理が求められる段階に入っている。
詳細はTrojanized Claude Code Extension Plants an SSH Backdoorを参照していただきたい。