Code editor and developer platform logos

Koi Securityのセキュリティ研究者が、今日のAIコーディングツールのインフラストラクチャの奥深くに埋もれている重大なゼロデイを偶然発見した。もしこの脆弱性が悪用されていたら、洗練されていない攻撃者は一撃で1000万台以上のマシンを乗っ取ることができただろう。

CursorやWindsurfのようなAIコーディング・アシスタントは爆発的な人気を博し、世界中の開発者の生産性向上を約束している。その洗練されたインターフェイスの背後には、コミュニティによって構築されたVS Codeフォークと、魔法を動かす拡張機能のオープンマーケットプレイスという共有基盤がある。しかし、この新しい開発者ツールの波には、危険な盲点がある。

VSXPloitと呼ばれている:開発者のサプライチェーンにおける重要なコンポーネントであるOpenVSXの見落とされたたった1つの欠陥が、VS Codeフォークを実行しているすべてのマシンで、サイレントかつフルシステムの侵害を許してしまったのだ。一つのバグ。完全なコントロール。

潜入してみよう。

今日のAIを搭載したエディタは、最も基本的な機能を提供するために拡張機能に大きく依存している。シンタックスハイライト、リンティング、デバッグなどの機能はエディタにハードコードされているわけではなく、エクステンションによって提供されている。

これらの各エクステンションは、開発者のマシン上で完全な権限で実行される。このことは、たった1つの危険なエクステンションが、それをインストールした人のマシンを完全に乗っ取る可能性があることを意味する。

Open VSX impact

この悪夢のようなシナリオは、ソフトウェア・プロビジョニングと拡張機能を保護するプラットフォームを提供するKoi Security社のセキュリティ研究者Oren Yomtov氏が偶然発見したものだ。

最近の投稿でYomtov氏は、Cursor、Windsurf、VSCodiumなどのツールの拡張機能を提供するオープンソースのマーケットプレイスであるOpenVSXのビルドプロセスを調査していたところ、重大な欠陥を発見したと説明している。

この脆弱性によって、攻撃者は単一の拡張機能を制御できるだけでなく、サプライチェーンの大混乱を引き起こし、マーケットプレイス全体を完全に制御できるようになる。

この欠陥があれば、攻撃者は誰でも信頼できる@open-vsxアカウントで悪意のあるアップデートをプッシュすることができる。ヨムトフは当初、このコードは何千万人に使用され、何年も実行されてきたものであり、何かの間違いに違いないと考えた。しかし、彼が研究室でこの攻撃を再現すると、シミュレーションは完璧に機能した。

考えられないと思われていたことが、突然現実のものとなったのだ。つまり、無言の本格的なセキュリティ災害が、平然と存在していたのである。

a.fl_button { background-color:a.fl_button { background-color: #5177b6; border:a.fl_button { background-color: #5177b6; border: 1px solid #3b59aa; color:color: #FFF; text-align: center; text-decoration: none; border-radius: 8px; display: inline-block; font-size: 16px; font-weight: bold; margin:4px 2px; cursor: pointer; padding:12px 28px; } .fl_ad { background-color:#width: 95%; margin: 15px auto 15px auto; border-radius: 8px; border:1px solid #d6ddee; box-shadow: 2px 2px #728cb8; min-height: 200px; display: flex; align-items: center; } .fl_lef>a>img { margin-top: 0px !important; } .fl_rig>p { font-size: 16px; } .grad-text { background-image: linear-gradient(45deg, var(–dawn-red), var(–iris)54%, var(–aqua)); -webkit-text-fill-color: transparent; -webkit-background-clip: text; background-clip: text; } .fl_rig h2 { font-size: 18px!important; font-weight: 700; color:color: #333; line-height: 24px; font-family:font-family: Georgia, times new roman, Times, serif; display: block; text-align: left; margin-top: 0; } .fl_lef { display: inline-block; min-height: 150px; width: 25%; padding:10px 0 10px 10px; } .fl_rig { padding:10px; display: inline-block; min-height: 150px; width: 100%; vertical-align: top; } .fl_lef>a>img { border-radius: 8px; } .cz-news-title-right-area ul { padding-left: 0px; } @media screen and (max-width: 1200px) { .fl_ad { min-height: 184px; } .fl_rig>p { margin: 10p10px; } .fl_rig { padding:0 10px 10px 10px; width: 100%; } } @media screen and (max-width: 400px) { .cz-story-navigation ul li:first-child { padding-left: 6px; } .cz-story-navigation ul li:last-child { padding-right: 6px; } } }.

隠れた拡張機能の脅威から開発環境を守る

VSCode、OpenVSX、Chrome、その他のマーケットプレイスにおいて、Koi がどのようにリスクのある拡張機能の発見、評価、管理を支援しているかをご覧ください。

完全に可視化し、開発サプライチェーンを保護します。

デモのリクエスト

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

この脆弱性の仕組みを理解するためには、まず、拡張機能がどのようにしてOpenVSXに取り込まれるのかを理解する必要があります。

Open VSX に拡張機能を公開したい場合、2つの選択肢があります:

  1. 自分で Open VSX にアップロードする

  2. extensions.json ファイルのリストに拡張機能を追加するプルリクエストを作成し、 自動パブリッシュされるように拡張機能をリクエストする。

Docs

「毎晩のビルドが問題なのです」とヨムトフ氏は言う。

OpenVSXは毎晩、コミュニティから提出された拡張機能の最新バージョンを取得し、ビルドし、マーケットプレイスに公開する自動プロセスを実行している。これは開発者の生活を楽にするためのものだが、今回は致命的な欠陥があった。

拡張機能を自動公開するには、開発者は公開リストに追加する簡単なプルリクエストを提出するだけでよい。そこからOpenVSXが引き継ぎます。OpenVSXはコードを取得し、依存関係をインストールし、拡張機能をビルドし、信頼できる@open-vsxアカウントに属する強力なシークレットトークンを使って公開します。

Extensions.json file

このトークンは、信頼されたインフラにのみ公開され、隠されている。残念ながら、ビルドプロセスが公開リポジトリから任意のコードを実行するため、拡張機能の作者であれば誰でも、トークンを無言でキャプチャする悪意のあるアップデートを作成することができる。

さらに憂慮すべきことは、悪意のある拡張機能を直接投稿する必要がないことだ。コードを依存関係、あるいは依存関係の依存関係の中に隠しておけば、ナイトリービルド時にシステムが自動的に実行するのだ。そこからトークンを盗むのは簡単だった。

トークンを手にすれば、攻撃者は自分のエクステンションをコントロールできるだけではない。彼らはアップデートを公開し、既存のものを上書きし、マーケットプレイス全体を静かに乗っ取ることができるのだ。

衝撃:数百万人の開発者を危険にさらすサプライチェーンの悪夢

攻撃者は@open-vsxアカウントのトークンにアクセスすることで、世界規模のサプライチェーンの悪夢を作り出すことができた。「このトークンはスーパー管理者権限です。「新しいエクステンションを公開したり、既存のエクステンションを上書きしたり、エコシステム内のあらゆるパブリッシャーになりすますことができます」。

その時点から、被害はほとんど簡単になる。開発者がエクステンションをインストールしたり、エディターがバックグラウンドでエクステンションを自動更新したりするたびに、攻撃者のペイロードは彼らのマシンに静かに配信される。アラートなし。プロンプトもない。疑うこともない。完全に乗っ取られる。

そのペイロードは何をするのか?「とヨムトフは言う。VS CodeとそのフォークのエクステンションはNode.jsプロセスとして実行され、ファイルへのアクセス、他のプログラムの起動、ネットワークリクエスト、任意のコードの実行が可能だ。

人気のある拡張機能、例えばPythonプラグインに悪意のあるアップデートを行うと、キーロガーのインストール、ブラウザのクッキーの盗用、ソースコードの盗用、ビルドの感染、開発パイプライン全体のバックドアなどが可能になる。

不正なVS CodeエクステンションがSSHキーや暗号ウォレットを盗むという孤立したケースもある。しかし、これは一人の悪者が隙をついて入り込むことではないだろう。これは、エコシステム規模での全面的な乗っ取り、サプライチェーン侵害となるだろう。SolarWindsのような、開発者向けのツールだ。

Cursor、Windsurf、VSCodiumのようなデスクトップエディタに最も深刻な影響を与えるだろうが、侵害された拡張機能がどれだけ深く統合されているかによって、GitpodやStackBlitzのようなブラウザベースの環境でさえ影響を受ける可能性がある。

ではどうすればいいのか?

我々はYomtov氏に、この事件からユーザーや組織が何を学ぶべきかを尋ねた。彼の答えは、「そうでないことが証明されるまでは、すべての拡張機能が信頼されていないと考えること」だった。

拡張機能は無害なアドオンのように感じるかもしれないが、その裏側では強力なソフトウェア・コンポーネントであり、多くの場合、個人によって書かれ、完全な権限で実行され、監視なしに自動的に更新される。

「npmやPyPIからパッケージを引っ張ってくるのと変わらない。「自分のマシンにルートアクセスできるGitHubのレポを盲目的に信用しないのであれば、拡張機能も信用すべきではない。

自分自身を守るために、Yomtov氏は組織が拡張機能を攻撃対象の一部として扱い、他の依存関係に使うのと同じ規律を適用することを勧めている。つまり

  1. 何が、どのマシンに、誰によってインストールされているか、実際のインベントリを維持すること。

  2. 拡張機能を誰が構築し、どのように保守し、実際に何を行うかに基づいてリスクを評価する

  3. 許可されるものに関する明確なポリシーを実施し、何かが範囲を逸脱した場合に対処すること。

  4. 拡張機能は一夜にして無言のアップデートを行い、新たなリスクをもたらす可能性があるため、継続的に監視を行う

Koiの調査チームは、OpenVSXやMicrosoftのマーケットプレイスだけでなく、Chrome Web Storeのような他の拡張機能マーケットプレイスでも、脆弱な拡張機能と積極的に悪質な拡張機能の両方を発見し続けています。

「エコシステムはガードレールよりも早く成長している。「それが変わるまで、最も安全な前提は信頼ゼロです。すべての拡張機能は、あなたがそれをレビューし、監視していない限り、潜在的なバックドアです。

ヨムトフとKoi Securityのチームは、OpenVSXプロジェクトを管理するEclipse Foundationに責任を持って脆弱性を開示した。その後数週間にわたり、彼らはメンテナーと緊密に協力し、問題を検証し、強固な修正プログラムを設計し、パッチが適切に実装・展開されるようにした。

この協力のおかげで、脆弱性は解消され、マーケットプレイスは、毎日それを利用している何百万人もの開発者にとって再び安全なものとなった。

しかし、この事件は警鐘を鳴らすものです。信頼できるインフラでさえも、特にそれが開発エコシステム全体の鍵を握っている場合は、常に精査する必要があるのです。

Koi が、VSCode、OpenVSX、Chrome、その他のマーケットプレイスにおいて、リスクのある拡張機能の発見、評価、管理をどのように支援しているかをご覧ください。

チャットで話そう。

主催・執筆:Koi Security.