Cursor 配布の Claude Code 拡張改ざん|影響確認と復旧手順

  • URLをコピーしました!
目次

はじめに

2026 年 10 月 29 日(米国太平洋時間)、Cursor は自社の VS Code 拡張機能マーケットプレイス(Cursor VS Code Extension Marketplace)で、改ざんされた Anthropic.claude-code 拡張機能が配布されていたと公表しました。改ざん版は、開発端末に攻撃者の SSH 公開鍵を追加し、外部サーバーへのリバース SSH トンネルと永続化を試みるコードを含んでいます。

対象は特定の配布元・バージョン・OS・時間帯に限られますが、拡張機能の自動更新で対象版を導入した可能性がある端末では、利用者が気付かないまま痕跡が残っている可能性があります。本記事では、企業の開発者とセキュリティ運用担当者が「自分の端末は対象か」「どの痕跡を調べるか」「何をもって対応完了とするか」を判断できるよう、一次情報を整理します。

本記事の情報は 2026 年 10 月 31 日 07:30(JST)時点で、Cursor の公式告知(2026 年 10 月 30 日 11:30 PT 更新版)、Phorion の技術分析、Sophos X-Ops の推奨事項を確認した内容です。筆者による実機検証は行っていません。

この記事でわかること
  • 影響を受ける配布元・バージョン・OS・時間帯と判定フロー
  • 改ざんコードの動作と、SSH バックドアが成立する条件
  • OS 別の IOC と、端末・EDR・SOC での確認方法
  • 感染兆候が見つかった場合の初動対応、修復、認証情報のローテーション

結論として、対象は Cursor VS Code Extension Marketplace から 2026 年 10 月 29 日 18:27〜10 月 30 日 05:35(JST)に導入・更新された、Windows / macOS 向けの Anthropic.claude-code 2.1.312 / 2.1.313 です。Anthropic の公式配布や Cursor 全体が侵害されたという発表ではありません。

該当する可能性がある端末では、現在のバージョンが更新済みでも安全とは判断せず、SSH 鍵・永続化・通信の痕跡を確認してください。拡張機能の削除や更新だけでは、端末に書き込まれた不正な設定は残る可能性があります。

Cursor の Claude Code 拡張で何が起きたのか

Cursor は VS Code 互換の拡張機能を独自のマーケットプレイスで提供しています。今回、そのマーケットプレイス上で正規の拡張機能 ID Anthropic.claude-code を名乗る改ざん版が約 11 時間配布されました。

インシデントの時系列

日時(JST)出来事情報源
10 月 29 日 18:27 ごろ改ざん版が Cursor VS Code Extension Marketplace で配布開始(2:27 PT)Cursor
10 月 30 日 05:35 ごろ配布終了(13:35 PT)。Cursor が削除し、マーケットプレイス全体を一時停止Cursor
10 月 30 日Phorion が技術分析、Sophos X-Ops が推奨事項を公開(いずれも 2.1.313 を対象として記載)Phorion / Sophos
10 月 30 日Cursor が X で影響を最大 5,000 ユーザーと公表し、2.1.314 への更新を要請Cursor
10 月 31 日 03:30Cursor が告知を更新。IOC を追加し、対象を 2.1.312 / 2.1.313 に明確化(10 月 30 日 11:30 PT)Cursor

Sophos と Phorion の記事は Cursor の告知更新前に公開されたため、対象バージョンを 2.1.313 のみとしています。影響範囲の判断には、更新後の Cursor 告知を優先してください。

Cursor の対応と確認済み・未確定の事項

Cursor は、改ざん版を検知後に削除して配布を止め、マーケットプレイスを停止したうえでアクセス監査、鍵のローテーション、再構築を行い、サービスを再開したと説明しています。攻撃者のサーバーはホスティング事業者と連携して停止済みです。また The Register によると、Anthropic の技術スタッフは X で、Anthropic のシステムや従業員端末の侵害ではないとの見解を示しています。

区分内容
Cursor が確認した事項対象パッケージ・バージョン・OS・配布時間帯、Anthropic が開発したものではないこと、他の拡張機能に改ざんがないこと(Cursor の監査結果)、攻撃者サーバーの停止
Cursor が「証拠なし」とした事項他バージョンや公式配布への影響
未確定の事項改ざん版がマーケットプレイスに掲載された経緯と侵害の起点、公開した主体、不正ログインが実際に行われた端末の有無
扱いに注意する数値「最大 5,000 ユーザー」は導入した可能性があるユーザー数の上限であり、侵害が確定した端末数ではない

