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

.NET 7 Web API依赖库识别与SBOM生成问题及DTrack适配诉求

.NET 7应用SBOM生成与Dependency Track误报问题

我使用Dependency Track(DTrack)检测应用安全风险,需要为应用生成SBOM,但过程中遇到了一系列问题,具体场景如下:

场景示例

  1. 创建空白.NET 7 WebAPI应用:
    dotnet new webapi -o TodoApi
    
  2. 添加NuGet包MongoDB.Driver.Core,该包引入了隐式依赖System.Memory - V4.5.5

第一次SBOM生成问题

使用syft或sbom-tool生成的SBOM包含如下System.Memory条目:

<component bom-ref="pkg:nuget/System.Memory@4.5.5?package-id=0f5664b7f3521e96" type="library">
      <name>System.Memory</name>
      <version>4.5.5</version>
      <cpe>cpe:2.3:a:System.Memory:System.Memory:4.5.5:*:*:*:*:*:*:*</cpe>
      <purl>pkg:nuget/System.Memory@4.5.5</purl>
      <properties>
        <property name="syft:package:foundBy">dotnet-deps-cataloger</property>
        <property name="syft:package:language">dotnet</property>
        <property name="syft:package:metadataType">DotnetDepsMetadata</property>
        <property name="syft:package:type">dotnet</property>
        <property name="syft:location:0:layerID">sha256:650b301b26d84cbba0f7c215211bc5ec3c4bb429d93362505698d99a8c2f9d1e</property>
        <property name="syft:location:0:path">/app/ToDoApi.deps.json</property>
      </properties>
    </component>

实际情况是,这个System.Memory 4.5.5并没有被包含在构建或发布的应用产物中,应用真正使用的是.NET 7框架自带的System.Memory.dll(发布独立应用时会被复制到输出文件夹)。但DTrack会针对这个未被使用的依赖发出安全警告,且生成的SBOM中完全没有列出任何框架DLL,而这些框架DLL明明是WebAPI的核心组成部分。

使用新目录器后的问题

syft新增了dotnet-portable-executable-cataloger目录器,配置后可以生成包含所有框架DLL的SBOM,其中System.Memory的条目如下:

<component bom-ref="pkg:nuget/System.Memory@7.0.1023.36312?package-id=58ade9d797b85bfa" type="library">
      <name>System.Memory</name>
      <version>7.0.1023.36312</version>
      <cpe>cpe:2.3:a:System.Memory:System.Memory:7.0.1023.36312:*:*:*:*:*:*:*</cpe>
      <purl>pkg:nuget/System.Memory@7.0.1023.36312</purl>
      <properties>
        <property name="syft:package:foundBy">dotnet-portable-executable-cataloger</property>
        <property name="syft:package:metadataType">DotnetPortableExecutableMetadata</property>
        <property name="syft:package:type">dotnet</property>
        <property name="syft:location:0:layerID">sha256:c7a4596c3ec7605d9c1a841ff4f0ab3b599cca6d7bc04347e2e6037448cd0ec2</property>
        <property name="syft:location:0:path">/usr/share/dotnet/shared/Microsoft.NETCore.App/7.0.10/System.Memory.dll</property>
      </properties>
    </component>

这个版本号和DLL的文件版本一致,但该版本在NuGet包管理器中并不存在。更离谱的是,DTrack居然提示我将7.0.10版本升级到最新的4.5.5版本。

疑问与需求

疑问

  • 为什么SBOM生成工具会添加版本错误的库到SBOM中?
  • 版本差异如此巨大,应用为何还能正常运行?
  • 为什么存在与.NET框架库同名但版本完全不同的NuGet包?

需求

我需要让DTrack能够准确检测到应用实际使用的所有库(包括框架DLL)的安全问题,同时自动排除那些未被实际使用的依赖。希望能得到上述疑问的解答。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 11:39:50