← ブログに戻る
Ai読了目安 13 分

12時間と5,000台——AnthropicのものではなかったClaude Code拡張機能

公開日 2026年11月1日
12時間と5,000台——AnthropicのものではなかったClaude Code拡張機能

木曜日のどこかで、Cursorのマーケットプレイスに並んでいたClaude Code拡張機能のビルドが、名乗っていたものではなくなった。2つのバージョン——2.1.312と2.1.313——が持続的なSSHバックドアを抱えていた。掲載は12時間近く続いた。Cursor自身のカウントでは、影響を受けた開発者は「最大5,000人」。

詳細は、ほぼ同時期に出た一連のセキュリティ記事による。Step Security、Sophos、BleepingComputer、Microsoftのセキュリティブログ、そして時系列を最も正確に描いたArs Technica。それらによれば、改ざんされた拡張機能はバックドアがすべきことをした。再起動を生き延びる入口を開けた。ここではSSH経由で。The Vergeのまとめは、ペイロードがホスト名、ユーザー名、IPアドレスを収集したと記している。

短く言えばそういうことだ。長く言えば、拡張機能マーケットプレイスとは何か、そしてなぜこれが必然だったかという話になる。

実際に何が侵害されたか

Anthropicのサーバーではない。Claudeモデルでもない。配布チャネルだ。

Claude CodeはCLIとして、またエディタ拡張として提供される。CursorはVS Codeと同じように独自の拡張マーケットプレイスを運営していて、問題の掲載は公式のClaude Code拡張としてブランド付けされていた。エディタ内で「claude code」を探す開発者には、その掲載は正しく見えた。名前もアイコンも説明も正しかった。

インストール時に走ったのはトロイの木馬化されたビルドだ。記事が描写する仕組みは持続的なSSHバックドア——後から攻撃者がSSHでマシンにログインできるようにする改変で、ユーザー側の追加操作は要らない。開発者のノートPCにとって、これはほぼ最悪のペイロードだ。アクティビティモニタに現れる暗号通貨マイナーではない。静かな扉である。

A hardware security key plugged into a laptop USB port, close up

なぜ開発者が格好の標的なのか

侵害された開発者マシンは、ノートPC1台ではない。異常に広い範囲に届く認証情報の束だ。プライベートリポジトリのソースコード、CIトークン、クラウドのキー、3月に片付けるつもりだった.envの中のデータベース接続文字列、フリート全体で互いに信頼し合うSSHキー。

SSHバックドアはこの環境に特に向いている。開発者マシンはすでにSSHを動かし、authorized_keysを持ち、他のマシンからの受信接続を想定している。そのファイルに新しい鍵が1つ増えても、未知のIPへの新しい外向き接続ほど異常には見えない。

タイミングも重なる。木曜日、勤務時間中、多くのチームがローンチサイクルの最中。窓は長くなかったが、掲載が検索結果の上位にあれば、12時間で数千インストールは十分あり得る。

誰も声に出したくない部分

拡張マーケットプレイスは、消費者が思うようなアプリストアではない。どちらかといえばパッケージレジストリに近い。レビューの工程はあるが、狙いは投稿時点で明らかな悪意を捕まえることで、公開元が今も同じ公開元か、バイナリが今も同じバイナリかを継続的に検証することではない。

これはCursor固有の失敗ではない。第三者がローカル権限で動くコードを公開できるあらゆるエコシステムの構造的な弱さだ。npm、PyPI、VS Code拡張、ブラウザ拡張、そして今はAIコーディングツールの周りに育ったマーケットプレイス。攻撃面はモデルではなく、インストーラである。

この件が注目されたのはブランド名のせいだ。有名なAI製品の名前を冠した拡張が、ほとんどのユーザーがまさにその製品を探しているマーケットプレイスにある。防御しづらい信頼のショートカットで、名前がソーシャルエンジニアリングをやってくれる。

対応はどう見えたか

掲載は取り下げられ、Cursorはユーザー数を公表した。セキュリティ各社は指標を公開した。報道によれば、Anthropicは悪いビルドを出した当事者ではない。Cursorのマーケットプレイス上の拡張は、Anthropic自身とは別の配布チャネルだった。

この区別は責任の話には効くが、リスクの話には効かない。開発者から見れば「エディタ内のマーケットプレイスからClaude Code拡張を入れた」は1つの行為で、その背後の管理の連鎖は見えない。

今週やるべきこと

Cursorでも、第三者マーケットプレイスを持つエディタでも、今週は地味な3つをやるのに良い週だ。

第一に、インストール済み拡張を一覧し、公開元を確認する。名前ではなく公開元、できればインストール元も。見覚えのないものは削除する。ファーストパーティ由来ですでに持っている機能を重複させるものも削除する。

第二に、開発マシンの~/.ssh/authorized_keysを点検する。見覚えのない鍵を探す。外向き接続しかないノートPCでは、このファイルは空か存在しないことが多く、想定外のエントリはすぐ目につく。

第三に、そのマシンから到達できた認証情報をローテーションする。ここが高くつく工程で、飛ばされる工程でもある。全部は無理なら、最も痛いものから。クラウドプロバイダーのキー、パッケージレジストリのトークン、本番リポジトリへの書き込み権限を持つものすべて。

チームならもう1つ。拡張のバージョンを固定し、レビュー済みリストから入れる。検索で上位に来たものを個人が勝手に入れるのをやめさせる。npm依存ではすでにやっているのに、エディタプラグインではほぼ誰もやっていない方針だ。

なぜ半日気づかれなかったか

12時間は絶対時間としては長くないが、配布チャネルの寿命としては非常に長い。その窓の間、拡張はインストール可能で、インストール可能は実行可能を意味し、実行可能は、通常の勤務時間中にインストールを押した開発者が全員潜在的に晒されたことを意味する。

検知は注目すべきことに外から来た。不審な挙動を監視していたセキュリティベンダーが拾い、マーケットプレイスは拾わなかった。これはCursorへの批判ではない。こういうエコシステムの仕組みだ。レジストリは可用性に最適化されていて、ホストする全成果物の継続的な挙動監視には最適化されていない。全拡張の全アップデートをリアルタイムでスキャンする経済性は苛烈で、何かが壊れるまでやる動機は弱い。

復旧は検知より速かった。掲載停止、勧告公開、指標共有。だが順序が問題だ。まず曝露、次に説明。窓の間にインストールした人にとって、役に立つ情報は肝心の判断の後に届いた。

居心地の悪い結論

AIコーディングツールというカテゴリは2年間、能力で競ってきた。コンテキストウィンドウ、エージェントループ、話の筋を見失わずに何ファイル編集できるか。サプライチェーンの健全性で競った時間はほぼゼロだ。これまでの脅威モデルは「モデルが悪いコードを書く」であって、「拡張がマルウェア」ではなかったからだ。

5,000台と12時間は、この10年のソフトウェアサプライチェーン攻撃の基準からすれば小さい事件だ。同時に予告編でもある。次はMCPサーバーか、スキルパッケージか、人気エージェントが名前で薦めるプラグインだろう。パターンは同じだ。信頼された名前、検証の薄い配布チャネル、大きな音を立てる必要のないペイロード。

教訓は「拡張を使うな」ではない。マーケットプレイスの掲載における「公式」はほぼ何も意味しないということ、そしてスケールする唯一の防御は、聞いたこともないパッケージへのnpm installに向けるのと同じ疑いを、エディタプラグインにも向けることだ。

関連記事