使用GitHub的SBOM输出功能时,我对一些事情产生了疑问
2023年3月28日,GitHub发布了从其软件仓库中导出软件的SBOM(SPDX格式)的功能。
请参阅GitHub信息(1)和国内的@IT文章(2)以获取概要的介绍。在这里,我将写下实际使用中让人关注的事项。请注意,导出步骤如下图所示。

关于引起了注意的问题
通过使任何人都能够轻松创建软件供应链和组件清单(SBOM),降低了获取SBOM及使用它进行各种操作(如检查漏洞等)的难度,这是一件很好的事情。
然而,必须注意以下几点。
-
- SBOM导出功能需要在GitHub上登录才能使用。如果没有登录,点击”导出SBOM”会显示{“error”: “Not Found”}。由于需要GitHub账户,没有账户的人需要创建一个。
导出的SBOM只支持SPDX格式(JSON)。SPDX版本是2.3(截至2023年3月28日的最新版本)。不支持以SPDX格式(XML)或CycloneDX格式导出。如果要使用导出的SBOM进行进一步处理(如漏洞扫描或导入到自己的系统中),处理方必须支持SPDX格式(JSON)的2.3版本。
并非所有项目都能正确创建SBOM。看起来只有使用了具有依赖解决功能的系统(如Maven或npm)构建的项目才能正确导出SBOM。例如,使用Ant的项目似乎无法创建正确的SBOM。
无法确定SBOM是哪个版本(分支)。在”Code”标签页中选择了几个分支导出SBOM并比较它们的差异,但组件(名称和版本)没有任何变化。可能只能导出最新版的master分支的SBOM。因此,如果需要”最新发布版本之前的SBOM”之类的内容,可能无法通过GitHub的SBOM导出功能实现(可能只能获取源代码并使用其他工具自行创建SBOM)。
几乎没有可以处理导出的SBOM的免费漏洞扫描器。到2023年3月28日,仅有Google公开的OSV-Scanner(3)可用(※)。OWASP的Dependency Track(4)不接受SPDX格式的SBOM。收费的漏洞扫描器(即SCA工具)可以导出SBOM(当然),但可能无法导入SBOM,因此如果想将GitHub的SBOM导出到收费SCA工具中使用,需要确认该工具的支持情况。
(※)我尝试使用GitHub导出的SBOM作为OSV-Scanner 1.3.1的输入,但出现”No package sources found, –help for usage information.”的错误,无法进行漏洞扫描。OSV-Scanner支持带有包URL的CycloneDX和SPDX格式的SBOM,而此次使用的SBOM中包含了pkg:maven/…和pkg:gem/…等Package URL,所以以为可以进行扫描,但实际上不行(使用CycloneDX格式则可以扫描)。目前,使用GitHub导出的SBOM无法在免费工具中进行漏洞扫描。查看了OSV-Scanner的源代码后发现,作为OSV-Scanner输入的SPDX格式SBOM文件的文件名必须包含.spdx扩展名(虽然在README和命令帮助中没有写…)(5)。因此,我将SBOM的扩展名从.json更改为.spdx并再次运行OSV-Scanner成功进行了漏洞扫描。
kali@kali:~$ osv-scanner -S dependency-track.json
No package sources found, --help for usage information.
kali@kali:~$ mv dependency-track.json dependency-track.spdx
kali@kali:~$ osv-scanner -S dependency-track.spdx
Scanned /home/kali/dependency-track.spdx as SPDX SBOM and found 205 packages
╭─────────────────────────────────────┬───────────┬───────────────┬─────────┬───────────────────────╮ ≈
│ OSV URL (ID IN BOLD) │ ECOSYSTEM │ PACKAGE │ VERSION │ SOURCE │
├─────────────────────────────────────┼───────────┼───────────────┼─────────┼───────────────────────┤ ≈
│ https://osv.dev/GHSA-3f7h-mf4q-vrm4 │ Maven │ woodstox-core │ 6.2.8 │ dependency-track.spdx │
│ https://osv.dev/GHSA-3f7h-mf4q-vrm4 │ Maven │ woodstox-core │ 6.3.0 │ dependency-track.spdx │
│ https://osv.dev/GHSA-3f7h-mf4q-vrm4 │ Maven │ woodstox-core │ 6.3.1 │ dependency-track.spdx │
│ https://osv.dev/GHSA-wxx5-w9jc-48wx │ Maven │ pebble │ 3.1.5 │ dependency-track.spdx │
│ https://osv.dev/GHSA-g2fg-mr77-6vrm │ Maven │ libthrift │ 0.13.0 │ dependency-track.spdx │
│ https://osv.dev/GHSA-562r-vg33-8x8h │ Maven │ postgresql │ 42.3.1 │ dependency-track.spdx │
│ https://osv.dev/GHSA-673j-qm5f-xpv8 │ Maven │ postgresql │ 42.3.1 │ dependency-track.spdx │
│ https://osv.dev/GHSA-727h-hrw8-jg8q │ Maven │ postgresql │ 42.3.1 │ dependency-track.spdx │
│ https://osv.dev/GHSA-r38f-c4h4-hqq2 │ Maven │ postgresql │ 42.3.1 │ dependency-track.spdx │
│ https://osv.dev/GHSA-v7wg-cpwc-24m4 │ Maven │ postgresql │ 42.3.1 │ dependency-track.spdx │
│ https://osv.dev/GHSA-562r-vg33-8x8h │ Maven │ postgresql │ 42.3.2 │ dependency-track.spdx │
│ https://osv.dev/GHSA-673j-qm5f-xpv8 │ Maven │ postgresql │ 42.3.2 │ dependency-track.spdx │
│ https://osv.dev/GHSA-727h-hrw8-jg8q │ Maven │ postgresql │ 42.3.2 │ dependency-track.spdx │
│ https://osv.dev/GHSA-r38f-c4h4-hqq2 │ Maven │ postgresql │ 42.3.2 │ dependency-track.spdx │
│ https://osv.dev/GHSA-562r-vg33-8x8h │ Maven │ postgresql │ 42.3.3 │ dependency-track.spdx │
│ https://osv.dev/GHSA-r38f-c4h4-hqq2 │ Maven │ postgresql │ 42.3.3 │ dependency-track.spdx │
│ https://osv.dev/GHSA-562r-vg33-8x8h │ Maven │ postgresql │ 42.3.4 │ dependency-track.spdx │
│ https://osv.dev/GHSA-r38f-c4h4-hqq2 │ Maven │ postgresql │ 42.3.4 │ dependency-track.spdx │
│ https://osv.dev/GHSA-562r-vg33-8x8h │ Maven │ postgresql │ 42.3.5 │ dependency-track.spdx │
│ https://osv.dev/GHSA-r38f-c4h4-hqq2 │ Maven │ postgresql │ 42.3.5 │ dependency-track.spdx │
│ https://osv.dev/GHSA-562r-vg33-8x8h │ Maven │ postgresql │ 42.3.6 │ dependency-track.spdx │
│ https://osv.dev/GHSA-r38f-c4h4-hqq2 │ Maven │ postgresql │ 42.3.6 │ dependency-track.spdx │
│ https://osv.dev/GHSA-562r-vg33-8x8h │ Maven │ postgresql │ 42.4.0 │ dependency-track.spdx │
│ https://osv.dev/GHSA-r38f-c4h4-hqq2 │ Maven │ postgresql │ 42.4.0 │ dependency-track.spdx │
│ https://osv.dev/GHSA-562r-vg33-8x8h │ Maven │ postgresql │ 42.4.1 │ dependency-track.spdx │
│ https://osv.dev/GHSA-562r-vg33-8x8h │ Maven │ postgresql │ 42.4.2 │ dependency-track.spdx │
│ https://osv.dev/GHSA-562r-vg33-8x8h │ Maven │ postgresql │ 42.5.0 │ dependency-track.spdx │
╰─────────────────────────────────────┴───────────┴───────────────┴─────────┴───────────────────────╯ ≈
kali@kali:~$
-
- (1) Introducing self-service SBOMs (GitHub)
(2) GitHubリポジトリからSBOMを簡単に生成できる新機能をリリース、GitHub (@IT)
(3) OSV-Scanner
(4) Dependency Track
(5) osv-scanner/internal/sbom/spdx.go 内の func (s *SPDX) MatchesRecognizedFileNames(path string) のコメント …CycloneDX に対しても似たような制約があります(osv-scanner/internal/sbom/cyclonedx.go)。