.NET Core与ASP.NET Core安全漏洞修复指南

微软发布安全通告4021279,详细披露.NET Core和ASP.NET Core中的多个安全漏洞,包括权限提升、拒绝服务等风险,并提供完整的修复方案和依赖项更新指南。

.NET Core与ASP.NET Core安全漏洞修复指南

发布日期: 2017年5月9日
更新日期: 2017年5月10日
版本: 1.1

执行摘要

微软发布此安全通告,旨在提供有关公开版.NET Core和ASP.NET Core中存在的漏洞信息。本通告还指导开发人员如何正确更新其应用程序。

.NET Core和ASP.NET Core是新一代.NET框架,为Web和云场景提供熟悉且现代化的框架。这些产品由.NET和ASP.NET团队与开源开发人员社区合作积极开发,可在Windows、Mac OS X和Linux上运行。

问题CVE及描述

CVE 描述
CVE-2017-0247 拒绝服务
CVE-2017-0248 安全功能绕过
CVE-2017-0249 权限提升
CVE-2017-0256 欺骗

受影响软件

如果Microsoft .NET Core项目使用以下受影响软件包版本,则会受到这些漏洞的影响。

受影响软件包及版本

软件包名称 受影响版本 修复版本
System.Text.Encodings.Web 4.0.0 - 4.3.0 4.0.1 - 4.3.1
System.Net.Http 4.1.1 - 4.3.1 4.1.2 - 4.3.2
System.Net.Http.WinHttpHandler 4.0.1 - 4.3.0 4.0.2 - 4.3.1
System.Net.Security 4.0.0 - 4.3.0 4.0.1 - 4.3.1
System.Net.WebSockets.Client 4.0.0 - 4.3.0 4.0.1 - 4.3.1
Microsoft.AspNetCore.Mvc* 1.0.0-1.0.3, 1.1.0-1.1.2 1.0.4, 1.1.3

*包括所有Microsoft.AspNetCore.Mvc相关软件包

咨询常见问题

如何知道我是否受到影响?

.NET Core和ASP.NET Core有两种类型的依赖项:直接依赖和传递依赖。如果您的项目对前面列出的任何软件包和版本有直接或传递依赖,则会受到影响。

注意: 作为修补ASP.NET Core MVC的一部分,我们会更新每个Microsoft.AspNetCore.Mvc.*软件包。

.NET Core项目格式

.NET Core有两种不同的项目文件格式,具体取决于创建项目的软件:

  • project.json:原始格式,包含在.NET Core 1.0和Microsoft Visual Studio 2015中
  • csproj:Microsoft Visual Studio 2017中使用的格式

您必须确保为项目类型遵循正确的更新说明。

依赖类型

直接依赖

直接依赖是您专门添加到项目中的依赖项。例如,如果您将Microsoft.AspNetCore.Mvc软件包添加到项目中,则您就对Microsoft.AspNetCore.Mvc具有直接依赖。

可通过查看project.json或csproj文件来发现直接依赖。

传递依赖

当您向项目中添加一个软件包,而该软件包又依赖于另一个软件包时,就会发生传递依赖。例如,如果您将Microsoft.AspNetCore.Mvc软件包添加到项目中,它依赖于Microsoft.AspNetCore.Mvc.Core软件包(以及其他软件包)。您的项目对Microsoft.AspNetCore.Mvc具有直接依赖,对Microsoft.AspNetCore.Mvc.Core软件包具有传递依赖。

如何修复受影响的应用程序?

您需要修复直接依赖,并检查和修复任何传递依赖。

修复直接依赖 - project.json/VS2015

  1. 在编辑器中打开project.json文件
  2. 查找dependencies部分
  3. 审查直接依赖中是否存在前面列出的软件包和版本
  4. 将版本号更改为适用于您版本的相应软件包
  5. 保存project.json文件
  6. 执行dotnet restore命令恢复新依赖

修复直接依赖 - csproj/VS2017

  1. 在编辑器中打开projectname.csproj文件
  2. 查找PackageReference节点
  3. 审查PackageReference元素中是否存在前面列出的软件包和版本
  4. 将版本号更改为适用于您版本的相应软件包
  5. 保存csproj文件
  6. 执行dotnet restore命令恢复新依赖
  7. 重新编译应用程序

审查传递依赖

使用Visual Studio解决方案资源管理器(VS2015/VS2017)

  • 在Visual Studio中打开项目
  • 按Ctrl+;激活解决方案资源管理器中的搜索
  • 搜索每个易受攻击的软件包名称并记录找到的任何结果的版本号

手动审查project.lock.json (project.json/VS2015)

在编辑器中打开project.lock.json文件,搜索易受攻击软件包的字符串。

手动审查project.assets.json (VS2017)

从项目的obj目录中打开project.assets.json文件,搜索易受攻击软件包的字符串。

修复传递依赖

如果传递依赖审查发现对任何易受攻击软件包的引用,必须向项目添加更新软件包的直接依赖以覆盖传递依赖。

project.json/VS2015

在project.json文件的dependencies部分添加对固定版本的新引用。

csproj/VS2017

在csproj文件中添加新的PackageReference节点,引用固定版本。

重新构建应用程序

最后重新构建应用程序,照常测试,并使用您喜欢的部署机制重新部署。

其他信息

报告安全问题

如果您在.NET Core中发现潜在的安全问题,请将详细信息通过电子邮件发送至secure@microsoft.com。报告可能有资格获得.NET Core错误赏金。

反馈和支持

您可以在GitHub上的.NET Core或ASP.NET Core组织中询问有关此问题的问题。美国和加拿大的客户可以从安全支持获得技术支持。

致谢

微软感谢以下人员与我们一起帮助保护客户:

  • Sidertia Solutions的David Fernandez报告ASP.NET Core拒绝服务漏洞(CVE-2017-0247)
  • Mikhail Shcherbakov报告ASP.NET Core欺骗漏洞(CVE-2017-0256)

修订历史

  • V1.0(2017年5月9日):咨询发布
  • V1.1(2017年5月10日):修订咨询以包含问题CVE及其描述表
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计