VSCodeフォークを使用するすべての開発者をどのように乗っ取ることができたか

TL;DR: 1000万人以上の開発者が使用するCursorWindsurfVSCodiumなどの人気VSCodeフォークを支える、オープンソースのVSCode拡張機能マーケットプレイスopen-vsx.orgの重大な脆弱性を発見しました。この脆弱性により、攻撃者は拡張機能マーケットプレイス全体を完全に制御でき、その結果、数百万の開発者マシンを完全に制御できます。CIの問題を悪用することにより、悪意のあるアクターはOpen VSX上のすべての拡張機能に悪意のあるアップデートを公開することができます。1つのバグ。マーケットプレイス全体の乗っ取り。数百万の開発者とその組織が危険にさらされます。拡張機能を制御すれば、マシン、コード、ビジネスを制御できます。

OpenVSX: VS Codeの閉鎖的なエコシステムから生まれたもの

Visual Studio Codeの成功は主に拡張機能のエコシステムに起因していますが、そのエコシステムには落とし穴があります。Microsoftの公式マーケットプレイスには条件が付いています。Microsoftの独自製品のみが使用を許可されています。利用規約は明示的にMicrosoft以外のVSCodeビルドが公式拡張機能マーケットプレイスにアクセスすることを禁止しています。言い換えれば、VSCodeのコミュニティビルドまたはフォークを実行している場合、Microsoftのサーバーから拡張機能をプルすることは法的に許可されていません。

この制限により、Open VSXの作成につながりました。これはEclipse Foundationがホストするベンダーニュートラルのオープンソース拡張機能マーケットプレイスです。Open VSXはVSCodeフォークおよび他のオープンソースIDEのためのコミュニティ駆動型の代替案として構想されました。拡張機能がMicrosoftの管理なしで共有できる場所です。Eclipse Foundationは、コミュニティ駆動型の代替案がなければ、VSCode専用マーケットプレイスは「オープンソース開発者ツールを採用した組織の機能を大きく制限する」だろうと公然と述べています。

実際には、Open VSXは公式のVS Code Marketplaceとほぼ同じように機能しますが、任意のVSCodeフォークに開放されています。開発者はOpen VSXに拡張機能を公開でき、VSCodeフォークのユーザーはそれらの拡張機能をシームレスにインストールできます。このプロジェクトは2020年からあり、Cursor、Windsurf、Gitpod、CoderなどのようなVSCodeフォークのための事実上のアプリストアになっています。

では、Open VSXに依存しているのは誰ですか?

1000万人以上の開発者がOpen VSXに依存しています。Cursor、Windsurf、Google Cloud Shell Editor、Gitlab Web IDEを含む数十のVSCodeベースのエディターで使用されています。

Open VSXはもともとEclipse FoundationのVSCodeフォークEclipse Theia(Githubで20k stars)のために開発されました。これは、広範囲のコードエディターを支援しています。しかし実際にはすべてのVSCodeフォークが、open-vsx.orgを主要な拡張機能マーケットプレイスとして依存しています。

本日使用されているコードエディターのいくつかを簡単に説明します:

  • Cursor: 100万人以上の推定ユーザー
  • Windsurf(旧Codeium): 60万人以上の推定ユーザー
  • VSCodium: 27.3k stars、30万人以上の推定ユーザー
  • Google Cloud Shell Editor: 10万人以上の推定ユーザー
  • GitLab Web IDE: 10万人以上の推定ユーザー
  • StackBlitz: 10.5k stars、300万人以上の推定ユーザー
  • Gitpod: 13.3k stars、150万人以上の推定ユーザー
  • code-server(別名Coder.com): 71.6k stars、100万人以上の推定ユーザー
  • Arduino IDE 2.x: 2.6k stars、100万人以上の推定ユーザー
  • Red Hat OpenShift Dev Spaces
  • SAP Business Application Studio
  • IBM Wazi Developer
  • Texas Instruments Code Composer Studio
  • Arm Mbed Studio
  • Acquia Cloud IDE
  • Eclipse Che4z

この広範な採用は、Open VSXの侵害がサプライチェーンの悪夢シナリオであることを意味しています。拡張機能がインストールされるたび、または拡張機能更新がバックグラウンドで静かにフェッチされるたび、これらのアクションはOpen VSXを通じて行われます。