本件は、2026 年 10 月 31 日時点の Cursor 告知に CVE 番号の記載はなく、ソフトウェアの脆弱性ではなく拡張機能の配布インシデントとして扱うのが適切です。配布経路が侵害されたサプライチェーン攻撃の事例としては、『Trivy 侵害から始まったサプライチェーン攻撃』も参考になります。

影響を受ける端末と拡張機能の確認

影響の有無は、配布元・バージョン・OS・導入時刻の 4 条件で判断します。どれか 1 つでも確認できない場合は、該当の可能性ありとして痕跡調査に進みます。

影響条件

項目影響条件
配布元Cursor VS Code Extension Marketplace
拡張機能Anthropic.claude-code
対象バージョン2.1.312 / 2.1.313
対象 OSWindows(win32-x64)/ macOS(darwin-arm64)
配布時間帯(PT)2026 年 10 月 29 日 02:27〜13:35
配布時間帯(JST)2026 年 10 月 29 日 18:27〜10 月 30 日 05:35
導入方法新規インストール、および自動更新を含む更新
Cursor が求める更新先2.1.314

攻撃コードには Linux 向けの処理も含まれ、Cursor の IOC にも Linux のファイルパスが記載されています。ただし、Cursor が特定した悪性パッケージは Windows(win32-x64)と macOS(darwin-arm64)向けで、Linux 向けの悪性 VSIX が配布されたとは公表されていません。コード上に処理が存在することと、実際に配布されたことは区別して扱います。

そのうえで、Cursor の Remote 機能などで Linux サーバー上にも拡張機能を導入する構成では、予防的な確認として Linux 向けの IOC も点検することをおすすめします。これは公式に確認された影響範囲ではなく、構成に応じた編集部の提案です。

なお、2.1.312 という番号は Cursor 以外の配布元にも存在すると報告されています。Cursor の告知は Cursor のマーケットプレイスから配布されたパッケージを対象としており、バージョン番号だけで他の配布元の同名拡張機能を悪性と判断しないことが重要です。判断にはハッシュ値や改ざん文字列を使用します。

影響判定フロー

手順
Cursor の導入端末を洗い出す

資産管理ツールや EDR のソフトウェアインベントリから、Cursor がインストールされている Windows / macOS 端末を抽出します。VS Code 本体のみの端末は、Cursor の告知の対象外です。

手順
Claude Code 拡張機能の利用有無を確認する

Cursor の拡張機能ディレクトリに anthropic.claude-code- で始まるフォルダーがあるか確認します。Phorion は導入先を ~/.<ide>/extensions/ 形式(Cursor では一般に ~/.cursor/extensions/)と記載しています。

手順
対象時間帯の導入・更新を確認する

EDR のファイル作成履歴、プロキシのダウンロードログ、端末の起動状況などから、10 月 29 日 18:27〜10 月 30 日 05:35(JST)に拡張機能が導入・更新された可能性を確認します。自動更新が有効で、この時間帯に Cursor を起動していた端末は該当の可能性があります。

手順
対象 OS・バージョンを照合する

フォルダー名 anthropic.claude-code-2.1.312-darwin-arm64、anthropic.claude-code-2.1.313-win32-x64 などが残っていれば、OS とバージョンを照合できます。更新後にフォルダーが削除されている場合は、履歴やログで補完します。

手順
IOC で痕跡を確認する

拡張機能のハッシュと改ざん文字列、authorized_keys の不正鍵、永続化ファイル・タスク、プロセス、通信ログを確認します。具体的なコマンドは後述の「IOC と端末・EDR での調査方法」で解説します。

手順
侵害兆候に応じて初動対応を判断する

不正鍵や永続化などの痕跡が見つかった場合は、後述の初動対応へ進みます。痕跡が見つからない場合も、手順 3 で導入の可能性を否定できない端末は、ログ調査の結果とあわせて判断を記録します。

現在のバージョンだけで安全と判断できない理由

改ざんコードは導入直後に一度実行されれば、SSH 鍵の追加や永続化スクリプトの設置を終えます。その後 2.1.314 へ更新されても、拡張機能のフォルダーが置き換わるだけで、~/.ssh/authorized_keys や LaunchAgent、スケジュールタスクに書き込まれた設定は残ります。Cursor も、拡張機能のアンインストールだけでは不十分な場合があると明記しています。

