← 記事一覧へ

Cursor配信のClaude Code拡張2.1.313に改ざん報道:SSHバックドアと調査・復旧の要点

Cursorのマーケットプレイスで配信されたClaude Code 2.1.313の改ざん報道。影響範囲、SSHによる永続化、調査の限界、対応手順と対象を絞ったハンティングクエリを整理します。

事案の発生時期: 2026年10月29日02:27〜13:35 PDTごろの配信。10月30日までの報道に基づく出典確認日: 2026/10/30

30秒でわかる要点

要点
訂正後の10月30日の報道は、anthropic.claude-code 2.1.313を名乗る悪意のあるパッケージが、10月29日にCursorのマーケットプレイスで配信されたと説明しています。Cursorの推定では最大5,000人がインストール。ローダーはSSH用の鍵、永続化、端末情報の外部送信を追加します。
対応するチーム
EDR、SIEM、IT運用、委託先リスク、法務・プライバシー
最初のアクション
対象パッケージを受け取ったCursor端末を特定し、導入履歴を保全して実行と永続化を調べます。悪意のある活動の証拠がある端末を封じ込め、信頼できる別の端末から認証情報の失効範囲と復旧方法を判断します。
不確実性・注意点
パッケージが混入した経路とSSHログイン成功件数は未公表です。この記事は提供された報道と図を基にし、ベンダーの説明もその報道を通じて引用します。ベンダーの原ページと検体は独立に調査していません。
Cursorで配信されたClaude Code 2.1.313の改ざん報道を扱うオリジナル図。発行元の表示、パッケージの配信元、端末上の実行と永続化の証拠を別々に確認する。
実務への示唆

見慣れた拡張IDだけでは、マーケットプレイスが配信したパッケージの完全性は分かりません。実際の入手元と実行の証拠を確かめ、SSHアクセス、永続化、その端末から利用できた認証情報を調べます。拡張の更新や削除は、端末を復旧する作業の一部です。

悪意のある更新が、正しい拡張IDのまま届くことがあります。 訂正後の2026年10月30日のThe Hacker Newsの報道は、anthropic.claude-codeの2.1.313を名乗る改ざんパッケージが、Cursorの拡張マーケットプレイスで配信されたと説明しています。追加されたコードは正規の拡張コードを残したまま、SSHによる永続的なアクセスを設けようとします。

まず確かめるのは、その経路から対象パッケージを受け取った端末か、ローダーが実行されたか、拡張の外に何が残ったかです。Claude Codeの画面が動くことや、その後に更新したことだけでは、この3つすべてに答えられません。

資料の範囲。 この記事では、訂正を含む提供版の報道と、添付されたOpenSourceMalwareの攻撃経路図を確認しました。Cursorの説明も、その報道を通じて示しています。検体や被害端末を独立に調査した記事ではありません。ベンダーの原通知は末尾にリンクしていますが、この版のために独立に取得したものではありません。

影響した対象と、訂正の意味

項目 提供された報道が示すこと
パッケージの表示 改ざん版は正規の拡張IDであるanthropic.claude-codeと、バージョン2.1.313を使用。別の偽拡張として表示されたものではありません。
配信経路 訂正後の報道が挙げるのはCursorのマーケットプレイスです。不正なパッケージが混入した手段は、まだ分かっていません。
インストール期間 2026年10月29日02:27〜13:35太平洋時間ごろ。この日の時差はPDT、UTC−7です。
影響対象の推定 Cursorの推定では、悪意のある版をインストールしたユーザーは最大5,000人。これはインストールによる露出の推定で、SSHログイン成功件数は報告されていません。
ほかのマーケットプレイス 訂正後の報道では、このパッケージがOpen VSXやMicrosoftのVS Code Marketplaceに到達した証拠はないとされています。すべての配信経路を独立に監査したという意味ではありません。
削除と置き換え 報道によれば、不正なパッケージは削除され、10月30日までにAnthropicがOpen VSXとMicrosoftのマーケットプレイスへ2.1.314を公開しました。新しい版が入っていても、以前の端末上の変更が消えたとは分かりません。
Cursorのほかの拡張 Cursorは、ほかのマーケットプレイス拡張には影響しないと説明したと引用されています。この記事でそれらを個別に調査したわけではありません。

