Microsoft セキュリティ アドバイザリ 4010983

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

公開日: 2017 年 1 月 27 日

バージョン: 1.0

概要

Microsoft は、ASP.NET Core MVC 1.1.0 のパブリック バージョンの脆弱性に関する情報を提供するために、このセキュリティ アドバイザリをリリースしています。 またこのアドバイザリでは、アプリケーションを正しく更新する上で開発者が実行する必要のある操作に関するガイダンスも提供します。

Microsoft は、ASP.NET Core MVC 1.1.0 のパブリック バージョンのセキュリティの脆弱性を認識しています。この脆弱性により、形式が正しくない HTTP 要求によってサービス拒否が発生する可能性があります。

ASP.NET Core は、.NET Core 上で実行される、Web とクラウドのシナリオに使い慣れた最新のフレームワークを提供する次世代の ASP.NET です。 これらの製品は、Windows、Mac OS X、Linux で実行されているオープンソース開発者のコミュニティと協力して、ASP.NET チームによって積極的に開発されています。 ASP.NET Core がリリースされたとき、バージョン番号は 1.0.0 にリセットされ、その前身である ASP.NET とは別の製品であるという事実が反映されました。

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

軽減要因

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

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

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

影響を受けるパッケージとバージョン
パッケージ名 パッケージのバージョン
Microsoft.AspNetCore.Mvc.Core 1.1.0

アドバイザリに関する FAQ

システム変更の影響を受けるかどうかを確認するには  ASP.NET Core には、直接的な依存関係と推移的な依存関係の 2 種類があります。 プロジェクトが Microsoft.AspNetCore.Mvc.Core バージョン 1.1.0 に直接または推移的な依存関係を持っている場合は、影響を受けます。

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

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

  1. project.jsonは、.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 パッケージへの推移的な依存関係があります。

推移的な依存関係は、検索をサポートする Visual Studio ソリューション エクスプローラー ウィンドウで確認できます。または、プロジェクトのルート ディレクトリに含まれる project.lock.json ファイルをproject.json プロジェクト用に確認するか、csproj プロジェクトのプロジェクトの obj ディレクトリに含まれる project.assets.json ファイルを確認します。 これらのファイルは、直接依存関係と推移的依存関係の両方を含む、プロジェクトで使用されるすべてのパッケージの権限のある一覧です。

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

影響を受けるアプリ操作方法修正しますか?

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

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


    "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ファイルを保存します。

Note

Core MVC ASP.NET 修正プログラムの一環として、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 はプロジェクトの名前です。 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><packagereference include="Microsoft.AspNetCore.Mvc.Core" version="1.1.0">
</packagereference></itemgroup>
<itemgroup>
<dotnetclitoolreference include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" version="1.0.0-msbuild3-final">
</dotnetclitoolreference></itemgroup>
</project> 

この例には、2 つの PackageReference 要素からわかるように、2 つの直接パッケージ依存関係があります。 パッケージの名前は Include 属性にあり、パッケージのバージョン番号は Version 属性にあり、バージョンはパッケージ名の右側にあります。 この例では、Microsoft.AspNetCore と Microsoft.AspNetCore.Mvc.Core の 2 つのパッケージを示し、各パッケージはバージョン 1.1.0 です。

Microsoft.AspNetCore.Mvc.Core バージョン 1.1.0 の任意のインスタンスの PackageReference 要素を確認します。

参照が存在する場合は、Version 属性値を 1.1.1 に変更することで、新しいパッケージが更新されます。 脆弱なパッケージ バージョンを更新した後、csproj ファイルを保存します。

Note

Core MVC ASP.NET 修正プログラムの一環として、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><packagereference include="Microsoft.AspNetCore.Mvc.Core" version="1.1.1">
</packagereference></itemgroup>
<itemgroup>
<dotnetclitoolreference include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" version="1.0.0-msbuild3-final">
</dotnetclitoolreference></itemgroup>
</project> 

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

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

すべての直接依存関係に対処したら、推移的な依存関係も確認する必要があります。

推移的な依存関係の確認

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

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

Visual Studio 2015 を使用する場合は、Visual Studio 2015 でプロジェクトを開き、Ctrl キーを押しながらキーを押します。をクリックして、ソリューション エクスプローラーで検索をアクティブにします。 Microsoft.AspNetCore.Mvc.Core を検索し、見つけた結果のバージョン番号をメモします。

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

図 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 ファイルを公開します。 次の図 1 は、project.lock.json ファイルを表示するために展開されたproject.json ファイルを含むプロジェクトを示しています。

図 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": {
        "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 ファイルに追加して直接依存関係を追加する必要があります。 これを行うには、固定バージョンを参照して、依存関係セクションに新しい行を追加します。 たとえば、Microsoft.AspNet.Mvc.Core バージョン 1.1.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 で次の結果が表示されます。

