.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
- 在编辑器中打开project.json文件
- 查找dependencies部分
- 审查直接依赖中是否存在前面列出的软件包和版本
- 将版本号更改为适用于您版本的相应软件包
- 保存project.json文件
- 执行
dotnet restore命令恢复新依赖
修复直接依赖 - csproj/VS2017
- 在编辑器中打开projectname.csproj文件
- 查找PackageReference节点
- 审查PackageReference元素中是否存在前面列出的软件包和版本
- 将版本号更改为适用于您版本的相应软件包
- 保存csproj文件
- 执行
dotnet restore命令恢复新依赖 - 重新编译应用程序
审查传递依赖
使用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及其描述表