Microsoft 安全咨询3214296

标识模型扩展令牌签名验证中的漏洞可能导致特权提升

发布时间: 2017 年 1 月 10 日

版本: 1.0

执行摘要

Microsoft 正在发布此安全公告,提供有关标识模型扩展 5.1.0 公共版本中的漏洞的信息。 此公告还提供了有关开发人员可以执行的操作的指导,以帮助确保其应用正确更新。

Microsoft 知道 Microsoft.IdentityModel.Tokens 5.1.0 的公共版本中存在安全漏洞,其中使用对称密钥签名的令牌可能容易受到篡改。 如果使用对称密钥签名的令牌用于验证用户的标识,并且应用根据该用户的已验证标识做出决策,则应用可能会做出导致特权提升的错误决策。

建议开发人员更新所有应用以使用程序包版本 5.1.1 或更高版本。

缓解因素

令牌的签名算法是由应用用来对用户进行身份验证的标识提供者指定的。 只有对称签名算法容易受到此问题的侵害,并且没有已知的公共标识提供者使用对称签名算法。 使用非对称签名算法由标识提供者签名的令牌不容易受到密钥篡改。

ASP.NET 在 Visual Studio 中提供的模板不会绑定到此包的易受攻击版本。

Microsoft 鼓励所有开发人员更新其包,无论它们是否用于验证使用对称密钥算法签名的令牌,以防止将来自行或第三方软件使用组件。

受影响的软件

如果 Microsoft.IdentityModel.Tokens 版本 5.1.0 使用包,Microsoft .NET Core 或 .NET Framework 项目将受到漏洞的影响。

受影响的包和版本
包名称 包版本
Microsoft.IdentityModel.Tokens 5.1.0

咨询常见问题解答

如何实现知道我是否受到影响?
.NET 具有两种不同类型的依赖项:直接和可传递。 如果 .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 包”。

  • 选项 2:使用程序包管理器控制台 UI 更新 Visual Studio 项目包、重新编译应用程序并部署

    1. 在 Visual Studio 中打开解决方案。
    2. 单击“工具”菜单,选择“库程序包管理器”,然后单击“程序包管理器控制台”。
    3. 在包管理器窗口中,输入 Update-Package Microsoft.IdentityModel.Tokens
    4. 编译和部署应用程序。

    有关使用 程序包管理器 控制台的详细信息,请参阅“使用程序包管理器控制台”。

修复 .NET Core 项目依赖项

.NET Core 项目直接依赖项

若要修复直接依赖项,需要:

  1. 在编辑器中打开project.json文件。 查找依赖项部分。 下面提供了一个示例部分:

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

    在此示例中,Microsoft.IdentityModel.Tokens 是直接依赖项。 将其版本更新为 5.1.1,以下载不受影响此包的版本。 更新包版本后,保存project.json文件。 示例project.json文件中的依赖项部分现在如下所示:

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

    如果使用 Visual Studio 并保存更新project.json文件,Visual Studio 将还原新版本。 可以通过打开“输出”窗口(Ctrl+Alt+O),然后将“显示输出”从下拉列表更改为程序包管理器查看还原结果。

    如果未使用 Visual Studio,请打开命令行并更改为项目目录。 执行 dotnet restore 命令以还原新依赖项。

  2. 解决所有直接依赖项后,即可查看可传递依赖项。

.NET Core 项目可传递依赖项

查看可传递依赖项

可通过两种方法查看可传递依赖项:使用 Visual Studio 解决方案资源管理器或查看project.lock.json文件。

使用 Visual Studio 解决方案资源管理器

如果要使用解决方案资源管理器,请在 Visual Studio 中打开项目,然后按 Ctrl+;以激活解决方案资源管理器中的搜索。 搜索包名称 Microsoft.IdentityModel.Tokens。 如果找到结果并且版本为 5.1.0,则项目对 Microsoft.IdentityModel.Tokens 采用可传递依赖项。

修复 .NET Core 项目可传递依赖项

如果找不到 Microsoft.IdentityModel.Tokens,则任何依赖项都取决于易受攻击的包,或者你已通过更新直接依赖项来修复此问题。

如果你的可传递依赖项评审显示你使用了易受攻击的包,则必须将每个易受攻击包的更新版本直接依赖项添加到project.json文件中,以替代可传递依赖项。 打开project.json文件,找到依赖项部分。 例如:


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

可传递包搜索的结果显示应用使用的包取决于 Microsoft.IdentityModel.Tokens 版本 5.1.0。 若要修复此示例,必须通过将其添加到project.json文件来添加直接依赖项。 为此,可以向引用固定版本的依赖项部分添加新行。 编辑project.json文件,如下所示:


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

将直接依赖项添加到固定包后,保存项目。 json 文件。

如果使用 Visual Studio,则保存更新project.json文件会将新版本存储在 Visual Studio 中。 若要查看还原结果,请打开“输出”窗口(Ctrl+Alt+O),并将“显示输出”从下拉列表更改为程序包管理器

如果未使用 Visual Studio,请打开命令行并更改为项目目录。 执行 dotnet restore 命令以还原新依赖项。

可能需要再次为可传递依赖项检查,以确保已修复所有这些依赖项。

重新生成应用

最后,重新生成应用,像平时一样对其进行测试,然后使用你喜欢的部署机制重新部署它。

其他信息

Microsoft Active Protections 计划 (MAPP)

为了改善客户的安全保护,Microsoft 在每月安全更新发布之前向主要安全软件提供商提供漏洞信息。 然后,安全软件提供商可以使用此漏洞信息通过其安全软件或设备(如防病毒、基于网络的入侵检测系统或基于主机的入侵防护系统)为客户提供更新的保护。 若要确定安全软件提供商是否提供主动保护,请访问计划合作伙伴提供的活动保护网站,这些网站在 Microsoft Active Protections 计划 (MAPP) 合作伙伴列出。

反馈

支持

免责声明

此公告中提供的信息“按原样”提供,没有任何担保。 Microsoft 不明确或暗示所有保证,包括适销性和针对特定用途的适用性和适用性的保证。 在任何情况下,Microsoft Corporation 或其供应商都应对任何损害负责,包括直接、间接、附带、后果性、业务利润损失或特殊损害,即使 Microsoft Corporation 或其供应商被告知存在此类损害的可能性。 某些州不允许排除或限制后果性或附带性损害的责任,因此上述限制可能不适用。

修订

  • V1.0(2017 年 1 月 10 日):已发布公告。

页面生成的 2017-01-04 15:30-08:00。