そして残念ながら、私たちが発見したように、1つの単純なバグが数百万の開発者を前例のない規模で信じられないほどのリスクにさらしていました。

脆弱性:古典的な「Pwn Request」のバリエーション

2025年5月、当社の研究チームはpublish-extensionsリポジトリのフローを特定しました。これはOpen VSXに拡張機能を入力するメカニズムです。

Open VSXに拡張機能を公開したい場合、2つのオプションがあります:

  1. 自分でOpen VSXにアップロードする
  2. プルリクエストを作成して拡張機能をextensions.jsonファイル内のリストに追加することにより、拡張機能を自動公開するよう要求します

Open VSX自動公開がどのように機能するかを簡潔に説明します。publish-extensionsリポジトリに毎晩のGitHub Actionsワークフローがあります。このワークフローはextensions.jsonから拡張機能のリストを取得し、新しいバージョンを持つものを自動的に更新します。このワークフローは特権認証情報で実行されます。秘密トークン(OVSX_PAT)を含む@open-vsxサービスアカウントのパワーがあり、マーケットプレイス内の任意の拡張機能を公開(または上書き)できます。理論的には、信頼できるコードのみがそのトークンを見るべきです。

毎晩のワークフローは大体このように機能します:

  1. 拡張機能のリポジトリをクローンする
  2. package.json内のバージョンが現在のバージョンより新しい場合:
  3. npm installを実行する
  4. 新しくビルドされた拡張機能をOVSX_PAT環境変数の認証トークンを使用して@open-vsxユーザーとしてopen-vsx.orgに公開する

脆弱性の根源は、npm installが自動公開されるすべての拡張機能の任意のビルドスクリプトとその依存関係を実行し、OVSX_PAT環境変数へのアクセスを提供することです。

OVSX_PATを脆弱なワークフロー設計を悪用することでエクスフィルトレーションできることを検証しました。このサンプルリポジトリを使用しています。

影響:数百万の開発者を危険にさらしたサプライチェーンの悪夢

@open-vsxアカウントのトークンを盗むと、基本的に王国の鍵を盗んだことになります。このトークンはOpen VSX Registryのスーパー管理者認証情報です。新しい拡張機能を公開し、既存の拡張機能を更新または上書きできます。攻撃者の視点からは、これは業界全体のサプライチェーンに対する制御です。次回、開発者のIDEが拡張機能を自動更新する場合(またはユーザーが新しいものをインストールする場合)、静かに侵害されたペイロードを受信します。

その機能を持つ攻撃者は何ができるのでしょうか?簡潔に言えば、あなたのマシン上で彼らが望むことはすべてです¹。VS Codeの拡張機能はNode.jsプロセスとして実行されるため、プロセスを生成し、ファイルの読み取り/書き込み、ネットワークリクエストの実行、基本的にはユーザーアカウント下で実行されるマルウェアとして機能できます。たとえば、Pythonプラグインへの悪意のあるアップデートは、キーロガーを静かに挿入し、Cookie jar、ソースコード、ビルドアーティファクトを盗む、またはあらゆる開発者のプロジェクトにバックドアを埋め込むことができます。これは開発者ツールのSolarWindsシナリオです。アップデートメカニズムを侵害し、それらのアップデートを消費するすべてのダウンストリームシステムを侵害しました。

以前に個々の悪意のあるVSCode拡張機能がSSHおよび暗号ウォレットキーを盗むなどのインシデントがありました。しかし、これは、そのような攻撃を異なるレベルの大きさに拡大させる可能性があります。

[1]: これはCursor、Windsurf、VSCodiumなどのデスクトップ多様性のエディターの場合です。Gitlabの Web IDEおよびStackblitzなどのWebベースのエディターの場合、影響はエディターのドメインおよびそれがアクセスできるプロジェクトを侵害する結果に依存します。

これについて何をすべきですか?

拡張機能の世界、およびマーケットプレイス、アプリストア、またはレジストリから消費されるソフトウェアは、デフォルトでは信頼されていないものとして扱われる必要があります。これらはサードパーティのツール、個々の発行者によって開発され、かなりの権限で実行され、しばしば普通に隠れています。あらゆるソフトウェア依存関係と同様に、継続的に発見、評価、監視、および管理される必要があります。

