Microsoft 安全咨询3181759

ASP.NET 核心视图组件中的漏洞可能允许提升权限

发布时间: 2016 年 9 月 13 日

版本: 1.0

执行摘要

Microsoft 正在发布此安全公告,提供有关 ASP.NET Core MVC 1.0.0 公共版本中漏洞的信息。 此公告还提供了有关开发人员可以执行的操作的指导,以帮助确保其应用程序正确更新。

Microsoft 知道 ASP.NET Core MVC 1.0.0 的公共版本中存在安全漏洞,其中 视图组件 可能会收到不正确的信息,包括当前经过身份验证的用户的详细信息。 如果视图组件依赖于易受攻击的代码并根据当前用户做出决策,则视图组件可能会做出导致特权提升的错误决策。

缓解因素

视图组件必须使用 ViewComponent 类公开的用户属性来根据 User 属性的内容做出决策或更改输出。 第三方代码还可以包括以这种方式运行的视图组件。 Microsoft 鼓励所有开发人员更新其包,无论他们使用的是视图组件还是用户属性,都防止将来自己或第三方软件使用这些组件。

受影响的软件

如果 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 有两种不同类型的依赖项:直接和可传递。 如果项目对“受影响的软件部分中列出的任何受影响的包具有直接或可传递依赖项,则它可能会受到影响。

直接依赖项

将包专门添加到项目时,会发生直接依赖项 。 例如,如果将 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": {
          "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。

    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. 解决所有直接依赖项后,即可查看可传递依赖项。

查看可传递依赖项

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

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

如果要使用解决方案资源管理器,请在 Visual Studio 中打开项目,然后按 Ctrl+;以激活解决方案资源管理器中的搜索。 在此公告的 “受影响的软件 ”部分中搜索每个包名称,并记下找到的任何易受攻击的包。

例如,在包含依赖 Microsoft.AspNetCore.Mvc 的包的示例项目中搜索 Microsoft.AspNetCore.Mvc,下图显示了以下结果。

图 1:在 Visual Studio 中搜索

搜索结果显示为树。 在结果中,可以看到标识的引用。 引用标题下的第一个条目是指应用程序正在使用的目标框架。 这是 。NETCoreApp, .NETStandard 或 .NET-Framework-vX.Y.Z(其中 X.Y.Z 是实际版本号),具体取决于应用程序配置方式。 在目标框架下,显示直接依赖的包列表。 在此示例中,应用程序依赖于 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文件的项目。

图 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": {
     "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文件来添加直接依赖项。 为此,可以向引用固定版本的依赖项部分添加新行。 例如,若要拉取 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-*"
    }

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

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

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

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

重新生成应用程序

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

建议的操作

  • 更新 ASP.NET 核心模板
    “Microsoft .NET Core 1.0.1 - VS 2015 工具预览版 2”更新了 ASP.NET Core 模板以使用固定包。

    若要下载此预览版,请参阅 .NET 下载页的“工具”部分。

其他信息

Microsoft Active Protections 计划 (MAPP)

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

反馈

支持

免责声明

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

修订

  • V1.0(2016 年 9 月 13 日):已发布公告。

页面生成的 2016-09-09 14:58-07:00。