微软安全公告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版本都包含保护应用程序所需修复。
修复直接依赖
要修复直接依赖:
- 在编辑器中打开project.json文件。查找dependencies部分。以下提供了一个示例部分:
|
|
在此示例中,有三个直接依赖:Microsoft.NetCore.App、Microsoft.AspNetCore.Server.Kestrel和Microsoft.AspNetCore.Mvc。
Microsoft.NetCore.App是应用程序目标平台,可以忽略。其他软件包在软件包名称右侧显示其版本。在此示例中,非平台软件包的版本为1.0.0。
-
根据本公告"受影响软件"部分中的易受攻击软件包列表检查直接依赖。
-
对于存在直接依赖的每个易受攻击软件包,在编辑器中将版本号更改为1.0.1。更新所有易受攻击软件包版本后,保存project.json文件。
我们示例project.json文件中的dependencies部分现在将显示如下:
|
|
-
如果您使用Visual Studio并保存更新后的project.json文件,新版本将由Visual Studio恢复。您可以通过打开输出窗口(Ctrl+Alt+O),然后将"显示输出来源"下拉列表更改为"包管理器"来查看恢复结果。
-
如果不使用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部分。例如:
|
|
传递软件包搜索的结果显示VulnerablePackage依赖于Microsoft.AspNet.Mvc版本1.0.0。要修复此示例,必须通过将其添加到project.json文件来添加直接依赖。可以通过向dependencies部分添加引用固定版本的新行来实现。例如,要引入Microsoft.AspNet.Mvc的固定版本1.0.1,请按如下方式编辑project.json文件:
|
|
添加对固定软件包的直接依赖后,保存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。