Visual Studio Code における任意コード実行の問題

Microsoftの提供するテキストエディタ Visual Studio Code にはローカルに保存されている特定の名前のファイルを起動時に読み込み、その内容をコードとして実行してしまう問題があります。現在のv1.7.1では問題は解消されていますが、問題が発生することを確認したv0.8.0との間のどのバージョンで問題が修正されたのかは不明です。
Microsoftでは本件を脆弱性として取り扱っているのか不明です。

以下、IPA経由でのMicrosoftとのやり取りです。



2015-10-04 IPAへの報告

  2) 脆弱性を確認したソフトウエア等に関する情報
     名称:Visual Studio Code for Windows (https://code.visualstudio.com/)
     バージョン: v0.8.0
     パッチレベル:
     言語:
     設定情報: 

     ※ パッチレベルについては、マイナーバージョンや適用されたパッチに
        対する情報、あるいはサービスパックやホットフィックス等の情報を
        含みます。

  3) 脆弱性の種類
     起動時に任意のJavaScriptコードを読み込み実行する脆弱性

  4) 再現手順
     (1) https://code.visualstudio.com/ より Visual Studio Code for Windowsのセットアッププログラム(VSCodeSetup.exe) をダウンロード
     (2) ダウンロードしたVSCodeSetup.exeをデフォルトのまま画面の指示に従いインストールしPC(Windows 7)を再起動
     (3) C:\node_modules フォルダ内に app.js というファイルを作成。内容は以下の通り
         ----
         var app=require("app");
         app.on = function(){
           require('child_process').exec( "calc", function(){} );
         };
         ----
     (4) スタートメニューより Visual Studio Code を実行する
     (5) Visual Studio Code起動時に(3)の app.js に記載されたJavaScriptコードが実行され、結果的に電卓が起動する。

  5) 再現の状況
     ■ 常に    □ 時々    □ まれに
     補足説明(バージョンによる、言語による、などを記入)


  6) 脆弱性により発生しうる脅威
     攻撃者がapp.jsを配置可能な場合、Visual Studio Codeが実行される権限で任意のコードが実行される可能性があります。

  7) 回避策
     ローカルPC内に app.js 等のファイルが存在しないことを確認する。

2016-01-14 IPAからの返答

IPA セキュリティセンターです。

本件の製品開発者に届出内容を確認いただいたところ、本件は脆弱性で
はないとの見解を頂きました。

お手数おかけいたしますが、開発者の見解をご確認いただき、10営業日
を目処に発見者様のご意見および見解をご返信いただきたくお願いいた
します。

・開発者の見解
- -----------------------------------------------------------------
本件につきまして確認を行いましたところ、
本悪用を実行するには、ご記載いただいたように、前提として、攻撃者
がローカル上に細工した app.js ファイルを設置する必要があります。
被害者端末上でこの操作を行える状況であるということは、そもそもそ
のほかあらゆる操作が実行できることを示しており (この方法を使用し
なくとも直接悪事を働くことは可能)、前提条件に端末上の操作を行う必
要のある挙動につきましては、製品の脆弱性ではないと判断しておりま
す。

  参考文章:「セキュリティの脆弱性」の定義
  http://technet.microsoft.com/ja-jp/library/gg983510.aspx

また、その他の現実的な手法など、多角的に確認しましたが、ソーシャ
ルエンジニアリング以外で、現実的に被害者ユーザーに気づかれること
なく、端末上での操作を行うことなく実施することは難しいと考えてお
ります。
恐れ入りますが、被害者端末にログオンを行わない、あるいは、被害者
によるマルウェアインストール動作を伴わない具体的な悪用シナリオが
ございます場合、また具体的な修正案がございます場合は、お知らせい
ただけますようお願い申し上げます。

なお、app.js は Visual Studio Code のメイン機能の1つである
”Debugging”の構成ファイルの一部であり製品動作としてアプリ起動時
に読み込まれます。このため、当ファイルを読み込まない、もしくはロー
カルから削除することは前提としておりません。

以上、ご質問、ご不明点などございましたらお気軽にお知らせください
ますようお願いいたします。
- -----------------------------------------------------------------

