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 包含保护应用程序所需的修补程序。
修复直接依赖项
若要修复直接依赖项,需要:
在编辑器中打开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。
根据此公告的 “受影响的软件 ”部分中的易受攻击包列表查看直接依赖项。
对于存在直接依赖项的每个易受攻击包,请将编辑器中的版本号更改为 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 命令以还原新依赖项。
解决所有直接依赖项后,即可查看可传递依赖项。
查看可传递依赖项
可通过两种方法查看可传递依赖项:使用 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 帮助和支持表单、 客户服务联系我们来提供反馈。
支持
- 可以在 ASP.NET Core MVC 存储库部分的 GitHub 上提出有关此公告的问题。
- 美国和加拿大的客户可以从安全支持部门获得技术支持。 有关详细信息,请参阅 Microsoft 帮助和支持。
- 国际客户可以从其本地 Microsoft 子公司获得支持。 有关详细信息,请参阅国际性支持。
- Microsoft TechNet 安全性 提供有关 Microsoft 产品安全性的其他信息。
免责声明
此公告中提供的信息“按原样”提供,没有任何担保。 Microsoft 不明确或暗示所有保证,包括适销性和针对特定用途的适用性和适用性的保证。 在任何情况下,Microsoft Corporation 或其供应商都应对任何损害负责,包括直接、间接、附带、后果性、业务利润损失或特殊损害,即使 Microsoft Corporation 或其供应商被告知存在此类损害的可能性。 某些州不允许排除或限制后果性或附带性损害的责任,因此上述限制可能不适用。
修订
- V1.0(2016 年 9 月 13 日):已发布公告。
页面生成的 2016-09-09 14:58-07:00。