マイクロソフト セキュリティ アドバイザリ 3181759

ASP.NET Core のビュー コンポーネントの脆弱性により、特権が昇格される

公開日: 2016 年 9 月 14 日

バージョン: 1.0

概説

マイクロソフトは、公開されたバージョンの ASP.NET Core MVC 1.0.0 の脆弱性に関する情報を提供するため、このセキュリティ アドバイザリをリリースします。このアドバイザリでは、開発者がアプリケーションを確実に正しく更新するために役立つガイダンスも提供します。

マイクロソフトは、公開されたバージョンの ASP.NET Core MVC 1.0.0 でビュー コンポーネントが誤った情報 (現在の認証済みユーザーの詳細など) を受け取る可能性があるセキュリティ上の脆弱性を認識しています。ビュー コンポーネントが影響を受けるコードに依存し、現在のユーザーに基づいて決定した場合、ビュー コンポーネントは特権の昇格を引き起こす誤った決定を行う可能性があります。

問題を緩和する要素

ビュー コンポーネントは、ViewComponent クラスによって露呈したユーザー プロパティを使用し、ユーザー プロパティの内容に基づいた決定または出力を変更する必要があります。サードパーティのコードには、そのように動作するビュー コンポーネントが含まれている場合があります。マイクロソフトは、ビュー コンポーネントまたはビュー コンポーネント内のユーザー プロパティの使用有無にかかわらず、今後、この2つまたはサードパーティのソフトウェアのいずれかによる使用に備えて、すべての開発者にパッケージを更新することを推奨しています。

次の表に示されている影響を受けるパッケージ バージョンのいずれかを使用している Microsoft ASP.NET Core プロジェクトはこの脆弱性の影響を受けます。

影響を受けるパッケージとバージョン

パッケージ名

パッケージのバージョン

Microsoft.AspNetCore.Mvc

1.0.0

Microsoft.AspNetCore.Mvc.Abstractions

1.0.0

Microsoft.AspNetCore.Mvc.ApiExplorer

1.0.0

Microsoft.AspNetCore.Mvc.Core

1.0.0

Microsoft.AspNetCore.Mvc.Cors

1.0.0

Microsoft.AspNetCore.Mvc.DataAnnotations

1.0.0

Microsoft.AspNetCore.Mvc.Formatters.Json

1.0.0

Microsoft.AspNetCore.Mvc.Formatters.Xml

1.0.0

Microsoft.AspNetCore.Mvc.Localization

1.0.0

Microsoft.AspNetCore.Mvc.Razor

1.0.0

Microsoft.AspNetCore.Mvc.Razor.Host

1.0.0

Microsoft.AspNetCore.Mvc.TagHelpers

1.0.0

Microsoft.AspNetCore.Mvc.ViewFeatures

1.0.0

Microsoft.AspNetCore.Mvc.WebApiCompatShim

1.0.0

影響を受けた事を確認する方法を教えてください
ASP.NET Core には、直接的と推移的という 2 つの異なる依存関係があります。「影響を受けるソフトウェア」のセクションに記載されている影響を受けるパッケージのいずれかと直接的または推移的な依存関係がある場合、そのプロジェクトは影響を受ける可能性があります。

直接的な依存関係

直接的な依存関係は、パッケージをプロジェクトに追加した場合に生じます。たとえば、Microsoft.AspNetCore.Mvc パッケージをプロジェクトに追加すると、Microsoft.AspNetCore.Mvc との直接的な依存関係が生じます。

直接的な依存関係は、project.json ファイルを確認することで確認できます。

推移的な依存関係

推移的な依存関係は、パッケージをプロジェクトに追加することで、別のパッケージに依存が変わった時に生じます。たとえば、Microsoft.AspNetCore.Authentication パッケージをプロジェクトに追加すると、Microsoft.AspNetCore.Http (特に) に依存することになります。その結果、プロジェクトは、Microsoft.AspNetCore.Authentication に直接的に依存し、Microsoft.AspNetCore.Http パッケージに推移的に依存します。

推移的な依存関係は、Microsoft Visual Studio のソリューション エクスプローラー ウィンドウ (検索可能)、またはプロジェクトのルート ディレクトリに含まれている project.lock.json ファイルで確認できます。このファイルには、プロジェクトの正式なパッケージの一覧が含まれています。

影響を受けたアプリケーションを修正する方法を教えてください

両方の直接的な依存関係を修正し、推移的な依存関係の確認および修正をする必要があります。影響を受ける各パッケージのバージョン 1.0.1 には、アプリケーションを保護するために必要な修正が含まれています。

直接的な依存関係の修正