参考: Cursor
“Uninstalling the extension may not be sufficient”
(拡張機能のアンインストールだけでは不十分な可能性があります)
https://cursor.com/blog/claude-code-extension-security-notice

また、拡張機能の導入元を履歴から特定できない場合も、安全と判断する根拠にはなりません。導入元が不明な端末は、該当の可能性ありとして IOC 調査の対象に含めてください。

改ざんコードの動作と SSH バックドアの成立条件

改ざんコードの影響は、SSH 鍵の追加、SSH サービスの有効化、トンネルの確立、実際の不正ログインという別々の段階に分けて評価する必要があります。鍵が追加されていても、それだけで不正ログインが成立したとは限りません。

extension.js から始まる実行経路

Phorion の分析によると、改ざんコードは extension.js の先頭に即時実行関数として追加されており、Node.js がファイルを読み込んだ時点で、拡張機能の通常の activate 処理より先に実行されます。利用者が拡張機能を操作しなくても、Cursor が拡張機能を読み込むだけで処理が始まる点に注意が必要です。

段階動作成立条件・補足
1. 鍵の追加authorized_keys に攻撃者の Ed25519 公開鍵(コメント svc-telemetry)を追記ユーザー権限で成立する。Cursor は、この段階は実行されたと説明
2. SSH サービスの有効化macOS は Remote Login、Windows は OpenSSH Server、Linux は sshd の有効化を試行管理者権限が必要。多くの端末で失敗(後述)
3. リバース SSH トンネル攻撃者サーバーの TCP 22 へ接続し、-R *:0:localhost:22 で端末の SSH ポートを転送外向き通信で確立を試行。約 60 秒ごとに再試行
4. 永続化macOS は LaunchAgent、Windows はスケジュールタスクまたは Startup フォルダー、Linux は cron再起動後もトンネルを再試行する
5. ホスト情報の送信HTTP POST で端末情報を攻撃者サーバーへ送信SSH の成否と関係なく実行される
6. 不正ログイン攻撃者がトンネル経由で端末の SSH へログイン段階 1〜3 がすべて成立し、端末の SSH が待ち受けている場合のみ

調査では、2 種類の鍵を区別して扱います。

svc-telemetry(攻撃者の公開鍵)

端末の authorized_keys に追加される鍵です。攻撃者が端末へログインするために使われます。

svc-telemetry-tun(トンネル用の秘密鍵)

端末が攻撃者サーバーへ接続するために、一時ディレクトリの .stk_ で始まるファイルや永続化用ファイルへ書き出される鍵です。

SSH サービスの有効化が失敗する理由

Cursor は、ローカルの SSH サービスを有効にするには管理者権限が必要で、多くの macOS / Windows 端末ではこの段階が失敗し、トンネル経由のログインはできなかったと説明しています。Phorion は、コード上の不具合として次の点を指摘しています。

  • macOS: 権限なしで systemsetup -getremotelogin を実行すると管理者権限のエラーが返り、出力に Off が含まれないため、有効化処理(sudo -n systemsetup -setremotelogin on)自体が実行されない
  • Windows: OpenSSH Server の設定コマンドを、/bin/sh を前提とした関数経由で実行しており、標準的な Windows では動作しない
  • Linux: systemctl などで sshd の起動を試みるが、権限昇格の処理は含まれない

ただし、これは防御策として期待できるものではありません。もともと Remote Login や OpenSSH Server が有効だった端末、Cursor を管理者権限で起動していた端末、後から SSH を有効にした端末では、不正ログインの経路が成立し得ます。Cursor も、SSH の成否にかかわらず修復手順を実施するよう求めています。

送信されたホスト情報と認証情報のリスク

Cursor によると、送信される情報はホスト名、ユーザー名、OS、アーキテクチャ、ホームディレクトリのパス、環境変数名、作業ディレクトリ、Git に設定されたメールアドレス、パブリック IP です。Phorion の分析では、環境変数は KEY|TOKEN|SECRET|PASS|AWS|GCP に一致する名前を最大 40 件収集する実装で、値は送信されません。

したがって、ビーコンによって API キーなどの値が直接流出したとは言えません。一方で、Cursor は限定的な収集であっても、バックドア経由の後続アクセスによる認証情報の取得を否定できないとしています。環境変数名の一覧は、攻撃者がどの端末にどの種類の認証情報があるかを把握する材料になり得るため、SSH の有効化状況やログイン痕跡とあわせてローテーションの要否を判断します。

