ASP.NET Core视图组件权限提升漏洞分析与修复指南

微软安全公告3181759披露了ASP.NET Core MVC 1.0.0中视图组件可能接收错误用户信息导致权限提升的漏洞,本文详细介绍了受影响软件包、检测方法和修复步骤,帮助开发者安全更新应用程序。

微软安全公告3181759

ASP.NET Core视图组件中的漏洞可能导致权限提升

发布日期: 2016年9月13日
版本: 1.0

执行摘要

微软发布此安全公告是为了提供有关ASP.NET Core MVC 1.0.0公开版本中漏洞的信息。本公告还提供了开发人员可以采取的措施指南,以确保其应用程序得到正确更新。

微软已知ASP.NET Core MVC 1.0.0公开版本中存在安全漏洞,其中视图组件可能接收错误信息,包括当前认证用户的详细信息。如果视图组件依赖于易受攻击的代码并根据当前用户做出决策,则视图组件可能做出错误决策,导致权限提升。

缓解因素

视图组件必须使用ViewComponent类暴露的User属性,根据User属性的内容做出决策或更改输出。第三方代码也可能包含以这种方式操作的视图组件。微软鼓励所有开发人员更新其软件包,无论他们是否使用视图组件或其中的User属性,以保护自己或第三方软件将来使用这些组件。

受影响软件

如果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部分。以下提供了一个示例部分:
1
2
3
4
5
6
7
8
"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。

  1. 根据本公告"受影响软件"部分中的易受攻击软件包列表检查直接依赖。

  2. 对于存在直接依赖的每个易受攻击软件包,在编辑器中将版本号更改为1.0.1。更新所有易受攻击软件包版本后,保存project.json文件。

我们示例project.json文件中的dependencies部分现在将显示如下:

1
2
3
4
5
6
7
8
"dependencies": {
  "Microsoft.NETCore.App": {
    "version": "1.0.0",
    "type": "platform"
  },
  "Microsoft.AspNetCore.Server.Kestrel": "1.0.0",
  "Microsoft.AspNetCore.Mvc": "1.0.1",
}
  1. 如果您使用Visual Studio并保存更新后的project.json文件,新版本将由Visual Studio恢复。您可以通过打开输出窗口(Ctrl+Alt+O),然后将"显示输出来源"下拉列表更改为"包管理器"来查看恢复结果。

  2. 如果不使用Visual Studio,请打开命令行并切换到项目目录。执行dotnet restore命令以恢复新依赖。

处理完所有直接依赖后,就可以查看传递依赖了。

查看传递依赖

有两种方法可以查看传递依赖:使用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。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部分。例如:

1
2
3
4
5
6
7
8
"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文件来添加直接依赖。可以通过向dependencies部分添加引用固定版本的新行来实现。例如,要引入Microsoft.AspNet.Mvc的固定版本1.0.1,请按如下方式编辑project.json文件:

1
2
3
4
5
6
7
8
9
"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-*"
}

添加对固定软件包的直接依赖后,保存project.json文件。

如果使用Visual Studio,保存更新后的project.json文件会在Visual Studio中存储新版本。要查看恢复结果,请打开输出窗口(Ctrl+Alt+O)并将"显示输出来源"下拉列表更改为"包管理器"。

如果不使用Visual Studio,请打开命令行并切换到项目目录。执行dotnet restore命令以恢复新依赖。

您可能需要再次检查传递依赖,确保已修复所有依赖。

重新构建应用程序

最后,重新构建应用程序,照常测试,然后使用首选的部署机制重新部署。

建议操作

更新ASP.NET Core模板

“Microsoft .NET Core 1.0.1 - VS 2015 Tooling Preview 2"更新了ASP.NET Core模板以使用固定软件包。

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

其他信息

Microsoft Active Protections Program (MAPP)

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

反馈

您可以通过填写Microsoft帮助和支持表单、客户服务联系我们提供反馈。

支持

您可以在GitHub的ASP.NET Core MVC repo部分询问有关此公告的问题。

美国和加拿大的客户可以从安全支持获得技术支持。有关更多信息,请参阅Microsoft帮助和支持。

国际客户可以从当地的Microsoft子公司获得支持。有关更多信息,请参阅国际支持。

Microsoft TechNet Security提供有关Microsoft产品安全性的更多信息。

免责声明

本公告中提供的信息"按原样"提供,不作任何明示或暗示的担保。Microsoft否认所有明示或暗示的担保,包括适销性和特定用途适用性的担保。在任何情况下,Microsoft Corporation或其供应商均不对任何损害承担法律责任,包括直接、间接、偶然、后果性、商业利润损失或特殊损害,即使Microsoft Corporation或其供应商已被告知可能发生此类损害。某些州不允许排除或限制间接或偶然损害的责任,因此上述限制可能不适用。

修订版本

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

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

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计