直接的な依存関係を修正する手順:

  1. 任意のエディターで project.json ファイルを開きます。dependencies セクションを探します。セクションの例を次に示します。
      "dependencies": { "Microsoft.NETCore.App": { "version": "1.0.0", "type": "platform" }, "Microsoft.AspNetCore.Server.Kestrel": "1.0.0", "Microsoft.AspNetCore.Mvc": "1.0.0", }
    

    この例では、Microsoft.NetCore.App、Microsoft.AspNetCore.Server.Kestrel、Microsoft.AspNetCore.Mvc の 3 つとの直接的な依存関係があります。

    Microsoft.NetCore.App は、アプリケーションに対して対象となるプラットフォームのため、無視してかまいません。それ以外のパッケージについては、パッケージ名の右側にバージョンが表示されています。この例では、プラットフォーム以外のパッケージのバージョンは 1.0.0 です。

  2. このアドバイザリの「影響を受けるソフトウェア」のセクションに記載されている影響を受けるパッケージの一覧と照合して直接的な依存関係を確認します。

    直接的な依存関係がある影響を受ける各パッケージに関して、エディターでバージョン番号を 1.0.1 に変更します。すべての影響を受けるパッケージのバージョンを更新後、project.json ファイルを保存します。

    この例の project.json ファイルの 依存関係のセクションは次のようになります。

      "dependencies": { "Microsoft.NETCore.App": { "version": "1.0.0", "type": "platform" }, "Microsoft.AspNetCore.Server.Kestrel": "1.0.0", "Microsoft.AspNetCore.Mvc": "1.0.1", }
    

    Visual Studio を使用して更新した project.json ファイルを保存すると、Visual Studio で新しいバージョンに復元されます。復元の結果を確認するには、[出力] 画面を開き (Ctrl + Alt + O キー)、ドロップダウン リストの[出力元の表示][パッケージ マネージャー] に変更します。

    Visual Studio を使用していない場合は、コマンド ラインを開き、プロジェクト ディレクトリに変更します。dotnet restore コマンドを実行して、新しい依存関係を復元します。

  3. すべての直接的な依存関係に対応後、推移的な依存関係を確認します。

推移的な依存関係の確認

推移的な依存関係を確認する方法は 2 つあります。1 つは Visual Studio のソリューション エクスプローラーを使用する方法で、もう 1 つは project.lock.json ファイルを確認する方法です。

Visual Studio のソリューション エクスプローラーの使用

ソリューション エクスプローラーを使用する場合は、Visual Studio でプロジェクトを開き、Ctrl + ; キーを押して、ソリューション エクスプローラーの検索を有効にします。このアドバイザリの「影響を受けるソフトウェア」のセクションに記載されている各パッケージ名を検索し、影響を受けるパッケージがあれば書き留めます。

たとえば、Microsoft.AspNetCore.Mvc に依存しているパッケージが含まれているサンプル プロジェクトで Microsoft.AspNetCore.Mvc を検索すると、次の図に示す結果が表示されます。

Mt764057.192BC2766CBE5378F7B3F253CE34043D(ja-JP,Security.10).png

図 1: Visual Studio での検索

 

検索結果はツリー形式で表示されます。結果には、特定された参照設定が示されています。[参照設定] 見出しの下の最初のエントリは、アプリケーションで使用している対象のフレームワークを指しています。これは、アプリケーションの構成方法に応じて、.NETCoreApp、.NETStandard、または .NET-Framework-vX.Y.Z (X.Y.Z は実際のバージョン番号です) になります。対象のフレームワークの下に、直接的に依存しているパッケージの一覧が表示されます。この例では、アプリケーションは VulnerablePackage に依存しています。さらに、VulnerablePackage にはリーフ ノードがあり、リーフ ノードにはその依存関係とバージョンの一覧が表示されます。この例では、このパッケージは Microsoft.AspNetCore.Mvc の脆弱性のあるバージョンなどに依存しています。

project.lock.json の手動での確認

任意のエディターで project.lock.json ファイルを開きます。このファイルを確認する場合は、json を認識し、ノードを展開または折りたたむことができるエディターを使用することをお勧めします。Visual Studio と Visual Studio Code はどちらもこの機能を備えています。

Visual Studio を使用している場合、project.lock.json ファイルは project.json ファイルの "下" にあります。project.json ファイルの左側にある右向きの三角形 ▷ をクリックして、ソリューション ツリーを展開すると、project.lock.json ファイルが表示されます。次の図に示されているプロジェクトでは、project.json ファイルが展開され、project.lock.json ファイルが表示されています。

Mt764057.10871F6DAB46208F3A20B4D79DC43612(ja-JP,Security.10).png