▽ 発見者様への確認事項
上記見解および当該脆弱性に関して追加のご意見や情報等があればご教
示下さい。追加情報が無い場合もその旨をご連絡いただければ幸いです。

▽ IPA の判断および今後の対応について
弊機構としては本件は脆弱性と判断しており、開発者の見解に対して以
下の意見を送り、再考を依頼しました。しかしながら、開発者より見解
を発見者様へ情報展開いただきたいとの要望を頂きました。

・IPA から製品開発者に伝えた意見
- -----------------------------------------------------------------
・「app.js」ファイルについて
本件は当該製品のインストール時に存在しない(作成されない)場所に
「app.js」が設置されているだけで問題の影響を受けてしまいます。
IPA の検証時に再現を確認した設置場所は以下となります。

  C:\node_modules\app.js
  C:\Program Files (x86)\node_modules\app.js
  C:\Program Files (x86)\Microsoft VS Code\node_modules\app.js
  ※いずれにおいても「node_modules」ディレクトリ自体も新規に作成
    しています。

・被害者ユーザの動作について
> ソーシャルエンジニアリング以外で、現実的に被害者ユーザーに気づ
> かれることなく、端末上での操作を行うことなく実施することは難し
> いと考えております。
> 恐れ入りますが、被害者端末にログオンを行わない、あるいは、被害
> 者によるマルウェアインストール動作を伴わない具体的な悪用シナリ
> オがございます場合、また具体的な修正案がございます場合は、お知
> らせいただけますようお願い申し上げます。
本件は、被害者ユーザが何らかの不正なソフトウェアのインストール動
作をする必要はありません。
細工した「app.js」ファイルを上記の検証時に確認した設置場所に保存
しているだけで、当該製品の起動時に細工した「app.js」が読み込まれ
てしまいます。

・脆弱性の種類について
本件は、下記の脆弱性と類似の脆弱性と考えており、製品開発者様にて
対応が必要と考えております。

  任意のDLL/実行ファイル読み込みに関する脆弱性の注意喚起
  https://www.ipa.go.jp/about/press/20101111.html
- -----------------------------------------------------------------

開発者は、攻撃者がローカル上に細工した app.js ファイルを設置でき
るという前提条件は「ほかあらゆる操作が実行できる」ことを示してい
ると主張しています。この点に対して、下記の攻撃シナリオを提示し、
再度開発者に再考を依頼する予定です。

  1.攻撃者が細工した app.js ファイルをメールに添付し、被害者に送付する。
  2.被害者が添付ファイルを端末上に保存する。
  3.被害者が当該製品を起動した際にスクリプトが実行される。

以上、よろしくお願いいたします。

2016-01-14 IPAへの回答

本件、既報の任意DLLの読み込み、実行の脆弱性と類似の脆弱性であり
修正が必要であるという主張に同意です。

Windows上において、標準アカウントAが C:\node_modules\app.js を作成し、
他のアカウントBが Visual Studio Code を使用した場合、ユーザーBの権限で
Aが作成した任意のコードが実行されます。

これは、製品開発者が示す脆弱性の定義においても例えば
「特権のないユーザーに同様の変更ができるという弱点は、セキュリティの脆弱性となります。」
などに該当し、脆弱性として取り扱うことが適切であると考えられます。

以上、よろしくお願いいたします。

2016-09-28 IPA経由Microsoftからの返答

IPA セキュリティセンターです。

製品開発者より、状況の連絡がありましたので情報共有させて頂きます。

- -----------------------------------------------------------
開発者からの連絡(ここから)
- -----------------------------------------------------------
本件につきまして、度重なるご連絡を頂戴することとなり大変申し訳ございませんでした。
弊社側の過去の経緯の理解、また IPA#19553564  と IPA#00324715(Electron) の
関係性などの把握が不足しておりご返信が遅くなりましたことをお詫びいたします。

再度状況を確認しましたところ、当初 IPA#19553564 を、前提として攻撃者が
ローカルに細工したapp.jsファイルを配置する必要性から脆弱性としては扱わない判断、
また具体的な攻撃シナリオを教えていただきたい旨お伝えしておりました。
その後、1/15 にいただいた追加情報を基に再度 MSRC と確認を取った結果、
以下の理由から、本件は現行の製品バージョンにおいて、修正や変更を行うコストや
リスクと比較して影響度が現時点では低いとの判断から、セキュリティ更新プログラム
での修正は行わない判断がされております。

