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

ASP.NET Core MVC 1.1.0 の脆弱性によりサービス拒否が起こる

公開日: 2017 年 1 月 28 日

バージョン: 1.0


概要

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

マイクロソフトは、公開されたバージョンの ASP.NET Core MVC 1.1.0 で不正な形式の HTTP リクエストがサービス拒否を引き起こす可能性があるセキュリティ上の脆弱性を認識しています。

ASP.NET Core は .NET Core 上で実行され、Web およびクラウド シナリオのためのモダンで使いやすいフレームワークを提供する ASP.NET の次世代のテクノロジです。これらの製品はオープン ソース開発者のコミュニティとの協力のもと ASP.NET チームにより活発に開発されており、Windows、Mac OS X および Linux 上で動作します。ASP.NET Core がリリースされた際、その前身である ASP.NET とは別な製品であることを反映するためにバージョン番号が 1.0.0 にリセットされました。

開発者には、パッケージのバージョン 1.1.1 またはそれ以降を使用するようすべてのアプリを更新することを推奨します。

問題を緩和する要素

ASP.NET Core 1.1.0 を対象とするアプリケーションのみが影響を受けます。ASP.NET Core 1.0.0、1.0.1 または 1.0.2 を対象とするアプリケーションは影響を受けません。

影響を受けるソフトウェア

Microsoft ASP.NET Core プロジェクトが、次の表に示されている影響を受けるパッケージのバージョンを使用している場合に影響を受けます。

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

パッケージ名

パッケージのバージョン

Microsoft.AspNetCore.Mvc.Core

1.1.0

アドバイザリの「よく寄せられる質問」

影響を受けたことを確認する方法を教えてください。
ASP.NET Core には、直接的と推移的という 2 つの異なる依存関係があります。利用しているプロジェクトが Microsoft.AspNetCore.Mvc.Core のバージョン 1.1.0 と直接的または推移的な依存関係がある場合、影響を受ける可能性があります。

.NET Core プロジェクトの形式

.NET Core には、プロジェクトを作成したソフトウェアの種類によって 2 つの異なるプロジェクト ファイル形式があります。

  1. project.son が元の形式で、.NET Core 1.0 と Visual Studio 2015 に含まれています。
  2. csproj は Visual Studio 2017 で使用されている形式です。

利用しているプロジェクトの種類に合わせて、正しい更新の手順に従う必要があります。

直接的な依存関係

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

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

推移的な依存関係

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

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

どの ASP.NET Core MVC 1.1 アプリケーションも、影響を受けるパッケージに直接的または推移的に依存します。

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

両方の直接的な依存関係を修正し、推移的な依存関係の確認および修正をする必要があります。脆弱性のあるパッケージのバージョン 1.1.1 には、アプリを保護するために必要な修正プログラムが含まれています。

直接的な依存関係の修正 - project.json/VS2015

任意のエディターで project.json ファイルを開きます。dependencies セクションを探します。セクションの例を次に示します。

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

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

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

Microsoft.AspNetCore.Mvc.Core のバージョン 1.1.0 との直接的な依存関係を確認します。上記の例では、脆弱性のあるパッケージに対して直接的に依存しています。

新しいパッケージに更新するには、バージョン番号を 1.1.1 に変更します。脆弱性のあるパッケージのバージョンを更新した後、project.json ファイルを保存します。

Mt778901.note(ja-JP,Security.10).gif注意:
ASP.NET Core MVC に修正を適用する一環として、すべての Microsoft.AspNetCore.Mvc.* パッケージを更新します。たとえば、Microsoft.AspNetCore.Mvc に依存している場合、そのバージョンを 1.1.1 に更新する必要があります。そうした場合、脆弱性のある Microsoft.AspNetCore.Mvc.Core パッケージも更新されます。

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

  "dependencies": {
    "Microsoft.NETCore.App": {
      "version": "1.1.0",
      "type": "platform"
    },
    "Microsoft.AspNetCore.Server.Kestrel": "1.1.0",
    "Microsoft.AspNetCore.Mvc.Core": "1.1.1",
  }

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

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

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

直接的な依存関係の修正 - csproj/VS2017

任意のエディターで projectname.csproj ファイルを開くか、Visual Studio 2017 でプロジェクトを選択して右クリックし、コンテンツ メニューから [編集 projectname.csproj] を選択します。ここで projectname とは、利用中のプロジェクト名を指します。PackageReference ノードを探します。以下にプロジェクト ファイルの例を示します。

<Project ToolsVersion="15.0" Sdk="Microsoft.NET.Sdk.Web">
  <PropertyGroup>
    <TargetFramework>netcoreapp1.1</TargetFramework>
  </PropertyGroup>
  <PropertyGroup>
    <PackageTargetFallback>$(PackageTargetFallback);portable-net45+win8+wp8+wpa81;</PackageTargetFallback>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore" Version="1.1.0" />
    <PackageReference Include="Microsoft.AspNetCore.Mvc.Core" Version="1.1.0" />
  </ItemGroup>
  <ItemGroup>
    <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="1.0.0-msbuild3-final" />
  </ItemGroup>
