You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复Microsoft.EntityFrameworkCore.SqlServer 6.0.3依赖的System.Drawing.Common 4.7.0漏洞

解决.NET Core 6.0.6项目中System.Drawing.Common 4.7.0安全漏洞问题(不升级至.NET 7)

问题背景

我们在Visual Studio 2022中创建了基于.NET Core 6.0.6运行时的API项目,使用Microsoft.EntityFrameworkCore.SqlServer 6.0.3 NuGet包。近期发现依赖的System.Drawing.Common 4.7.0包存在安全漏洞,通过TFS CI构建流水线进行软件的构建与发布。

需求:在不升级至.NET Core 7.0、仍使用.NET Core 6.0.6运行时的前提下,解决该安全风险(通过Blackduck合规扫描检测),并明确TFS CI构建流水线脚本需做的补丁/修改及部署操作。

补充信息:已知System.Drawing.Common的漏洞在4.7.2、4.7.3及≥5.0.3版本中已修复,但Blackduck合规扫描仍报告风险;手动向项目中添加System.Drawing.Common 4.7.3包后,确认Microsoft.EntityFrameworkCore.SqlServer 6.0.3已内部引用该版本,但Blackduck仍报安全风险。

问题分析

手动添加高版本包后仍触发扫描告警,通常是以下原因:

  1. NuGet依赖解析时,间接引用的旧版本未被完全覆盖,项目输出中仍存在4.7.0版本的dll
  2. Blackduck扫描逻辑未正确识别项目实际使用的版本,或其漏洞数据库未同步更新修复版本信息
  3. TFS构建流水线未清理缓存,导致旧版本依赖被重复使用

解决方案步骤

1. 项目配置强制指定版本

在项目的.csproj文件中添加强制版本声明,确保所有直接/间接引用都指向System.Drawing.Common 4.7.3:

<ItemGroup>
  <!-- 直接引用指定版本 -->
  <PackageReference Include="System.Drawing.Common" Version="4.7.3" />
  <!-- 强制覆盖所有间接引用的版本 -->
  <PackageReference Include="System.Drawing.Common" Version="4.7.3">
    <PrivateAssets>all</PrivateAssets>
    <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
  </PackageReference>
</ItemGroup>

如果是多项目解决方案,推荐在根目录创建Directory.Packages.props文件全局强制版本:

<Project>
  <PropertyGroup>
    <ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
  </PropertyGroup>
  <ItemGroup>
    <PackageVersion Include="System.Drawing.Common" Version="4.7.3" />
  </ItemGroup>
</Project>

2. 本地验证依赖有效性

  • 清理NuGet本地缓存:dotnet nuget locals all --clear
  • 重新还原依赖:dotnet restore
  • 检查项目的obj/project.assets.json或.lock.json文件,确认所有System.Drawing.Common的引用版本均为4.7.3,无4.7.0条目

3. TFS CI构建流水线修改

  • 添加缓存清理步骤:在dotnet restore之前执行dotnet nuget locals all --clear,避免构建代理上的旧缓存干扰
  • 强制还原依赖:将restore命令改为dotnet restore --force,确保依赖完全更新
  • 添加依赖验证步骤:在restore后添加命令dotnet list package --include-transitive | findstr System.Drawing.Common,输出依赖版本并记录到构建日志,便于排查
  • 确认.NET SDK版本:确保流水线使用的.NET SDK为6.0.x系列(兼容6.0.6运行时),避免SDK版本不匹配导致的依赖解析问题

4. Blackduck扫描适配

  • 确保扫描目标为构建后的输出目录(如bin/Release/net6.0),而非项目源码目录,保证扫描的是实际运行的dll文件
  • 若扫描仍报风险,需确认Blackduck的漏洞数据库是否已将System.Drawing.Common 4.7.3标记为CVE-2021-24112的修复版本;若未同步,可在Blackduck平台手动标记该版本为合规

补充说明

System.Drawing.Common 4.7.2、4.7.3及≥5.0.3版本已修复CVE-2021-24112漏洞,核心是确保项目构建输出中不存在4.7.0版本的dll,同时让Blackduck正确识别实际使用的安全版本。

内容的提问来源于stack exchange,提问作者RAMA KRISHNA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 12:45:36