日本時間にすると、報告された配信期間は10月29日18:27〜10月30日05:35 JSTです。UTCでは10月29日09:27〜20:35。この換算はおおよその配信期間を示し、その後の起動や永続化の利用まで、この期間内だったとするものではありません。

元の報道には、初版でOpen VSXの侵害とした説明を、Cursorのマーケットプレイスへ訂正したことが明記されています。Open VSXの掲載画面だけでは、そこから悪意のある成果物が配信された証拠にはなりません。掲載ページの累積ダウンロード数も、今回のCursor配信パッケージの露出人数を測る値にはできません。

Anthropicが悪意のある変更を開発していないというCursorの説明と、パッケージがAnthropicの正規IDを使用したことは、両立します。発行元の表示と、配信されたパッケージの完全性は別の確認です。 どちらの事実も、Anthropicのソースリポジトリや発行用認証情報の侵害を証明するものではありません。混入の手段は未解明です。

ローダーは何をしたと報告されているか

報道は、OpenSourceMalwareの共同創業者Jenn Gile氏の説明として、正規のextension.jsバンドルの前に66行のローダーが挿入されたと伝えています。エディター起動後や拡張のWebView開始時に動きます。提供された図では、エラーは抑制され、正規の拡張も引き続き読み込まれるとされています。通常の機能が動くことは、安全性を判断する材料として十分ではありません。

報告された挙動を簡略化したオリジナル図。Cursor配信パッケージのローダーがSSH鍵と永続化を追加し、端末情報と環境変数名を収集、逆向きSSHトンネルとHTTPビーコンを作る。SSHログインの成立には端末上のSSHサービスと認証条件も必要。

図1。提供された報道とOpenSourceMalwareの図を基にしたオリジナル解説図です。報告された挙動をまとめたもので、被害端末の実際の活動を再現した図ではありません。

報告された流れは次のとおりです。

  1. SSH鍵を挿入。 攻撃者が管理する公開鍵を、svc-telemetryというコメント付きで~/.ssh/authorized_keysへ追加します。
  2. 遠隔アクセスを準備。 端末のSSHサービスを利用可能にしようとし、134[.]209[.]82[.]225へ外向きの逆向きトンネルを作ります。
  3. 永続化。 提供されたmacOSの経路では、com.apple.sysmondというLaunchAgentと~/.config/.smtのスクリプトを使います。図には、関連する鍵の素材、一時的な.stk_*ファイル、再接続の動作も描かれています。
  4. 端末情報を外部へ送信。 同じIPアドレスのTCP 8099、パス**/beacon**へ、暗号化されていないHTTPで端末の情報を送ります。

プラットフォームの証拠は慎重に読みます。 本文ではWindowsのタスク、Linuxのcron、macOSのLaunchAgentを使う分岐が説明されています。一方、提供された図ではLinuxとWindowsの分岐をそのビルドでは未実行と明示しています。描かれたコードの経路を示す資料であり、すべてのOSで設置成功や被害端末が確認された証拠ではありません。図にあるSysMonと@rebootは、各分岐を調べるための手掛かりです。

報道が紹介する分析では、後続の追加ペイロードは観測されていません。その観測の範囲を超えて安全と判断することはできません。利用可能なSSHセッションがあれば、追加のマルウェアをダウンロードしなくても、コマンド実行やファイル転送が可能になります。

SSHサービスを開始できなくても調査は終わらない

Cursorは、多くのmacOS・Windows端末でローカルSSHサービスの有効化に管理者権限が必要で、悪意のある拡張には通常その権限がなかったと説明したと引用されています。その段階が失敗し、利用可能なローカルSSHサービスもなければ、意図されたSSHログイン経路は成立しなかったことになります。

同じ説明では、それでも鍵の追加、永続化、端末情報の送信は起きるとされています。遠隔ログインの前提が欠けていた場合でも、これらの影響は調査・復旧の対象です。