図 2: project.lock.json ファイルの場所

 

project.lock.json ファイルの中で、このアドバイザリの「影響を受けるソフトウェア」セクションに記載されている脆弱性のあるパッケージを検索します。各パッケージのパッケージ名の後に / とバージョン番号を追加します。たとえば、Microsoft.AspNetCore.Mvc バージョン 1.0.0 は、project.lock.json ファイルでは "Microsoft.AspNetCore.Mvc/1.0.0" と表されます。このアドバイザリの「影響を受けるソフトウェア」セクションに記載されている表のエントリと一致するパッケージ名が見つかったら、それを書き留めます。

推移的な依存関係の修正

これで影響を受けるパッケージの一覧が完成しました。推移的に依存しているパッケージが見つからなかった場合は、脆弱性のあるパッケージに依存している依存関係が存在しないか、直接的な依存関係を更新することによって既に問題が修正されています。

推移的な依存関係を確認して、脆弱性のあるパッケージの一覧が完成した場合は、脆弱性のある各パッケージの最新バージョンへの直接的な依存関係を project.json ファイルに追加して、推移的な依存関係を上書きする必要があります。project.json ファイルを開き、dependencies セクションを探します。以下に例を示します。

  "dependencies": { "Microsoft.NETCore.App": { "version": "1.0.0", "type": "platform" }, "Microsoft.AspNetCore.Server.Kestrel": "1.0.0", "VulnerablePackage": "1.0.0-*" }

推移的に依存しているパッケージの検索結果から、VulnerablePackage が Microsoft.AspNet.Mvc バージョン 1.0.0 に依存していることがわかります。この例を修正するには、直接的な依存関係を project.json ファイルに追加する必要があります。そのためには、修正済みのバージョンを参照する新しい行を dependencies セクションに追加します。たとえば、Microsoft.AspNet.Mvc の修正済みのバージョンであるバージョン 1.0.1 を参照するには、project.json ファイルを次のように編集します。

  "dependencies": { "Microsoft.NETCore.App": { "version": "1.0.0", "type": "platform" }, "Microsoft.AspNetCore.Mvc": "1.0.1", "Microsoft.AspNetCore.Server.Kestrel": "1.0.0", "VulnerablePackage": "1.0.0-*" }

修正済みのバージョンへの直接的な依存関係を追加したら、project.json ファイルを保存します。

Visual Studio を使用している場合は、更新した project.json ファイルを保存すると、新しいバージョンが Visual Studio に格納されます。復元結果を確認するには、[出力] ウィンドウを開き (Ctrl + Alt + O キー)、[出力元] ボックスを [パッケージ マネージャー] に変更します。

Visual Studio を使用していない場合は、コマンド ラインを開き、プロジェクト ディレクトリに変更します。dotnet restore コマンドを実行して、新しい依存関係を復元します。

推移的な依存関係を再度調べて、すべて修正されていることを確認することをお勧めします。

アプリケーションのリビルド

最後に、アプリケーションをリビルドし、通常どおり検証します。その後、任意の展開メカニズムを使用して、再度展開します。

  • ASP.NET Core テンプレートの更新

    Microsoft .NET Core 1.0.1 – VS 2015 Tooling Preview 2 は、修正されたパッケージを使用するために ASP.NET Core テンプレートを更新します。

    このプレビューをダウンロードするには、「.NET Downloads」(.NET のダウンロード) ページの「Tools」(ツール) セクションを参照してください。

Microsoft Active Protections Program (MAPP)

お客様のセキュリティ保護をより向上させるために、マイクロソフトは、月例のセキュリティ更新プログラムの公開に先立ち、脆弱性情報を主要なセキュリティ ソフトウェア プロバイダーに提供しています。セキュリティ ソフトウェア プロバイダーは、この脆弱性の情報を使用し、ウイルス対策、ネットワーク ベースの侵入検出システムまたはホスト ベースの侵入防止システムを介して、お客様に最新の保護環境を提供します。このような保護環境を提供するセキュリティ ソフトウェア ベンダーの情報については、Microsoft Active Protections Program (MAPP) パートナーに記載されている各社のアクティブ保護Web サイトを参照してください。

フィードバック

  • フィードバックをご提供いただく際は、マイクロソフトへのご意見・ご要望のフォームへ入力をお願いします。

サポート

免責

この文書に含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation およびその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。Microsoft Corporation、その関連会社およびこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含むすべての損害に対して、状況のいかんを問わず一切責任を負いません。結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。

更新履歴

  • V1.0 (2016/09/14): このアドバイザリを公開しました。

Page generated 2016-09-09 14:58-07:00.
表示: