Microsoft製テキストエディタ「Visual Studio Code(VSCode)」は拡張機能を導入することで機能を追加したり外観をカスタムしたりできます。セキュリティ研究者らが「人気拡張機能にコードを挿入した偽拡張機能」を公開した結果、短期間で大企業やセキュリティ企業を含む多くのユーザーのマシンにインストールされたとのこと。セキュリティ研究者らはVisual Studio Codeの拡張機能システムの欠陥を指摘し、警鐘を鳴らしています。

1/6 | How We Hacked Multi-Billion Dollar Companies in 30 Minutes Using a Fake VSCode Extension | by Amit Assaraf | May, 2024 | Medium

https://medium.com/@amitassaraf/the-story-of-extensiontotal-how-we-hacked-the-vscode-marketplace-5c6e66a0e9d7

2/6 | Exposing Malicious Extensions: Shocking Statistics from the VS Code Marketplace | by Amit Assaraf | Jun, 2024 | Medium

https://medium.com/@amitassaraf/2-6-exposing-malicious-extensions-shocking-statistics-from-the-vs-code-marketplace-cf88b7a7f38f

3/6 | A Letter to Microsoft: Uncovering Design Flaws of Visual Studio Code Extensions | by Amit Assaraf | Jun, 2024 | Medium

https://medium.com/@amitassaraf/3-6-uncovering-design-flaws-in-the-visual-studio-code-marketplace-ea1d8e8b0171

◆人気拡張機能を装った偽拡張機能をインストールさせる実験

研究チームは「人気のある拡張機能を装った偽拡張機能を開発し、その偽拡張機能に悪意あるコードを仕込む」という攻撃を再現するために、700万回以上インストールされている人気カラーテーマ「Dracula Official」の偽物「Darcula Official」を開発しました。Darcula Officialは「本物のDracula Officialのコードをダウンロードし、攻撃用コードを仕込み、マーケットプレイスの素材も全てコピペする」という手順で開発し、開発開始から拡張機能マーケットプレイスでの公開までにかかった時間はわずか30分でした。



また、本物のDracula Officialは「draculatheme.com」というドメインを用いてパブリッシャー認証を取得していたため、研究チームは新たなドメイン「darculatheme.com」を取得し、darculatheme.comを用いてパブリッシャー認証を取得しました。パブリッシャー認証を申請する際に必要だったのはドメインの認証だけでした。



また、拡張機能配布ページには「拡張機能のコードを管理するGitHubリポジトリへのリンク」を掲載できますが、このリポジトリ情報はマーケットプレイスに登録する「package.json」に記載したものがそのまま使われ、拡張機能とリポジトリの関連性チェックは実施されなかったとのこと。このため、研究チームは偽物のDarcula Officialの配布ページに本物のDracula Officialのリポジトリを掲載することができました。



研究チームはパブリッシャー認証の取得やリポジトリ情報の掲載などの工作を済ませた後に、偽拡張機能に「Visual Studio Codeでファイルを開くたびにホスト名やドメインなどの情報を外部サーバーに送信するコード」を挿入し、偽拡張機能をインストールしたユーザーの属性を取得できるようにしました。

そして、公開から数分後には最初の1人が偽拡張機能をダウンロード。ダウンロード回数は公開から1日を待たずにを100回を突破し、数日後には「時価総額4830億ドルの大企業のWindowsマシン」「時価総額数十億ドル規模の有名企業のマシン」「世界最大級のセキュリティ企業のマシン」「裁判所のネットワークに接続するマシン」などにもインストールされました。

偽拡張機能がインストールされた地域をまとめた図が以下。日本を含む世界中でインストールされていることが分かります。今回は研究チームが開発した無害な拡張機能でしたが、悪意あるコードが含まれる拡張機能の場合でも同様の手法で多くのマシンに導入可能なことが示されたわけです。



◆拡張機能システムの問題点