当サイトの分析: 事案の前からSSHが利用できたかも確かめます。サービスの開始に失敗した記録だけでは、それ以前の状態は分かりません。トンネルからアクセスできたかは、実際のリスナー、認証方針、挿入された鍵、トンネルの成立によって変わります。また、外向きの逆向きトンネルでは、ネットワークの問いも変わります。境界で内向きの22番ポートを遮断しているだけでは、外向きのトンネルから端末のローカルSSHへ到達できなかったことを証明できません。

インストールによる露出の最大5,000人という推定と、ローダー実行、SSHログイン成功、その後のアクセス・窃取を分けたオリジナル図。後の段階には別の証拠が必要で、報道はそれらの件数を示していない。

図2。最大人数の推定はインストールによる露出の段階に属します。報道は、そこから遠隔アクセス成功や認証情報窃取へ至った割合を測定していません。

最初のビーコンに含まれた情報

提供された報道は、次の情報を挙げています。

  • api.ipify[.]orgで取得するパブリックIP。
  • ホスト名、ローカルユーザー名、OS、CPUアーキテクチャ。
  • ホームディレクトリと現在の作業ディレクトリ。
  • git config --global user.emailで得るGitのグローバルメールアドレス。
  • 最大40個の環境変数名(KEY、TOKEN、SECRET、PASS、AWS、GCPのいずれかを含むもの)。

Paul McCarty氏の説明として、最初のビーコンに環境変数の値は直接含まれていなかったと引用されています。それでも名前から、認証情報の種類、クラウド事業者、開発システムが分かる可能性があります。遠隔セッションが成立すれば、アカウント内をさらに調べる機会が生じます。

これらの証拠の段階を分けます。報告された最初のビーコンだけでは、APIキーの値を直接含んでいたとは言えません。一方、それだけで、後から操作する者が利用できた認証情報のすべてが秘密に保たれたとも言えません。認証情報への対応は、端末での実行の証拠と、その認証情報から到達できるサービスの監査記録を基に判断します。

指標と、その限界

次の指標は、2026年10月30日までの提供された報道・図から転記しています。アドレスは無害化して表記しています。一致には文脈の確認が必要で、観測期間や成果物の範囲はこれらの資料に限られます。

指標 種類と報告された用途 調査上の限界
anthropic.claude-code / 2.1.313 / Cursor配信 パッケージ、版、配信経路の組み合わせ 版の表示は棚卸しの手掛かりです。実物を保全して入手元を確かめ、別経路の同じ版まで版番号だけで悪意があると判定しません。
134[.]209[.]82[.]225 トンネルとビーコンの送信先とされたIP 過去のインフラの指標です。端末、時刻、ポート、開始プロセスと相関させます。IPの所有や用途は変わり得ます。
TCP 22、8099、HTTPパス/beacon トンネル接続と端末情報の送信 接続イベントだけでは、SSHログインやHTTP要求の内容は証明できません。
svc-telemetry 挿入されたSSH鍵のコメント コメントは変更可能で、鍵の暗号学的な指紋ではありません。公開鍵全体と文脈を保全します。
com.apple.sysmond 報告されたmacOSのLaunchAgent名 見慣れたような名前でも、plist、実行先、時刻を調べる必要があります。
~/.config/.smt、一時的な.stk_*ファイル macOSの経路に描かれたスクリプトと鍵の素材 ファイル名のパターンは出典付きハッシュより弱い証拠で、変更やほかのファイルとの一致もあり得ます。
@reboot、SysMon 提供図にあるLinuxのcron、Windowsのタスクの分岐 そのビルドでは未実行と明記されています。端末の証拠を確認してから、実際に設置されたかを判断します。
api.ipify[.]org パブリックIPを調べるサービス 多くの人が使う正規サービスです。アクセスだけでマルウェアと判定する指標ではありません。

提供された資料にはVSIXや展開ファイルのSHA-256がなかったため、ここには掲載しません。後のベンダー更新からハッシュを得る場合は、アーカイブ、展開後のJavaScript、ほかのファイルのどれを識別するかを記録します。収集物のハッシュも計算・保全し、異なる種類の成果物同士を同じものとして比較しません。