</Project> 

この例では、PackageReference 要素が 2 つあることから、2 つの直接的なパッケージの依存関係があることが分かります。パッケージ名は Include 属性に含まれており、パッケージのバージョンは Version 属性でパッケージ名の右側に表示されています。この例では、Microsoft.AspNetCore および Microsoft.AspNetCore.Mvc.Core の 2 つのパッケージが示されており、それぞれのパッケージのバージョンは 1.1.0 です。

Microsoft.AspNetCore.Mvc.Core バージョン 1.1.0 が含まれていないか、PackageReference 要素を確認してください。

reference が存在する場合は、Version 属性の値を 1.1.1 とし、新しいパッケージに更新してください。脆弱性のあるパッケージを更新した後、csproj ファイルを保存します。

Mt778901.note(ja-JP,Security.10).gif注意:
ASP.NET Core MVC に修正を適用する一環として、すべての Microsoft.AspNetCore.Mvc.* パッケージを更新します。たとえば、Microsoft.AspNetCore.Mvc に依存している場合、そのバージョンを 1.1.1 に更新する必要があります。そうした場合、脆弱性のある Microsoft.AspNetCore.Mvc.Core パッケージも更新されます。

この例の csproj は次のようになります。

<Project ToolsVersion="15.0" Sdk="Microsoft.NET.Sdk.Web">
  <PropertyGroup>
    <TargetFramework>netcoreapp1.1</TargetFramework>
  </PropertyGroup>
  <PropertyGroup>
    <PackageTargetFallback>$(PackageTargetFallback);portable-net45+win8+wp8+wpa81;</PackageTargetFallback>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore" Version="1.1.0" />
    <PackageReference Include="Microsoft.AspNetCore.Mvc.Core" Version="1.1.1" />
  </ItemGroup>
  <ItemGroup>
    <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="1.0.0-msbuild3-final" />
  </ItemGroup>
</Project> 

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

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

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

推移的な依存関係の確認

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

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

ソリューション エクスプローラーを使用する場合は、Visual Studio でプロジェクトを開き、Ctrl + ; キーを押して、ソリューション エクスプローラーの検索を有効にします。Microsoft.AspNetCore.Mvc.Core を検索し、見つけた結果からバージョン番号を書き留めます。

たとえば、Microsoft.AspNetCore.Mvc を参照しているサンプル プロジェクトで Microsoft.AspNetCore.Mvc.Core を検索すると、Visual Studio 2015 では次の図に示す結果が表示されます。

Mt778901.9827B9BDFB5B91DF15829FAFEB42854E(ja-JP,Security.10).png

図 1: Visual Studio 2015 での検索

検索結果はツリー形式で表示されます。この結果には、Microsoft.AspNetCore.Mvc.Core の脆弱性のあるバージョンである 1.1.0 への参照設定が示されています。

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

project.lock.json の手動での確認 (project.json/VS2015)

任意のエディターで 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 ファイルが表示されています。

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

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

project.lock.json ファイルの中で、"Microsoft.AspNetCore.Mvc.Core/1.1.0" という文字列を検索します。project.lock.json ファイルにこの文字列が含まれている場合、脆弱性のあるパッケージに依存しています。

推移的な依存関係の修正 (project.json/VS2015)

Microsoft.AspNetCore.Mvc.Core/1.1.0 への参照が見つからなかった場合、脆弱性のあるバージョンの Microsoft.AspNetCore.Mvc.Core に依存している直接的な依存関係が存在しないか、直接的な依存関係を更新することによって既に問題が修正されています。

推移的な依存関係の確認で脆弱性のある Microsoft.AspNetCore.Mvc.Core/1.1.0 への参照が見つかった場合、更新されたパッケージへの直接的な依存関係を project.json ファイルに追加して、推移的な依存関係を上書きする必要があります。project.json ファイルを開き、dependencies セクションを探します。以下に例を示します。

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

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

  "dependencies": {
    "Microsoft.NETCore.App": {
      "version": "1.1.0",
      "type": "platform"
    },
    "Microsoft.AspNetCore.Mvc.Core": "1.1.1",
    "Microsoft.AspNetCore.Server.Kestrel": "1.1.0",
    "Microsoft.AspNetCore.Mvc.Core ": "1.1.0"
  }

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

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

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

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

ソリューション エクスプローラーを使用する場合は、Visual Studio 2017 でプロジェクトを開き、Ctrl + ; キーを押して、ソリューション エクスプローラーの検索を有効にします。Microsoft.AspNetCore.Mvc.Core を検索し、見つけた結果からバージョン番号を書き留めます。

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

Mt778901.97811781D263F93FEA81D3888A3EC4D8(ja-JP,Security.10).png

図 3: Visual Studio 2017 での検索