IOC と端末・EDR での調査方法

ここでは Cursor の公式 IOC を調査しやすい形に整理します。IOC は更新される可能性があるため、調査開始時に Cursor の告知の最新版と照合してください。

パッケージとペイロードの IOC

VSIX のハッシュはパッケージファイル全体の値で、プロキシのキャッシュやソフトウェア配布基盤に残る VSIX ファイルとの照合に使います。インストール済みの拡張機能フォルダーは展開後の状態のため、こちらは extension.js 単体のハッシュと改ざん文字列で照合します。

対象OSSHA-256
VSIX 2.1.312macOS darwin-arm64fcbb327e38e61c4fec795e0d0591f52cd1014b813d20a5912104953c3a17c364
VSIX 2.1.312Windows win32-x643de1722901165769893bef57c72594e9a54459faa23f3091b136b79966edd081
VSIX 2.1.313macOS darwin-arm6480402fdcad8799285fd93044976973ca000da7995fb93363f819bb8e4f84ee6c
VSIX 2.1.313Windows win32-x646786ec90cbd45949695bd7805c9fbb26cfc91bc5fc897de0183d9bcb9cb21731
改ざんされた extension.js共通ecb58cb29078d9646ad1dcdbe51526f2d9cfea06be5fb2ab183e8ecc3ab6bf15

改ざんされた extension.js には、文字列 134.209.82.225 と svc-telemetry が含まれます。ハッシュが一致しない場合でも、両方の文字列が含まれるファイルは調査対象とします。

SSH とネットワークの IOC

種別IOC補足
不正公開鍵のコメントsvc-telemetryコメントは書き換え可能なため、フィンガープリントでも確認する
不正公開鍵のフィンガープリントSHA256:0Z6R+DF64Do2nwQic8a7kkfDLNNk4IiK+2U2Rci4htkauthorized_keys に追加される鍵
トンネル用鍵のフィンガープリントSHA256:KOAU57+ZG6u3MG4WwzPzPX2O5YEe9qdOC1Bl+6MVyDQ端末から攻撃者サーバーへの接続に使用
攻撃者サーバー134.209.82[.]225Cursor によると現在は停止済み
リバース SSHtunnel@134.209.82[.]225、TCP 22外向きの SSH 接続
外部ビーコン134.209.82[.]225:8099/beacon(HTTP POST)ホスト情報の送信
ローカルビーコン127.0.0.1:8099/beacon(HTTP POST)ループバック宛ての送信試行
プロセスssh -N -R '*:0:localhost:22'、autossh -M 0StrictHostKeyChecking=no などのオプションを伴う

ifconfig.me と api.ipify.org はパブリック IP の確認に使われますが、正規のサービスです。Cursor も、これらへのアクセスだけでは IOC にならないとしています。

OS 別のファイル・永続化 IOC

OSファイル・設定永続化
macOS~/.ssh/authorized_keys、~/.config/.smt、~/.config/.smtk、$TMPDIR/.stk_<16 進 10 桁>~/Library/LaunchAgents/com.apple.sysmond.plist(ラベル com.apple.sysmond)
Windows%USERPROFILE%\.ssh\authorized_keys、C:\ProgramData\ssh\administrators_authorized_keys、%USERPROFILE%\.config\smt.cmd、%USERPROFILE%\.config\smtk、%TEMP%\.stk_<16 進 10 桁>スケジュールタスク SysMon(SYSTEM での実行を試行)、失敗時は %APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup\sysmon.cmd
Linux(参考)~/.ssh/authorized_keys、~/.config/.smt、~/.config/.smtk、/tmp/.stk_<16 進 10 桁>cron の @reboot エントリー

Windows の administrators_authorized_keys は、Cursor の確認コマンドが検索対象に含めているファイルです。管理者グループのアカウントで SSH 公開鍵認証を行う場合に参照されるため、あわせて確認します。

macOS での確認方法

以下は読み取りのみのコマンドです。Cursor 公式の確認コマンド以外は IOC 照合用の標準コマンドの例で、筆者は実機で動作を検証していません(Windows も同様)。証拠保全の観点から、削除や停止は後述の初動対応の順序に従ってください。まず、Cursor 公式の確認コマンドで不正鍵の有無を確認します(影響を受けたユーザーで実行)。