つまり:

  • インベントリの管理: がインストールされているか、どのマシンで、誰が使用しているかを知っている。
  • リスク評価の実行: 各拡張機能またはマーケットプレイスアイテムを潜在的な攻撃面として扱います。その出所は何ですか?維持されていますか?どの権限を要求していますか?実際には何をしていますか?
  • ポリシーと制御の適用: 許可されている内容を定義し、何かがポリシーから逸脱した場合に改善アクションを適用します。リスキーなプラグインを自動削除するか、正しいチームにアラートします。
  • 継続的な監視: 拡張機能は静かに更新できます。ガバナンスは1回限りではありません。すべてのアップデートフローに対する可視性と制御が必要です。

当社の研究チームは、Open VSX、Microsoftの独自のVSCode Marketplace、プライベートエンタープライズマーケットプレイスでさえ、毎日脆弱で現実的な悪意のある拡張機能を発見しています。問題は普遍的です。コードであり、環境で実行されている場合、それはあなたの攻撃面の一部です。

すべてのマーケットプレイスアイテムは潜在的なバックドアです。それらは未検証のソフトウェア依存関係であり、特権アクセスを持つものであり、PyPI、npm、Hugginface、またはGithubからのパッケージと同じ勤勉さを使用する価値があります。チェックされていない場合、攻撃者がますます悪用している広大で見えないサプライチェーンを作成します。

マーケットプレイス配信されたすべてのソフトウェアにゼロトラストモデルを採用する必要があります。すべてのアプリ、拡張機能、プラグイン、モデル、MCP、コードパッケージ、またはコンテナーを、発見、分析、承認、監視されるまで信頼されていないものとして扱います。

このライトアップはKoi Securityの研究チームが作成しました。健全なパラノイアとオープンソースエコシステムをより安全にするための希望の用量を持って。

驚くべきことに、MITREがその最新カテゴリーを導入したわずか数日後、すべてを発見しました。IDE拡張機能は、このスペースを保護することの重要性をさらに強調しています。

長すぎる間、信頼できないサードパーティのコードの使用(しばしば最高の特権で実行)は、企業と攻撃者の両方のレーダーの下で飛んでいました。その時代は終わりました。潮は動いています。

私たちはこの瞬間を満たすためにKoiを構築しました。実践者と企業の両方のために。当社のプラットフォームは、Chrome Web Store、VSCode、Hugging Face、Homebrew、GitHubなどのマーケットプレイスから引き出すすべての内容を発見、評価、および管理するのに役立ちます。

Fortune 50の組織、BFSI、および世界最大のテクノロジー企業の一部から信頼されているKoiは、この広大な攻撃面全体で可視性を取得し、ガバナンスを確立し、リスクを積極的に軽減するために必要なセキュリティプロセスを自動化します。

当社のソリューションについて興味があり、アクションを起こす準備ができている場合は、ここでデモを予約するか、私たちに連絡してください🤙

袖の中にはもっと驚きがあります。注視を続けてください。

開示タイムライン

このインシデントを処理する際に責任ある開示慣行に従いました。

以下は開示のタイムラインです:

  • 5月4日、午後3時18分:脆弱性が開示されました。
  • 5月5日、午後12時25分:レポートが確認されました。
  • 5月5日、午後11時34分:最初の修正が提案されました。
  • 5月6日、午前10時23分:修正が私たちによって確認されました。
  • 5月7日、午後4時47分:2番目の修正が提案されました。
  • 5月8日、午後1時41分:修正が私たちによって確認されました。
  • 5月14日、午後2時18分:3番目の修正が提案されました。
  • 5月14日、午後3時22分:修正が私たちによって確認されました。
  • 5月15日、午後4時23分:4番目の修正が提案されました。
  • 5月15日、午後9時02分:修正が私たちによって確認されました。
  • 5月19日、午後1時29分:5番目の修正が提案されました。
  • 5月19日、午後11時36分:修正が私たちによって確認されました。
  • 5月21日、午後12時58分:6番目の修正が提案されました。
  • 5月22日、午後6時09分:修正が私たちによって確認されました。
  • 6月25日、午後7時20分修正が展開されました。

翻訳元: https://www.koi.ai/blog/marketplace-takeover-how-we-couldve-taken-over-every-developer-using-a-vscode-fork-putting-millions-at-risk

ソース: koi.ai