我们每晚在 CI 服务器上运行
dotnet list <Solution>.sln package --vulnerable --include-transitive --source https://api.nuget.org/v3/index.json
,以检查我们是否依赖于任何易受攻击的软件包。
截至上周二,由于 CVE-2024-30105 和 CVE-2024-38095,此操作失败。
两个易受攻击的库(System.Text.Json 和 System.Formats.Asn1)都是运行时库,因此我们不会将它们显式引用为 Nuget 包。事实上,我们甚至根本不使用 System.Formats.Asn1(它的用法似乎是通过 Microsoft.Extensions.Configuration.Xml 传递的)
我的印象是,我们所要做的就是更新 CI 服务器上的运行时,并指示我们的客户在他们的机器上执行相同的操作。
所以我们做了前者,但我们仍然得到
Project `------------------` has the following vulnerable packages
[net8.0]:
Transitive Package Resolved Severity Advisory URL
> System.Formats.Asn1 8.0.0 High https://github.com/advisories/GHSA-447r-wph3-92pm
当
dotnet --version
给我8.0.303
时,为什么它仍然解析为8.0.0,根据8.0.7(sdk 8.0.303)的发行说明
包括对这两个漏洞的修复?
我做错了什么?我(还是:'()不了解 .NET 依赖项是什么??!
旁注,我们do使用global.json,但
rollForward
设置为latestMinor
也许这只是一个工具问题:GitHub 上可能相关的问题?
我认为您被这里的 8.0.0 与 .net SDK 版本无关这一事实所欺骗。 IE。它不应该是 8.0.303。
这是不易受攻击的 System.Formats.Asn1 包的版本号。
如果您还没有,请看这里:https://www.nuget.org/packages/System.Formats.Asn1/8.0.1
为了缓解这种情况,您可以显式添加包依赖项。我还会添加一条评论,解释它为何存在,以提醒您尽可能将其删除。
<!-- System.Formats.Asn1 is added to mitigate vulnerability. -->
<!-- Remove as soon as Microsoft.EntityFrameworkCore.SqlServer no longer depends on vulnerable version -->
<PackageReference Include="System.Formats.Asn1" Version="8.0.1" />