支持匹配 Go 假版本
作者: picatz创建于 2025年3月26日更新于 2026年9月15日
标签backlog
Hello! 我们发现 go.mod 文件使用 伪版本 时会出现反复出现的假阳性问题。 ##### 额外上下文 这似乎在 https://GitHub.com/google/osv-scanner/issues/491 和 https://GitHub.com/google/osv-scanner/issues/910 中已经提出过,但似乎没有得到解决。 此外,看起来 Dependabot 也并不真正支持这一点: https://GitHub.com/dependabot/dependabot-core/issues/2028 ##### 问题 Go 伪版本 给漏洞管理工作流带来了挑战。 这些版本会给工程师在分类结果时带来混淆,导致由于假阳性而产生的效率低下,以及对漏洞数据的潜在误解。 ##### 示例 GHSA-5jp2-vwrj-99rf 在 GitHub.com/concourse/[email protected] 中被报告:
╭─────────────────────────────────────┬──────┬───────────┬────────────────────────────────┬─────────────────────────────────────┬────────╮
│ OSV URL │ CVSS │ ECOSYSTEM │ PACKAGE │ VERSION │ SOURCE │
├─────────────────────────────────────┼──────┼───────────┼────────────────────────────────┼─────────────────────────────────────┼────────┤
│ https://osv.dev/GHSA-5jp2-vwrj-99rf │ 5.4 │ Go │ GitHub.com/concourse/concourse │ 1.6.1-0.20230608160752-b14acb611a79 │ go.mod │
╰─────────────────────────────────────┴──────┴───────────┴────────────────────────────────┴─────────────────────────────────────┴────────╯
``` 但是,伪版本**技术上高于**已修补版本中的版本:
<img width="936" alt="Image" src="https://GitHub.com/user-attachments/assets/8cf21c31-bd80-4e73-9c79-4f4e484409d9" />
> [!IMPORTANT]
> 伪版本(`v1.6.1-0.20230608160752-b14acb611a79`) **不**对应于同一语义版本范围中的标签,这使得事情变得更加混乱。
> https://GitHub.com/concourse/concourse/releases/tag/v1.6.1 这 404,没有东西; `v2.0.0` 在 `v1.6.0` 之后发布。
> <img width="643" alt="Image" src="https://GitHub.com/user-attachments/assets/a950640b-2f07-4682-837f-636572d3ac83" /> 它是 go 工具链使用的提交(使用 `go` 工具链): https://GitHub.com/concourse/concourse/commit/b14acb611a79
> 它映射到此版本: https://GitHub.com/concourse/concourse/releases/tag/v7.10.0
> 可以使用 `git` 验证:
```console
$ git clone https://GitHub.com/concourse/concourse.git
$ cd concourse
$ git describe --contains b14acb611a79
v7.10.0~11[!NOTE] 我们可以使用
golang.org/x/mod/module.IsPseudoVersion来识别伪版本,以避免将这些版本发送到 OSV API,作为中间环节。
内容来源: google/osv-scanner