grep -qs svc-telemetry ~/.ssh/authorized_keys && echo "svc-telemetry key found" || echo "No key found; machine not impacted"

コメント以外でも照合できるよう、authorized_keys に登録された鍵のフィンガープリントを一覧表示し、SHA256:0Z6R+DF64Do2nwQic8a7kkfDLNNk4IiK+2U2Rci4htk が含まれないか確認します(OpenSSH の ssh-keygen -l を使用)。

ssh-keygen -lf ~/.ssh/authorized_keys

永続化ファイルとトンネル用鍵の有無、LaunchAgent の登録状況を確認します。

ls -la ~/Library/LaunchAgents/com.apple.sysmond.plist ~/.config/.smt ~/.config/.smtk "$TMPDIR"/.stk_* 2>/dev/null
launchctl list | grep com.apple.sysmond

トンネルの再試行ループや SSH プロセスが動作していないか確認します。

ps -axww -o pid,ppid,user,command | grep -E '134\.209\.82\.225|\.stk_|\.smt|autossh' | grep -v grep

拡張機能フォルダーが残っている場合は、extension.js の SHA-256 を計算し、公式の値と照合します。あわせて、Cursor が示す 2 つの文字列が両方含まれるかを確認します。シェルのワイルドカードと shasum、grep だけを使う例で、パスは Cursor の拡張機能ディレクトリが ~/.cursor/extensions、extension.js が拡張機能フォルダーの直下にある場合を想定しています。

for f in ~/.cursor/extensions/anthropic.claude-code-*/extension.js; do
  [ -f "$f" ] || continue
  shasum -a 256 "$f"
  grep -qF '134.209.82.225' "$f" && grep -qF 'svc-telemetry' "$f" && echo "Both IOC strings found: $f"
done

何も出力されない場合は、拡張機能フォルダーが削除済みか、extension.js の配置が想定と異なる可能性があります。フォルダーの有無を ls ~/.cursor/extensions で確認し、その結果だけで安全と判断しないでください。

Remote Login が有効になっていないかも確認します。Phorion が指摘するとおり、systemsetup -getremotelogin は管理者権限がないと状態を取得できないため、sudo systemsetup -getremotelogin として管理者権限で実行します。

Windows での確認方法

Cursor 公式の確認コマンドを PowerShell で実行します。C:\ProgramData\ssh\administrators_authorized_keys は通常 Administrators と SYSTEM のみに読み取り権限があるため、確認漏れを防ぐには管理者として起動した PowerShell で実行することをおすすめします。

$files = "$HOME\.ssh\authorized_keys", "C:\ProgramData\ssh\administrators_authorized_keys" | Where-Object { Test-Path $_ }
if ($files -and (Select-String svc-telemetry $files)) { "svc-telemetry key found" } else { "No key found; machine not impacted" }

OpenSSH クライアントが導入されている端末では、macOS と同様に ssh-keygen -lf "$HOME\.ssh\authorized_keys" でフィンガープリントを確認できます。続いて、スケジュールタスクと永続化ファイル、トンネル用鍵を確認します。

schtasks /query /tn SysMon /v /fo LIST
Test-Path "$env:USERPROFILE\.config\smt.cmd", "$env:USERPROFILE\.config\smtk", "$env:APPDATA\Microsoft\Windows\Start Menu\Programs\Startup\sysmon.cmd"
Get-ChildItem $env:TEMP -Filter '.stk_*' -Force

攻撃者サーバーとの現在の TCP 接続を確認します。サーバーは停止済みのため、接続が見つからないことは過去の通信がなかったことを意味しません。過去の通信はプロキシやファイアウォールのログで確認します。

Get-NetTCPConnection -RemoteAddress 134.209.82.225 -ErrorAction SilentlyContinue

拡張機能フォルダーが残っている場合は、extension.js の SHA-256 を Get-FileHash で計算し、公式のハッシュ値と照合します。パスは Cursor の拡張機能ディレクトリが %USERPROFILE%\.cursor\extensions の場合の例です。

Get-ChildItem "$env:USERPROFILE\.cursor\extensions" -Directory -Filter 'anthropic.claude-code-*' | ForEach-Object { Get-ChildItem $_.FullName -Recurse -Filter extension.js -File | Get-FileHash -Algorithm SHA256 }

OpenSSH Server(サービス名 sshd)が意図せず導入・起動されていないかは、Get-Service sshd で確認できます。