対応:パッケージと端末をそれぞれ復旧する

  1. 露出した可能性がある端末を特定。 Cursorの導入状況、拡張の実際の入手元、報告期間の導入・更新記録を調べます。新規インストールを意識していなくても、自動更新で届いた可能性があります。その後の起動や永続化の活動に合わせ、調査期間を広げます。
  2. 証拠を保全し、進行中のリスクを封じ込める。 組織の対応手順で、悪意のある実行の証拠がある端末を封じ込めます。可能な範囲で破壊的な削除の前に、VSIXや導入済み拡張、更新記録、プロセスツリー、通信ログ、SSH設定、永続化の定義を保全します。
  3. アクセスの前提と、その後の活動を調べる。 SSHサービスの状態、鍵の挿入、トンネル作成、認証イベントを確認します。リポジトリ、レジストリ、クラウド、ID基盤、デプロイの監査記録を端末の時系列と照合します。
  4. 確認した手順で既知のアクセスと永続化を除去。 ベンダーの復旧案内は最新のCursorの通知を参照し、プラットフォームの対象範囲を確かめます。更新やアンインストールだけで、別の場所に作られた成果物まですべて消えるとは限りません。すべてのSSH鍵や、同様の名前の正規自動起動設定を一律に削除しないでください。
  5. 信頼できる別の端末から認証情報とセッションの失効範囲を決める。 悪意のある実行や利用可能な永続化が確認された場合、そのアカウントから使えるリポジトリ、レジストリ、クラウド、CI/CD、デプロイ、AIサービスの認証情報やセッションを評価します。露出の証拠と組織の方針に基づいて更新・失効し、利用履歴も調べます。更新だけで解決したとは判断しません。
  6. クリーニングで十分な確信を回復できるか判断。 実行履歴、アクセス可能な認証情報、その後の活動の範囲を限定できなければ、管理下での再構築を検討します。通常利用へ戻す前に、信頼する配信元、永続化の残存確認、関連サービスの監査結果を確かめます。
担当 実務上の役割 保全する証拠
IT運用 Cursor、入手元、更新履歴を把握し、信頼する配信元から再導入 端末・パッケージの一覧、導入済み・キャッシュ成果物、更新時刻。
EDR・インシデント対応 封じ込め、実行経路の調査、永続化からの復旧 プロセスツリー、書き込み、SSH状態、鍵と起動設定。
SIEM 端末、通信、サービスアカウントの活動を相関 端末、通信、SSH、リポジトリ、レジストリ、クラウド、IDのログ。
委託先リスク ベンダーの対象範囲、訂正、復旧の限界を追跡 日付付きの通知、配信経路の説明、パッケージの来歴。
法務・プライバシー 確認済みの事実から個人データや契約上の影響を評価 送信が確認されたデータ、その後のアクセス、対象者、明示した不確実性。

対象を絞ったハンティング例

検証状況: 以下は指標の転記、端末・時間の制限、英日版とダウンロードの一致を静的に確認した例です。実テナントや本番インデックスでは実行していません。

開始用の期間は10月29日09:00 UTC〜10月31日00:00 UTC。おおよその配信期間と、その後の一部の活動を含む調査用の選択であり、侵入期間の全体を断定するものではありません。遅れて起動した場合や永続化を調べる場合は、保存期間を確かめて検索範囲を広げるか移動してください。

Microsoft Defender XDR:報告されたインフラへの通信

Defender for EndpointのDeviceNetworkEvents、以下のフィールド、対象端末へのAdvanced Hunting権限が必要です。REPLACE_WITH_DEVICE_IDを調べる端末ID、またはその一覧に置き換えます。例を実行できるようにするためだけに端末フィルターを外さないでください。結果は100件までです。

