.png)
18分、220万のターゲット
GitHubにとって、今週は厳しい一週間となった。昨日、GitHubはシステムへの不正アクセスを確認した。報道によると、攻撃者は約3,700の内部リポジトリからデータを抽出しており、侵入経路はGitHub社員のマシン上で動作していた改ざんされたVS Code拡張機能だったという。
その前日、Nx Console(Nxモノレポビルドシステム向けの人気VS Code拡張機能)が、この侵害を可能にした仕組みを明らかにした。セキュリティの面において、VS Codeの拡張機能はまさに無法地帯だ。
Nx Consoleには何が起きたのでしょうか
5月18日、Nx Console拡張機能のバージョン18.95.0(インストール数220万件、検証済み発行者バッジ付き)が、UTC 12:30にVisual Studio Marketplaceにアップロードされました。マイクロソフトはこのアップロードに対してフラグを立てませんでした。 NxのメンテナーがMarketplaceからのアップロード通知メールを受け取ったのは、その6分後のUTC 12:36でした。問題のあるビルドはUTC 12:47に公開停止され、マイクロソフトはUTC 12:48にその削除を完全に記録しました。Visual Studio Marketplaceでの公開期間は、合計で約18分間でした。
同じビルドはOpenVSXでも公開されました。以前の報道ではOpenVSXは影響を受けていないとされていましたが、メンテナンス担当者が更新したアドバイザリによると、同ビルドはUTC 12:33から13:09まで公開されていたとのことです。これはおよそ36分間であり、Visual Studio Marketplaceでの公開期間の2倍に相当します。
この勧告によると、該当する期間中に自動更新を有効にしてNx Consoleをインストールしていたユーザーは、システムが侵害されたとみなすべきであり、ディスク上のあらゆるデータ(トークン、シークレット、SSHキー、および認証情報に関連するあらゆるもの)を更新する必要がある。
根本的な原因は、あるコントリビューターのGitHubトークンが、以前のサプライチェーン攻撃で盗み出され、悪意のあるリリースを公開するために悪用されたことでした。公開パイプラインは盗まれたトークンを疑うことなく受け入れてしまい、攻撃者にとってはそれだけで十分だったのです。
自動更新こそが本当の問題なのです
人気のある拡張機能マーケットプレイスはすべて、デフォルトで自動更新が有効になっています。VS CodeやCursorをはじめ、あらゆる製品がそうです。この仕組みには、それ自体としては理にかなった理由があります。ほとんどの開発者は手動で更新を行わないため、自動更新を無効にすると、古くて脆弱なコードが動作し続けるエディタが長期間にわたって残ってしまうことになるからです。
悪意のある、あるいは乗っ取られたパブリッシャーの存在を考慮すると、このトレードオフはもはや意味をなさなくなります。自動更新機能により、リリースを制御する攻撃者は、その拡張機能を実行しているすべてのマシンに対して直接的な配信経路を手にすることになります。マーケットプレイスでは、更新プログラムが公開されてから、インストール済みのクライアントがそれを取得するまでの間に、審査のゲートや待機期間が設けられていません。
このチェック自体に、決まった間隔は一つもありません。 12時間フォールバックタイマー において extensionsWorkbenchService.ts (『Insiders』での1時間の放送と、近日公開予定の製品アップデート), 起動時の即時チェック ワークベンチがアイドル状態になり、いくつかの イベントベースのトリガー (製品の更新チェック、許可リストポリシーの変更、接続が従量課金制から定額制への切り替え、自動チェックのトグルがオンになること)。さらに、その他のマーケットプレイスとのやり取りに伴う副作用として更新を捕捉する別の処理経路も存在します。VS Codeが何らかの理由でギャラリーにクエリを送信する場合(拡張機能サイドバーの表示、マーケットプレイスの検索、おすすめプロンプト、ギャラリーのメタデータを取得するバックグラウンドサブシステムなど)、それは 結果をインストール済みの拡張機能と照合し、古くなっているものがあれば、火災 eventuallyAutoUpdateExtensions…これは、以下の方法でインストールされます ディレイヤーの処理間隔を1秒に制限. とともに extensions.autoUpdate on(デフォルト)の場合、インストールはバックグラウンドで実行され、プロンプトは表示されません。
Visual Studio Marketplace の 18 分間のウィンドウ期間中、その間に Nx Console のリストに接触するギャラリー操作を行った実行中のエディターはすべて捕捉されました。これには、サイドバーの表示、Marketplace の検索、おすすめ機能の参照、あるいはギャラリーのメタデータを取得するバックグラウンドサブシステムなどが含まれます。タイムゾーンや稼働時間を超えて、220 万件のインストール数を誇り、多くの開発者が常に開いたままにしている拡張機能のサイドバーにおいて、その対象となるユーザー数は、単なる定期的なタイマーだけでは想定できないほど膨大なものとなります。 当社によるこれらの機能のテストでは、新バージョンの公開から数分以内に自動更新が実行されるのを確認しました。これは、12時間のタイマーではなく、ギャラリーとの同期プロセスによるものです。OpenVSXのウィンドウでも、約36分間同様の動作が見られました。
メンテナンス担当者のタイムラインからは、自動更新によって生じる検知のタイムラグも明らかになっています。18分間のうち、メンテナンス担当者がマーケットプレイスからのアップロード通知を確認するまでに6分が経過していました。この6分間、パブリッシャー側の担当者が事態を把握して対応するよりも前に、自動更新によって悪意のあるバージョンがユーザーのマシンにインストールされ続けていたのです。
なぜこれがうまくいくのか
Nxの事例は、VS Code拡張機能でこのような事態が発生したのは初めてのことではありません。2025年11月、AsyncAPIへの攻撃は、Shai-Hulud 2.0ワームの感染拡大における最初の事例となりました。 攻撃者は、シークレット 保管されていたAsyncAPIのnpmおよびOpenVSXの公開トークンを盗み出し、それらを利用して悪意のあるAsyncAPI npmパッケージと、OpenVSX上のAsyncAPI VS Code拡張機能の悪意のあるバージョンをプッシュしました。影響を受けるリリースがメンテナンス担当者によって非推奨となる前に、少なくとも1人の開発者がプロジェクト自身の課題追跡システム上で、この拡張機能を通じて感染したと報告しています。 ここでも同様の手口が用いられました。盗まれた認証情報を使い、短い期間内に自動更新されるユーザーベースに対して悪意のあるコードをプッシュしたのです。
ここにはディフェンダーにとって不利な要素がいくつか重なっている:
- インストール数の多さや「検証済み」のバッジは信頼の証であり、攻撃者が狙うのはまさにその信頼を乗っ取ることです。人気のある拡張機能はすでに何百万台ものマシンにインストールされているため、一度改ざんされたリリースが流通すれば、新規ユーザーに対するソーシャルエンジニアリングを一切行わなくても、既存のすべてのインストール環境に自動的に悪意のあるコードが送り込まれることになります。
- 拡張機能は、コンパイルされたバイナリではなく、インタプリタ型JavaScriptとして提供されます。悪意のあるNx Consoleのペイロードは、2,777バイトのサイズでミニファイされたファイルに注入され、その後、公式リポジトリ内の未管理コミットから498KBの難読化されたドロッパーを取得しました。
nrwl/nxリポジトリ。EDRには、ユーザーがすでに信頼している拡張機能との比較において、ミニファイされたJavaScriptの差分に関する署名がありません。 - 管理者の認証情報は、本来あるべきよりも容易にフィッシングやスクレイピングの標的となりやすい。Nxの事例は、別の侵害事件で入手されたトークンが、下流の信頼できるターゲットに対して悪用されたことから始まった。AsyncAPIの事例は、GitHubリポジトリのシークレットに何年も放置されていたOpenVSXのトークンがきっかけとなった。
- コミュニティはこの問題への対応を迅速化しつつありますが、18分間の自動配布だけでも十分な被害をもたらす可能性があり、しかもこれは、この拡張機能をホストしている2つのマーケットプレイスのうち、1つでの話に過ぎません。
いったんマシンにインストールされてしまえば、マーケットプレイスではどうすることもできません
また、マーケットプレイスには、一度インストールされた拡張機能を回収する手段がありません。掲載を停止すれば新規のインストールは防げますが、すでに悪意のあるバージョンを入手したユーザーは、クリーンなバージョンに更新するか手動でアンインストールするまで、その拡張機能を使い続けることになります。メンテナンス担当者が修正版を公開すれば、自動更新によって影響を受けたユーザーは最終的に修正版に切り替わりますが、マーケットプレイスには「キルスイッチ」のような機能はなく、インストールをより迅速に元に戻す手段もありません。
Wiz ResearchによるShai-Hulud 2.0のロングテール分析は、この実態を如実に示しています。悪意のあるAsyncAPI VS Code拡張機能(v1.0.1)は2025年11月26日にOpenVSXから削除されましたが、レジストリは以前のクリーンなバージョン(v1.0.0)にロールバックされました。 v1.0.1をインストールしていたユーザーには新しいバージョンが提供されなかったため、自動更新は一切実行されませんでした。この拡張機能は開発者のマシン上で動作し続け、約1か月間にわたり認証情報を盗み出し続けました。これにより、このキャンペーンによるロングテール感染の90%以上を占め、11月25日から12月24日にかけては1日あたり約100~200の新しいリポジトリが侵害されました。 この流れが止まったのは、Wiz Researchが前日に問題を報告した後、AsyncAPIが12月24日にクリーンなv1.1.0を公開した時点でした。これによりIDEが自動的に更新され、数日以内に1日あたりの新規侵害件数は数件にまで減少しました。
マイクロソフトもまた、事前の告知なしにリストを削除することがあります。公開期間中にインストールしたユーザーへの通知は一切ありません。エディター側からも、「改ざんされたバージョンがインストールされている可能性があります。お使いの端末を確認してください」といったメッセージは表示されません。インシデント当日にセキュリティ関連のニュースを追っていたのでない限り、唯一の兆候は、マーケットプレイスの検索結果にその拡張機能が表示されなくなったことだけかもしれません。 Nx Consoleのリポジトリには、すでに開発者から「なぜこの拡張機能がマーケットプレイスから消えたのか」と善意で尋ねるイシューが投稿されています。ほとんどのユーザーは、そんなことを尋ねようとは考えないでしょう。
こうした要因が重なり、マーケットプレイスとして取れる唯一の効果的な対応策は、既知の不具合があるバージョンの新規インストールを阻止することだけとなります。期間中にすでに悪意のあるビルドを配信してしまった開発者にとっては、その対応はすべて自己責任となり、マーケットプレイス自体以外の何らかのルートを通じてこの事象を把握する必要があるのです。
実際に何をすべきか
5月18日の該当時間帯に自動更新機能を使用してNx Consoleをインストールしていた場合、このアドバイザリの指針に従うことが適切な対応策となります。具体的には、トークン、シークレット、SSHキー、および影響を受けたマシンからアクセス可能なその他の情報をすべて更新してください。OpenVSXビルドを実行していたユーザーは、Visual Studio Marketplaceの36分間ではなく、より長い36分間の対象期間に該当します。
より広範な対策としては、リリースが公開されてからインストールが許可されるまでの間に遅延を設けるという、手軽な方法があります。 Aikidoの デバイスの保護 新しいパッケージおよび拡張機能のバージョンについては、デフォルトで48時間の保留期間が設定されており、これによりNx Console(および最近の 耐久性のあるタスク PyPIへの不正アクセス)を、誰かが事前に悪意のあるものだと特定する必要なく。ベンダー製のソリューションを持たない個人としては、できることといえばせいぜい VS Code で拡張機能の自動更新を無効にする その代わりに、計画的なスケジュールに従って更新を行う。この方法では更新のペースは遅くなり、正規のリリースより1日か2日遅れてしまう。しかし、他人が公開したばかりのコードを、公開されたその瞬間に自分のノートパソコンで実行しないことには、それなりの代償が伴うのだ。
VS Code はすでに、これを実現するための基盤となるポリシー機能をサポートしています。 組織レベルの設定。この 許可される拡張機能 エンタープライズポリシーにより、管理者は管理対象デバイス全体でインストール可能なパブリッシャー、拡張機能、さらには特定のバージョンを制限できます。それに加えて、「N時間以上経過したバージョンのみを自動インストールする」といったクールダウンオプションがあれば、同じ設定に組み込むことができるでしょう。 技術的な理由でこれがまだ実装されていないという正当な理由はなく、同梱されているマーケットプレイスでこうしたインシデントが頻発していることを考えれば、実装されるべきです。Cursorやその他のVS Codeベースのエディタについても同様です。組織が許可リストを適用できるようにしているのなら、クールダウンも適用できるようにすべきです。
GitHubの件は、被害者が著名人であるため数週間は話題になり続けるだろう。そして、その根底にある仕組みが、今後も同様の情報漏洩を引き起こし続けることになる。マーケットプレイスが、ありふれた手口で簡単に乗っ取られる可能性のあるアカウントからの更新を自動的に反映し続ける限り、人気のある拡張機能はどれも、たった1つのトークンが盗まれるだけでワームと化してしまう危険性をはらんでいる。
Aikido 機器の保護
VS CodeやCursorがネイティブでクールダウン機能を搭載するのを待たずに、今すぐクールダウン機能を利用したい場合は、「Aikido Protection」をお勧めします。このソリューションは、デバイスレベルでパッケージや拡張機能のインストールに対して設定可能な最低使用期間ポリシー(デフォルトは48時間)を適用するため、開発者が使用するあらゆるVS Codeベースのエディタに同じポリシーが適用されます。