Cursor の確認コマンドは、鍵が見つからない場合に「machine not impacted」と表示します。ただし、利用者や別のツールが鍵を削除した可能性や、永続化だけが残っている可能性もあるため、この表示だけで端末全体の安全性を判断せず、永続化・プロセス・通信ログもあわせて確認してください。

SOC での横断調査

組織全体では、端末単体の確認に加えて、次の観点でログを横断検索します。特定の EDR 製品に依存する機能ではなく、多くの EDR や SIEM で利用できる一般的なテレメトリーを前提としています。

調査対象確認する内容
ソフトウェアインベントリCursor の導入端末と、anthropic.claude-code-2.1.312-* / anthropic.claude-code-2.1.313-* フォルダーの存在履歴
ファイル作成・変更Cursor のヘルパープロセスや拡張機能ホストによる authorized_keys への書き込み、.smt / smt.cmd / com.apple.sysmond.plist / sysmon.cmd の作成
プロセス起動ssh / autossh の -R *:0:localhost:22 付き起動、schtasks /create /tn SysMon、systemsetup -setremotelogin on、Add-WindowsCapability による OpenSSH Server の追加
プロキシ・ファイアウォール134.209.82[.]225 への TCP 22 と TCP 8099 の通信、/beacon への HTTP POST
DNS攻撃者サーバーは IP アドレスで直接指定されるため DNS ログには残りにくい。ifconfig.me などの名前解決は、時刻の相関に使う補助情報として扱う
SSH ログイン履歴localhost(127.0.0.1 / ::1)からの公開鍵認証の成功。記録されている場合は鍵のフィンガープリントを不正公開鍵の値と照合し、同時刻のプロセス・接続の履歴と突き合わせる

Phorion は、攻撃コードが Node.js の API で authorized_keys へ直接追記するため、echo や tee などのシェルコマンドを監視するルールでは検出できないと指摘しています。ファイル変更のテレメトリーで、IDE のプロセスが SSH 関連ファイルを変更した記録を確認するのが有効です。

また、不正ログインの有無は「トンネルが張られたか」と分けて確認する必要があります。トンネル経由のログインは端末から見るとローカルホストからの接続になるため、SSH のログでは localhost からのログインとして記録されます。macOS では統合ログの sshd の記録、Windows ではイベントログの OpenSSH の記録を確認します。

SSH のログには公開鍵のコメント文字列(svc-telemetry)が記録されるとは限りません。localhost からの認証成功、ログ設定によって記録される鍵のフィンガープリント、トンネルプロセスや攻撃者サーバーとの接続履歴を組み合わせて判断します。ログの保存期間切れや設定によって記録が残っていない場合もあるため、ログがないことを不正ログインがなかった証拠として扱わないでください。

参考: Phorion
“successful logins in SSH logs will appear to come from localhost”
(SSH ログ上の成功したログインは、localhost からの接続として記録されます)
https://phorion.io/blog/offical-claude-code-vsx-compromise/

感染兆候が見つかった場合の初動対応と復旧

Cursor は、IOC の横断検索、痕跡がある端末の隔離、不正な鍵・永続化・トンネルプロセスの除去と再構築の判断、信頼できる端末からの認証情報とセッションのローテーションを求めています。Sophos X-Ops も、アンインストールだけではバックドアが残るとして、鍵・永続化・プロセスの除去と認証情報のローテーションを推奨しています。これらを、証拠保全を含む実務の順序に整理すると次のとおりです。

手順
証拠を保全する

修復スクリプトは拡張機能や永続化ファイルを削除するため、実行前に拡張機能フォルダー(特に extension.js)、authorized_keys、永続化ファイル、タスクや LaunchAgent の定義、プロセス一覧、SSH ログ、EDR やプロキシのログを、組織の手順に従って保全します。

手順
端末を隔離する

ペイロードの実行やバックドアの設置の痕跡がある端末は、インシデント対応手順に従ってネットワークから隔離します。EDR のネットワーク隔離機能などを使うと、調査用の通信を維持しながら隔離できる場合があります。

手順
公式修復スクリプトを確認する

Cursor の公式 URL からスクリプトを取得し、内容、必要な権限、削除対象を確認します。OS ごとの実行方法は後述の表のとおりです。

手順
不正な構成を除去する

修復スクリプトまたは手動作業で、攻撃者の SSH 鍵、永続化の設定とスクリプト、トンネル用鍵、実行中のトンネルプロセスを削除します。意図せず有効になった Remote Login や OpenSSH Server がないかも確認し、不要であれば無効化します。