図 3: Visual Studio 2017 での参照の検索

検索結果はツリーとして表示されます。 これらの結果から、Microsoft.AspNetCore.Mvc.Core バージョン 1.1.0 への参照が見つかったことがわかります。

[依存関係] ノードの下には NuGet ノードがあります。 NuGet ノードの下には、依存関係を直接取得したパッケージとそのバージョンの一覧が表示されます。 この例では、アプリケーションは Microsoft.AspNetCore.Mvc に直接依存します。 Microsoft.AspNetCore.Mvc には、依存関係とそのバージョンを一覧表示するリーフ ノードがあります。 この例では、Microsoft.AspNetCore.Mvc パッケージは Microsoft.AspNetCore.Mvc.Api のバージョンに依存しますエクスプローラー 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 はプロジェクトの名前です。 たとえば、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><packagereference include="Microsoft.AspNetCore.Mvc" version="1.1.0">
</packagereference><packagereference include="Microsoft.AspNetCore.StaticFiles" version="1.1.0">
</packagereference></itemgroup>
<itemgroup>
<dotnetclitoolreference include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" version="1.0.0-msbuild3-final">
</dotnetclitoolreference></itemgroup>
</project>

上記の csproj ファイルの例には、3 つの PackageReference ノードがあります。 推移的なパッケージ検索の結果は、アプリケーションが脆弱な Microsoft.AspNet.Mvc.Core バージョン 1.1.0 に依存していることを示しました。 これを修正するには、新しい直接依存関係を csproj ファイルに追加して追加する必要があります。 これを行うには、PackageReference リストの上部に新しい PackageReference を追加し、固定バージョンを参照します。 たとえば、csproj ファイルの例で Microsoft.AspNet.Mvc.Core バージョン 1.1.1 の固定バージョンをプルするには、次のように変更されます。


    <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><packagereference include="Microsoft.AspNetCore" version="1.1.0">
</packagereference><packagereference include="Microsoft.AspNetCore.Mvc" version="1.1.0">
</packagereference><packagereference include="Microsoft.AspNetCore.StaticFiles" version="1.1.0">
</packagereference></itemgroup>
<itemgroup>
<dotnetclitoolreference include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" version="1.0.0-msbuild3-final">
</dotnetclitoolreference></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 で潜在的なセキュリティの問題が見つかった場合は、詳細を電子メールで送信してください。 レポートは .NET Core バグ 報奨金の対象となる場合があります。 使用条件を含む .NET Core バグ報奨金の詳細については、https:参照してください。

Microsoft Active Protections Program (MAPP)

お客様のセキュリティ保護を強化するために、Microsoft は、毎月のセキュリティ更新プログラムのリリースの前に、主要なセキュリティ ソフトウェア プロバイダーに脆弱性情報を提供します。 セキュリティ ソフトウェア プロバイダーは、この脆弱性情報を使用して、ウイルス対策、ネットワークベースの侵入検出システム、ホストベースの侵入防止システムなどのセキュリティ ソフトウェアまたはデバイスを介して、お客様に更新された保護を提供できます。 セキュリティ ソフトウェア プロバイダーからアクティブな保護を利用できるかどうかを判断するには、Microsoft Active Protections Program (MAPP) パートナーに記載されているプログラム パートナーによって提供されるアクティブな保護 Web サイトを参照してください。

フィードバック

  • Microsoft のヘルプとサポートフォーム、カスタマー サービスのお問い合わせフォームに入力することで、 フィードバックを提供できます。

サポート

  • このアドバイザリに関する質問は、Id モデル拡張機能リポジトリGitHub で確認できます。
  • 米国およびカナダのお客様は、セキュリティ サポートからテクニカル サポート受けることができます。 詳細については、Microsoft のヘルプとサポートを参照してください
  • 海外のお客様は、現地の Microsoft 子会社からサポートを受けることができます。 詳細については、国際サポートを参照してください。
  • Microsoft TechNet Security は、Microsoft 製品のセキュリティに関する追加情報を提供します。

免責情報

このアドバイザリで提供される情報は、いかなる種類の保証もなく「現状のまま」提供されます。 Microsoft は、商品性と特定の目的に対する適合性の保証を含め、明示または黙示を問わず、すべての保証を放棄します。 Microsoft Corporation またはそのサプライヤーは、Microsoft Corporation またはそのサプライヤーがこのような損害の可能性について通知された場合でも、直接的、間接的、付随的、派生的、ビジネス上の利益の損失、または特別な損害を含む一切の損害について一切の責任を負いません。 一部の州では、派生的損害または付随的損害に対する責任の除外または制限が認められていないため、前述の制限は適用されない場合があります。

リビジョン

  • V1.0 (2017 年 1 月 27 日): アドバイザリが公開されました。

Page generated 2017-01-27 7:57Z-08:00. </https:>