审核安全漏洞的包依赖项
安全性审核简介
NuGet 等包管理器的安全审核是一个过程,涉及分析软件项目中所包含包的安全性。 具体包括识别漏洞、评估风险,并提出建议以提高安全性。 审核可以包括对包本身、任何依赖项及其关联风险的审查。 审核的目标是识别和减少攻击者可能利用的任何安全漏洞,例如代码注入或跨站点脚本攻击。
项目类型 | NuGet | .NET SDK | Visual Studio |
---|---|---|---|
PackageReference | 6.8 | .NET 8 SDK (8.0.100) | Visual Studio 2022 17.8 |
packages.config | 6.10 | 空值 | Visual Studio 2022 17.10 |
使用 restore
运行安全审核
restore
命令会在执行常见包操作时自动运行,如首次加载项目、添加新包、更新包版本或删除收藏 IDE 中项目的包。
根据 GitHub Advisory Database 中的已知漏洞报告检查依赖项的说明。
重要
若要审核检查包,必须使用提供漏洞数据库的包源。 NuGet.org 的 V3 URL 就是这样的示例 (https://api.nuget.org/v3/index.json),但请注意,不提供 NuGet.org 的 V2 终结点。
- 在命令行中,导航到项目或解决方案目录。
- 使用首选工具(例如 dotnet、MSBuild、NuGet.exe、VisualStudio 等)运行
restore
。 - 查看警告并解决已知的安全漏洞。
更新后发现的安全漏洞
如果发现安全漏洞并且更新可用于包,则可以:
- 使用包含安全修补程序的较新版本编辑
.csproj
或其他包版本位置 (Directory.Packages.props
)。 - 使用 Visual Studio 中的 NuGet 包管理器用户界面更新单个包。
- 使用相应的包 ID 运行
dotnet add package
命令以更新到最新版本。
发现安全漏洞但未更新
如果包中存在已知漏洞且没有安全修补程序,可以执行以下操作。
- 检查顾问报告中概述的任何缓解因素。
- 如果包标记为已弃用或放弃,请使用建议的包。
- 如果包为开放源代码,请考虑提供修补程序。
- 在包的问题跟踪器中打开问题。
检查缓解因素
查看安全顾问,了解可能允许你继续使用包含漏洞的包的任何缓解因素。 仅当在特定框架、操作系统或调用特殊函数上使用代码时,该漏洞才存在。
使用建议的包
如果针对正在使用的包报告了安全公告,并且包被标记为已弃用或似乎被放弃,请考虑使用包作者声明的任何建议备用包,或者包含维护的类似功能的包。
参与修复
如果安全公告不存在修补程序,建议对包的开放源代码存储库拉取请求中的漏洞进行更改,或者通过 NuGet.org 包详细信息页上 Contact owners
的部分联系作者。
打开问题
如果不想修复漏洞或无法更新或替换包,请在包的问题跟踪器或首选联系人方法中打开问题。
在 NuGet.org 上,你可以导航到包详细信息页,然后单击 Report package
,这将引导你与作者取得联系。
未找到安全漏洞
如果未发现任何安全漏洞,这意味着在检查的当前时刻,包图中找不到具有已知漏洞的包。
由于随时可以更新咨询数据库,因此我们建议定期检查 dotnet restore
输出并确保在持续集成过程中相同。
配置 NuGet 审核
审核可以通过 .csproj
中的 MSBuild 属性进行配置,也可以通过作为项目一部分评估的 MSBuild 文件进行配置。
建议在存储库级别配置审核。
MSBuild 属性 | 默认 | 可能值 | 备注 |
---|---|---|---|
NuGetAuditMode | 直通 | direct 和 all |
如果要审核顶级依赖项和可转移依赖项,则可以将值设置为 all 。 NuGetAuditMode 不适用于 packages.config 项目 |
NuGetAuditLevel | low | low 、moderate 、high 和 critical |
如果想要查看 moderate 、high 和 critical 公告,请将值设置为 moderate |
NuGetAudit | 是 | true 和 false |
如果不希望收到安全审核报告,则可以通过将值设置为 false 来完全退出体验 |
排除公告
可以选择通过为每个公告添加一个新的 NuGetAuditSuppress
MSBuild 项,在审核报告中排除特定的公告。
定义一个 NuGetAuditSuppress
项,其中的 Include=
元数据设定为希望抑制的公告 URL。
<ItemGroup>
<NuGetAuditSuppress Include="https://github.com/advisories/XXXX" />
</ItemGroup>
与其他 NuGet 审核配置属性类似,NuGetAuditSuppress
项可以在项目或仓库级别定义。
自 NuGet 6.11、Visual Studio 17.11 和 .NET 8.0.400 SDK 起,PackageReference 项目可以使用 NuGetAuditSuppress
。
目前暂时不能供 packages.config 项目使用。
此外,可以选择根据警告的严重性取消警告。
你可以使用 <NoWarn>
禁止 NU1901
-NU1904
警告或使用 <NuGetAuditLevel>
功能来确保审核报告对工作流有用。
警告代码
警告代码 | 原因 |
---|---|
NU1900 | 与包源通信时出错,同时获取漏洞信息。 |
NU1901 | 检测到低严重性的包 |
NU1902 | 检测到中严重性的包 |
NU1903 | 检测到高严重性的包 |
NU1904 | 检测到严重严重性的包 |
可以自定义生成,将这些警告视为错误,将警告视为错误,或将警告视为错误。
例如,如果已用于 <TreatWarningsAsErrors>
将所有(C#、NuGet、MSBuild 等)警告视为错误,则可以用于 <WarningsNotAsErrors>NU1901;NU1902;NU1903;NU1904</WarningsNotAsErrors>
防止将来发现的漏洞破坏生成。
或者,如果要将低漏洞和中等漏洞保留为警告,但将高漏洞和严重漏洞视为错误,并且未使用 TreatWarningsAsErrors
,则可以使用 <WarningsAsErrors>NU1903;NU1904</WarningsAsErrors>
。
注意
packages.config 项目不支持消息严重性的 MSBuild 属性(如 NoWarn
和 TreatWarningsAsErrors
)。
总结
安全审核功能对于维护软件项目的安全性和完整性至关重要。 这些功能提供针对安全漏洞的附加保护层,并确保你可以放心地使用开放源代码包。
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