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

Identity Model Extensions のトークン署名検証の脆弱性により、特権が昇格される

公開日: 2017 年 1 月 11 日

バージョン: 1.0

概要

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

マイクロソフトは、公開されたバージョンの Microsoft.IdentityModel.Tokens 5.1.0 のセキュリティの脆弱性を認識しており、これにより、対称キーで署名されたトークンが改ざんされる可能性があります。対称キーで署名されたトークンがユーザーの ID の識別に使用され、アプリがその識別されたユーザー ID に基づいた決定を行った場合、アプリが誤った判断を下し、特権が昇格される可能性があります。

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

問題を緩和する要素

トークンの署名アルゴリズムは、アプリがユーザーの識別に使用している ID プロバイダーによって指定されます。この問題の影響を受けるのは対称署名アルゴリズムのみですが、既知の公開された ID プロバイダーは対称署名アルゴリズムを使用していません。非対称署名アルゴリズムを使用して ID プロバイダーによって署名されたトークンは、キー改ざんの脆弱性はありません。

Visual Studio で使用するために出荷された ASP.NET テンプレートは、このパッケージの脆弱性のあるバージョンに対してバインドしません。

マイクロソフトは、対称キー アルゴリズムで署名されたトークンの検証に使用されているか否かにかかわらず、今後コンポーネントがそれ自体またはサードパーティのソフトウェアで使用されないように、すべての開発者にパッケージを更新することを推奨しています。

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

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


影響を受けるパッケージとバージョン
パッケージ名 パッケージのバージョン
Microsoft.IdentityModel.Tokens 5.1.0

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

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

直接的な依存関係

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

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

推移的な依存関係

推移的な依存関係は、パッケージをプロジェクトに追加することで、別のパッケージに依存が変わった時に生じます。

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

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

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

.NET Framework プロジェクトの依存関係の修正

  • オプション 1: NuGet を使用して Visual Studio プロジェクト パッケージを更新し、アプリケーションを再コンパイルして展開

    1. Visual Studio でソリューションを開きます。
    2. ソリューション エクスプローラーで、[参照設定] ノードを右クリックし、[NuGet パッケージの管理] をクリックします。
    3. [更新プログラム] タブを選択します。中央のウィンドウに、更新プログラムを含むパッケージの一覧が表示されます。
    4. Microsoft.IdentityModel.Tokens パッケージを選択し、[更新] をクリックします。
    5. アプリケーションをコンパイルして展開します。

    NuGet のダイアログを使用した NuGet パッケージの管理の詳細については、「NuGet Package Manager UI」(英語情報) を参照してください。

  • オプション 2: パッケージ マネージャー コンソール UI を使用して Visual Studio プロジェクト パッケージを更新し、アプリケーションを再コンパイルして展開

    1. Visual Studio でソリューションを開きます。
    2. [ツール] メニューをクリックし、[ライブラリ パッケージ マネージャー] を選択して、[パッケージ マネージャー コンソール] をクリックします。
    3. パッケージ マネージャー ウィンドウで、「Update-Package Microsoft.IdentityModel.Tokens」と入力します。
    4. アプリケーションをコンパイルして展開します。

    パッケージ マネージャー コンソールの使用の詳細については、「Package Manager Console」(英語情報) を参照してください。

.NET Core プロジェクトの依存関係の修正

.NET Core プロジェクトの直接的な依存関係

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

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

        "dependencies": {
          "Microsoft.IdentityModel.Tokens": "5.1.0",
        }
    

    この例では、Microsoft.IdentityModel.Tokens は直接的な依存関係です。影響を受けないこのパッケージのバージョンをダウンロードするためにバージョンを 5.1.1 に更新します。パッケージのバージョンを更新した後、project.json ファイルを保存します。この例の project.json ファイルの dependencies セクションは次のようになります。

        "dependencies": {
          "Microsoft.IdentityModel.Tokens": "5.1.1",
        }
    

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

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

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

.NET Core プロジェクトの推移的な依存関係

推移的な依存関係の確認

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

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

ソリューション エクスプローラーを使用する場合は、Visual Studio でプロジェクトを開き、Ctrl + ; キーを押して、ソリューション エクスプローラーの検索を有効にします。Microsoft.IdentityModel.Tokens というパッケージ名を検索します。検索結果が表示され、バージョンが 5.1.0 の場合、プロジェクトには、Microsoft.IdentityModel.Tokens に対する推移的な依存関係があります。

.NET Core プロジェクトの推移的な依存関係の修正

Microsoft.IdentityModel.Tokens が見つからなかった場合は、脆弱性のあるパッケージに依存している依存関係が存在しないか、直接的な依存関係を更新することによって既に問題が修正されています。


    "dependencies": {
      "VulnerablePackage": "1.0.0-*"
    }

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


    "dependencies": {
      "Microsoft.IdentityModel.Tokens": "5.1.1",
      "VulnerablePackage": "1.0.0-*"
    }

修正されたパッケージへの直接的な依存関係を追加したら、project.json ファイルを保存します。

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

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

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

アプリのリビルド

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

関連情報

Microsoft Active Protections Program (MAPP)

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

フィードバック

サポート

免責

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

更新履歴

  • V1.0 (2017/01/11): このアドバイザリを公開しました。

Page generated 2017-01-04 15:30-08:00.