研究チームは、上記の実験結果を踏まえて、そもそもカラーテーマを変更するだけの拡張機能に多様な機能を持つコードを挿入できることが問題だと指摘しています。ChromeやFirefoxなどの拡張機能には権限管理システムが存在しており、ファイルへのアクセスなどが必要な拡張機能はインストール時にユーザーの明示的な許可を必要とします。しかし、Visual Studio Codeの拡張機能にはブラウザ拡張機能のような権限管理システムが存在しておらず、「カラーテーマを変更するだけの拡張機能」も「子プロセスを展開する拡張機能」も一様に権限チェックなど不要でインストールできてしまいます。Visual Studio Codeの拡張機能に権限管理システムを追加することを求めるIssueは2018年に発行されていますが、Microsoftは対応していません。

[Feature Request] Extension Permissions, Security Sandboxing & Update Management Proposal · Issue #52116 · microsoft/vscode · GitHub

https://github.com/microsoft/vscode/issues/52116



また、研究チームは拡張機能の自動更新がデフォルトで有効になっていることも問題だと指摘。自動更新を有効のままにしているユーザーが多いと「問題のない拡張機能を拡散し、あとから悪意あるコードを仕込む」という攻撃が容易になってしまいます。

さらに、拡張機能が厳密にはVisual Studio Codeとは別のアプリとして動作することも問題です。ブラウザ拡張機能の場合は基本的に拡張機能はブラウザのプロセス内で動作しますが、Visual Studio Codeの拡張機能は別個のアプリとして動作し、子プロセスを展開したりシステムコールを実行したり任意のNode.jsパッケージをインポートしたりとやりたい放題なのが現状です。研究チームによると、アプリごとに権限を厳しく管理している組織であっても、開発ツールであるVisual Studio Codeには高い権限を与えている場合が多いとのこと。このため、Visual Studio Codeの拡張機能も高い権限を得ることになり、悪意ある拡張機能の影響が広がりやすくなっています。



◆マーケットプレイスの問題点

Visual Studio Codeのマーケットプレイスには4万5000件のパブリッシャーが登録されており、そのうち認証済みパブリッシャーは1800件です。認証済みパブリッシャーには認証済みバッジが付与されるため、一見すると信頼できそうに見えます。しかし、認証済みパブリッシャーになるために必要な作業は「DNS認証済みのドメインをアカウントに登録する」の1点のみ。このため、ドメインさえ所得すれば誰でも認証済みパブリッシャーになれてしまいます。



拡張機能の配布ページに記される拡張機能の名前や説明文などは「package.json」に含まれており、package.jsonには「拡張機能配布ページに掲載するGitHubリポジトリのURL」も含まれています。package.jsonの内容は特にチェックされないため、ウソの情報を紛れ込ませることも可能。このため、悪意ある拡張機能の配布ページにまったく関係のないGitHubリポジトリを掲載して見かけ上の信頼性を高めることもできてしまいます。今回の検証でも偽拡張機能の配布ページから本物のリポジトリにリンクできていました。つまり、「Visual Studio Codeの拡張機能はGitHubリポジトリでコード確認できるから安心」という考えは大きな間違いというわけです。



また、今回研究チームが開発した偽拡張機能は、公開から1日以内にマーケットプレイスのトップページの「トレンド」欄に掲載されたとのこと。トレンドの抽出アルゴリズムは不明ですが、研究チームは「拡張機能をインストールするDockerコンテナ」をループ実行することでインストール回数を水増しできることも確認したとのこと。このため、悪意ある拡張機能を人為的にトレンドに登場させることも可能だと研究チームは指摘しています。



◆フォーラム開設中

本記事に関連するフォーラムをGIGAZINE公式Discordサーバーに設置しました。誰でも自由に書き込めるので、どしどしコメントしてください!Discordアカウントを持っていない場合は、アカウント作成手順解説記事を参考にアカウントを作成してみてください!

• Discord | "エデイタやブラウザの拡張機能、どうやって安全か見極めてる?" | GIGAZINE(ギガジン)

https://discord.com/channels/1037961069903216680/1250010882705063948