検索結果はツリー形式で表示されます。結果には、Microsoft.AspNetCore.Mvc.Core バージョン 1.1.0 への参照設定が示されています。

Dependencies ノードの下には NuGet ノードがあります。NuGet ノードの下には、直接的に依存しているパッケージの一覧とそのバージョンが表示されます。この例では、アプリケーションは Microsoft.AspNetCore.Mvc に直接的に依存しています。さらに、Microsoft.AspNetCore.Mvc にはリーフ ノードがあり、リーフ ノードにはその依存関係とバージョンの一覧が表示されています。この例では、 Microsoft.AspNetCore.Mvc パッケージは Microsoft.AspNetCore.Mvc.ApiExplorer のあるバージョンに依存し、さらにそれは脆弱性のあるバージョンの Microsoft.AspNetCore.Mvc.Core に依存しています。その他のパッケージも脆弱性のあるバージョンの Microsoft.AspNetCore.Mvc.Core に依存していることがわかります。

project.assets.json の手動での確認 (VS2017)

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

project.assets.json ファイルの中で、"Microsoft.AspNetCore.Mvc.Core/1.1.0" という文字列を検索します。project.assets.json ファイルにこの文字列が含まれている場合、脆弱性のあるパッケージに依存しています。

推移的な依存関係の修正 (csproj/VS2017)

Microsoft.AspNetCore.Mvc.Core/1.1.0 への参照が見つからなかった場合、脆弱性のあるバージョンの Microsoft.AspNetCore.Mvc.Core に依存している直接的な依存関係が存在しないか、直接的な依存関係を更新することによって既に問題が修正されています。

推移的な依存関係の確認で脆弱性のある Microsoft.AspNetCore.Mvc.Core/1.1.0 への参照が見つかった場合、更新されたパッケージへの直接的な依存関係を csproj ファイルに追加して、推移的な依存関係を上書きする必要があります。任意のエディターで projectname.csproj ファイルを開くか、Visual Studio 2017 でプロジェクトを選択して右クリックし、コンテンツ メニューから [編集 projectname.csproj] を選択します。ここで projectname とは、利用中のプロジェクト名を指します。PackageReference ノードを探します。

<Project ToolsVersion="15.0" Sdk="Microsoft.NET.Sdk.Web">
  <PropertyGroup>
    <TargetFramework>netcoreapp1.1</TargetFramework>
  </PropertyGroup>
  <PropertyGroup>
    <PackageTargetFallback>$(PackageTargetFallback);portable-net45+win8+wp8+wpa81;</PackageTargetFallback>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore" Version="1.1.0" />
    <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="1.1.0" />
    <PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="1.1.0" />
  </ItemGroup>
  <ItemGroup>
    <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="1.0.0-msbuild3-final" />
  </ItemGroup>
</Project>

この例の csproj ファイルでは、PackageReference ノードが 3 つあります。推移的に依存しているパッケージの検索結果から、アプリケーションが脆弱性のある Microsoft.AspNet.Mvc.Core バージョン 1.1.0 に依存していることがわかります。この例を修正するには、直接的な依存関係を csproj ファイルに追加する必要があります。そのためには、PackageReference リストの一番上に修正済みのバージョンを参照する新しい PackageReference の行を追加します。たとえば、Microsoft.AspNet.Mvc.Core の修正済みのバージョンであるバージョン 1.0.1 を参照するには、csproj ファイルを次のように編集します。

<Project ToolsVersion="15.0" Sdk="Microsoft.NET.Sdk.Web">
  <PropertyGroup>
    <TargetFramework>netcoreapp1.1</TargetFramework>
  </PropertyGroup>
  <PropertyGroup>
    <PackageTargetFallback>$(PackageTargetFallback);portable-net45+win8+wp8+wpa81;</PackageTargetFallback>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.Mvc.Core" Version="1.1.1" />
    <PackageReference Include="Microsoft.AspNetCore" Version="1.1.0" />
    <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="1.1.0" />
    <PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="1.1.0" />
  </ItemGroup>
  <ItemGroup>
    <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="1.0.0-msbuild3-final" />
  </ItemGroup>

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

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

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

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

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

サポート

  • GitHub の ASP.NET Core MVC リポ セクションでは、このアドバイザリに関する質問を投稿することができます。詳細は、https://github.com/aspnet/Mvc を参照してください。

セキュリティ問題の報告

  • .NET Core でセキュリティ上の潜在的な問題を発見した場合は、secure@microsoft.comまでご連絡ください。報告内容によっては、.NET Core に関する報奨金プログラムの対象となる場合があります。.NET Core に関する報奨金プログラムの詳細情報は、こちらを参照してください。

Microsoft Active Protections Program (MAPP)

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

フィードバック

サポート

免責

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

更新履歴

  • V1.0 (2017/01/28): このアドバイザリを公開しました。
Page generated 2017-01-26 14:09Z-08:00.
表示: