支持匹配 Go 假版本

作者: picatz创建于 2025年3月26日更新于 2026年9月15日
标签backlog

Hello! 我们发现 go.mod 文件使用 伪版本 时会出现反复出现的假阳性问题。 ##### 额外上下文 这似乎在 https://GitHub.com/google/osv-scanner/issues/491https://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] 中被报告:

bash
╭─────────────────────────────────────┬──────┬───────────┬────────────────────────────────┬─────────────────────────────────────┬────────╮
│ 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