・C:\ や C:\Program Files (x86)\ は管理者権限が必要。攻撃者がこのフォルダーに
細工した app.js を直接配置できるということはすでに乗っ取られているかマルウェア感染
・被害者が細工された app.js をメール等で受け取り、添付ファイルを端末上の特定の
フォルダーに保存し、VS Code を起動する、というシナリオは可能性としては考えられるものの、
ユーザー操作を多く含み、また  VS を使用するレベルのユーザーが攻撃者の意図 (指示) 通りに
端末上に保存する可能性にも依存

よって、1/15の追加のシナリオにより、当初の「脆弱性としては扱わない」状況からは
変わっておりますが、修正に関しては、総合的な深刻度やユーザーへの影響度を鑑みて
セキュリティ修正を行わない、というステータスです。

現在米国 MSRC に対し、IPA#19553564  と IPA#00324715 (Electron) の関係性について説明し、
Electron側で対応がなされたこと、VS の特定のバージョン以降で、修正済みのElectronバージョンを
同梱しているなどで修正された(される) などないか、MS としてのベンダーステータスで記載できる
ことはないかなどを、再度確認を入れております。
また、発見者様が Code Blue で情報を公開される点についてもMSRCに共有しています。
本社から本件についての返答もしくは情報が入り次第、ご連絡をさせていただきますので、
少々お時間を頂戴できませんでしょうか。

この度は、情報把握に不備があり、至らずで大変申し訳ございませんでした。
- -----------------------------------------------------------
開発者からの連絡(ここまで)
- -----------------------------------------------------------

2016-10-18 IPAへの回答

---
・C:\ や C:\Program Files (x86)\ は管理者権限が必要。攻撃者がこのフォルダーに
細工した app.js を直接配置できるということはすでに乗っ取られているかマルウェア感染
・被害者が細工された app.js をメール等で受け取り、添付ファイルを端末上の特定の
フォルダーに保存し、VS Code を起動する、というシナリオは可能性としては考えられるものの、
ユーザー操作を多く含み、また  VS を使用するレベルのユーザーが攻撃者の意図 (指示) 通りに
端末上に保存する可能性にも依存
---

製品開発者の上記見解について、こちらで確認しましたところ、例えば C:\ 上に node_modules
というフォルダを新たに作成し、そこに app.js というファイルを作成するという行為において
管理者権限は必要なく、標準ユーザーで全ての作業が行えるという認識です。

Windows 7 上にて user という名前の標準ユーザーでログインし、上記作業を実際に行った際の
スクリーンショットを添付しておきます。

製品開発者に上記見解が正確かどうか、改めてご確認いただけると助かります。

以上、よろしくお願いいたします。

2016-11-04 IPA経由Microsoftからの返答

IPA セキュリティセンターです。

前回、発見者様より頂きました情報に関して、製品開発者より、返信が
ありましたので、状況共有させて頂きます。

- -----------------------------------------------------------
開発者からの連絡(ここから)
- -----------------------------------------------------------
失礼いたしました。管理者権限が必要というのは正しくありませんでした。
管理者にコントロールされている、という意図でした。
がおっしゃる通りユーザー権限でも操作は可能かと思います。
ただ、攻撃者がこのフォルダーにapp.jsを直接配置できるということはそれ以外の操作もできることを意味しているのは変わりないと思います。
- ---
以下につきましては本社から返答がありませんため、再度確認を入れてみます。
> 現在米国 MSRC に対し、JVN#19553564  と JVN#00324715 (Electron)
> の関係性について説明し、Electron側で対応がなされたこと、VS
> の特定のバージョン以降で、修正済みのElectronバージョンを同梱しているなどで修正された(される) などないか、MS
> としてのベンダーステータスで記載できることはないかなどを、再度確認を入れております。

よろしくお願いいたします。
- -----------------------------------------------------------
開発者からの連絡(ここまで)
- -----------------------------------------------------------

各メールで不要な個所はカットしてあります。

関連:JVN#00324715: Electron における Node モジュール読み込みに関する問題