手順
認証情報とセッションをローテーションする

信頼できる別の端末から、影響端末で利用できた SSH 鍵、API キー、クラウドの認証情報、Git のトークン、各種セッションを調査し、失効・再発行します。環境変数名の一覧に含まれていた種類の認証情報を優先すると、範囲を絞り込みやすくなります。

手順
再構築の要否を判断する

SSH サービスが有効だった、localhost からの不正公開鍵による認証成功が疑われる、など不正ログインや追加の攻撃活動が疑われる場合は、クリーニングではなく OS の再構築を検討します。

手順
対応完了を確認する

後述の完了基準に沿って、端末の状態、ログ調査、認証情報の対応がそろっているかを確認し、判断の根拠を記録します。

公式修復スクリプトの実行条件と注意点

Cursor によると、修復スクリプトは悪意ある拡張機能、永続化の仕組み、実行中のトンネルプロセス、攻撃者の SSH 鍵を削除し、何かが残った場合は 0 以外の終了ステータスを返します。macOS と Windows では実行する権限が逆になる点に注意してください。

項目macOSWindows
スクリプトremediate-macos.shremediate-windows.ps1
実行する権限影響を受けたユーザー(root では実行しない)「管理者として実行」で起動した PowerShell
実行コマンドbash remediate-macos.shpowershell -ExecutionPolicy Bypass -File .\remediate-windows.ps1

スクリプトは端末上の既知の痕跡を除去するものであり、実行だけでは、不正ログインの有無の調査や認証情報の失効は完了しません。Windows では -ExecutionPolicy Bypass で実行するため、取得元が Cursor の公式 URL であることと内容を確認してから実行してください。

対応完了と判断する基準

次の項目がすべて確認できた時点を、対応完了の目安とすることをおすすめします。

  • 不正鍵(コメントとフィンガープリントの両方)、永続化ファイル、タスク・LaunchAgent、トンネル用鍵、トンネルプロセスが残っていない
  • 修復スクリプトを使用した場合、終了ステータスが 0 である
  • Claude Code 拡張機能が 2.1.314 以降に更新されている、または削除されている
  • Remote Login / OpenSSH Server の状態が、組織の想定どおりである
  • SSH ログ、プロセス履歴、接続履歴を照合し、localhost からの不正な認証成功の有無と、ログの欠落期間を記録している
  • プロキシ・ファイアウォールのログで、攻撃者サーバーとの通信の有無と期間を確認している
  • 影響端末で利用できた認証情報とセッションの失効・再発行が完了している

開発端末の認証情報を対象としたサプライチェーン攻撃では、端末の修復より認証情報の棚卸しに時間がかかる傾向があります。認証情報の扱いと痕跡調査の進め方は、LiteLLM 1.107.0 のマルウェア混入の記事でも解説しています。

まとめ

今回のインシデントは、Cursor の拡張機能マーケットプレイスで特定の時間帯に配布された Claude Code 拡張機能の改ざん版によるものです。SSH の有効化は多くの端末で失敗していますが、不正鍵と永続化は残るため、バージョン確認だけで終わらせず、痕跡調査と認証情報の対応まで進める必要があります。

  • 対象は Cursor 配布の 2.1.312 / 2.1.313(Windows / macOS)
  • 導入時間帯は 10 月 29 日 18:27〜10 月 30 日 05:35(JST)
  • 更新済みでも、過去に改ざん版が実行された可能性は残ります。
  • 鍵の追加と不正ログインの成立は、別の段階として評価します。
  • 不正鍵はコメントとフィンガープリントの両方で確認します。
  • 修復スクリプトの実行前に、調査に必要な証拠を保全します。
  • 認証情報の失効は、信頼できる別の端末から実施します。

以上、最後までお読みいただきありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

関西を拠点に活動する、現役インフラエンジニア。経験20年超。

大手通信キャリアにて、中〜大規模インフラ(ネットワーク・サーバ・クラウド・セキュリティ)の設計・構築およびプロジェクトマネジメントに従事。現場で直面した技術課題への対処や、最新の脆弱性情報への実務対応を、一次情報として発信しています。

保有資格
CCIE Lifetime Emeritus(取得から20年以上)/ VCAP-DCA / Azure Solutions Architect Expert

▶ 運営者プロフィール(詳細)

目次