我有一个针对.NET Standard 2.0和.NET Core 2.1.304的项目组成的解决方案。构建后,此解决方案将利用System.ServiceModel.Primitives
和System.Private.ServiceModel
(CVE-2018-0786)的旧版本。
我可能缺少有关整体解决方案或导致使用旧版本的项目之一的配置的明显信息,但我知道要检查的所有内容看起来都是正确的:
{
"sdk": {
"version": "2.1.302"
}
}
<PropertyGroup>
<TargetFramework>netcoreapp2.1</TargetFramework>
<Configurations>Debug;Dev;Qual;Release</Configurations>
<LangVersion>7.1</LangVersion>
</PropertyGroup>
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<Configurations>Debug;Dev;Qual;Release</Configurations>
</PropertyGroup>
我确保所有NuGet软件包都是最新的。那就是说我的NuGet软件包引用之一可能导致回退到旧版本吗?我应该检查哪些其他配置?
有趣的是,当我构建一个不同但配置类似的解决方案(据我所知)时,该解决方案使用较新的非脆弱版本生成了一个构建。
答案 0 :(得分:2)
您可以使用dotnet-outdated之类的工具来确定项目中依赖项的版本和可传递依赖项。
在Powershell命令行上通过protected Class<?> getReturnValueType(Object value, MethodParameter returnType) {
return (value != null ? value.getClass() : returnType.getParameterType());
}
安装
并在解决方案文件夹中运行dotnet tool install --global dotnet-outdated
,以查看100个级别的传递依赖项。
您的输出将类似于以下内容
dotnet outdated -t -td 100
然后,您可以使用上述过期的依赖项来跟踪解决方案中需要进一步调查的项目。
从那里消除已知是安全的依赖项,因为它们会出现在不依赖不良库的其他项目中(无论版本如何)。此时,可能需要使用nuget.org并调查每个可疑依赖项以查看其使用的子依赖项的版本。