// Microsoft Defender XDR / Defender for Endpoint: DeviceNetworkEvents.
// Replace the DeviceId list. This historical UTC window is a starting point;
// extend the investigation window for delayed activation or persistence.
let Start = datetime(2026-10-29T09:00:00Z);
let End = datetime(2026-10-31T00:00:00Z);
let TargetDevices = dynamic(["REPLACE_WITH_DEVICE_ID"]);
DeviceNetworkEvents
| where Timestamp between (Start .. End)
| where DeviceId in (TargetDevices)
| where RemoteIP == "134.209.82.225"
| where RemotePort in (22, 8099)
| project Timestamp, DeviceId, DeviceName, ActionType, RemoteIP, RemotePort,
          InitiatingProcessFileName, InitiatingProcessCommandLine
| order by Timestamp desc
| take 100

通信KQLをダウンロード。

想定される結果は、報告されたIPと2つのポートへの接続イベントと、その開始プロセスです。ActionTypeと関連証拠から、試行か成立した活動かを評価します。この検索では/beaconの本文やSSH認証の完了は分かりません。テレメトリーの欠落、出口での遮断、後のインフラ変更、対象期間外の活動は死角です。

Microsoft Defender XDR:SSHプロセスの手掛かり

コマンドラインと開始元フィールドを持つDeviceProcessEvents、対象端末へのアクセスが必要です。端末と時間は同じ前提で置き換えます。

// Microsoft Defender XDR / Defender for Endpoint: DeviceProcessEvents.
// Replace the DeviceId list; correlate matches with package, file and network evidence.
let Start = datetime(2026-10-29T09:00:00Z);
let End = datetime(2026-10-31T00:00:00Z);
let TargetDevices = dynamic(["REPLACE_WITH_DEVICE_ID"]);
DeviceProcessEvents
| where Timestamp between (Start .. End)
| where DeviceId in (TargetDevices)
| where FileName in~ ("ssh", "ssh.exe", "autossh", "autossh.exe")
| where ProcessCommandLine contains "134.209.82.225"
    or ProcessCommandLine contains ":0:localhost:22"
| project Timestamp, DeviceId, DeviceName, AccountName, FileName, ProcessCommandLine,
          InitiatingProcessFileName, InitiatingProcessCommandLine
| order by Timestamp desc
| take 100

プロセスKQLをダウンロード。

ssh・autosshの活動から、報告されたIPや逆向き転送の引数パターンを探します。正規の管理でも逆向きSSHは使われます。親プロセス、導入履歴、鍵、永続化と相関させます。実行ファイル名や引数を変えられると、この限定的な検索では見落とす可能性があります。

Splunk:ネットワークログによる裏付け

インデックス、sourcetype、調査する送信元IPを置き換えます。src_ip、dest_ip、dest_port、actionがイベントにある前提なので、データソースに合わせてフィールドを対応させてください。対象インデックスを検索できるロールが必要です。エポック秒の境界は、検索ヘッドの表示タイムゾーンにかかわらず、同じUTC期間を表します。ctimeの表示はSplunkの設定タイムゾーンに従います。

index=REPLACE_WITH_NETWORK_INDEX sourcetype=REPLACE_WITH_NETWORK_SOURCETYPE earliest=1793264400 latest=1793404800
src_ip="REPLACE_WITH_SOURCE_IP" dest_ip="134.209.82.225" (dest_port=22 OR dest_port=8099)
| stats count min(_time) AS first_seen max(_time) AS last_seen values(action) AS actions BY src_ip dest_ip dest_port
| sort 0 - last_seen
| head 100
| convert ctime(first_seen) ctime(last_seen)

Splunk検索をダウンロード。

ひとつの送信元端末の通信を、最大100行にまとめます。NATは端末への帰属を難しくすることがあり、通常の通信ログだけではSSH認証やファイルの閲覧は分かりません。結果が0件でも、パッケージの未実行や永続化の不在は証明できません。

出典と報道の限界

マーケットプレイスへの混入手段、遠隔ログイン成功件数、その後の影響全体は、提供された報道では分かっていません。この記事は攻撃者の特定・帰属を断定せず、Anthropicのリポジトリや発行用認証情報が侵害されたとも主張しません。

記事一覧へ →Read in English ↗