• Golang 程序漏洞检测利器 govulncheck(二):漏洞数据库详解


    上一篇文章详细介绍了 Golang 程序漏洞扫描工具 govulncheck 的使用方法,govulncheck 强大功能的背后,离不开 Go 漏洞数据库(Go vulnerability database)的支持,接下来详细讲解下 Go 漏洞数据库相关的知识。

    Go 漏洞数据库(Go vulnerability database)是什么?

    在当今数字化的世界中,软件安全是至关重要的。随着 Golang 在开发领域的日益流行,Go 项目的安全性也越来越重要。为了帮助开发者及时发现和解决与 Golang 相关的安全漏洞,Go 漏洞数据库应运而生。

    Go 漏洞数据库(Go vulnerability database),访问地址是 https://vuln.go.dev 或者 https://pkg.go.dev/vuln,是一个存储 Golang 安全漏洞信息的数据库,由 Golang 官方维护。漏洞信息数据来自现有的源,例如 cve、ghsa 和 Go 包维护者直接提交的漏洞报告等,这些信息随后由 Go 安全团队审核并添加到数据库中。

    该数据库支持多数据源访问,提供访问漏洞数据源的接口和默认实现。漏洞项使用 OSV(Open Source Vulnerability format)格式存储和传输。开发人员可以基于 module 的路径或者 ID 从漏洞数据库中查找是否存在已知漏洞。

    Go 漏洞数据库 API

    Go 漏洞数据库提供基于 HTTP 协议,请求方式为 GET 的一系列接口,每个接口都是返回 JSON 类型的数据。

    1. 获取数据库元数据接口 /index/db.json[.gz]

    示例如下:

    1. $ curl https://vuln.go.dev/index/db.json
    2. {"modified":"2023-08-23T14:38:50Z"}
    1. 获取每个模块元数据接口 /index/modules.json[.gz]

    示例如下:

    1. $ curl https://vuln.go.dev/index/modules.json
    2. [ {
    3. // The module path.
    4. "path": string,
    5. // The vulnerabilities that affect this module.
    6. "vulns":
    7. [ {
    8. // The vulnerability ID.
    9. "id": string,
    10. // The latest time the vulnerability should be considered
    11. // to have been modified, as an RFC3339-formatted UTC
    12. // timestamp ending in "Z".
    13. "modified": string,
    14. // (Optional) The module version (in SemVer 2.0.0 format)
    15. // that contains the latest fix for the vulnerability.
    16. // If unknown or unavailable, this should be omitted.
    17. "fixed": string,
    18. } ]
    19. } ]
    1. 获取每个漏洞元数据接口 /index/vulns.json[.gz]

    示例如下:

    1. $ curl https://vuln.go.dev/index/vulns.json
    2. [ {
    3. // The vulnerability ID.
    4. "id": string,
    5. // The latest time the vulnerability should be considered
    6. // to have been modified, as an RFC3339-formatted UTC
    7. // timestamp ending in "Z".
    8. "modified": string,
    9. // A list of IDs of the same vulnerability in other databases.
    10. "aliases": [ string ]
    11. } ]
    1. 获取某个漏洞信息接口 /ID/$id.json[.gz]

    示例如下:

    1. $ curl https://vuln.go.dev/ID/GO-2023-2003.json
    2. {
    3. "schema_version": "1.3.1",
    4. "id": "GO-2023-2003",
    5. "modified": "2023-08-10T22:06:06Z",
    6. "published": "2023-08-10T22:06:06Z",
    7. "aliases": [
    8. "GHSA-8c37-7qx3-4c4p"
    9. ],
    10. "summary": "Blst fails to perform group signature validation",
    11. "details": "When complemented with a check for infinity, blst skips performing a signature group-check. Formally speaking, infinity is the identity element of the elliptic curve group and as such it is a member of the group, so the group-check should be performed. The fix performs the check even in the presence of infinity.",
    12. "affected": [
    13. {
    14. "package": {
    15. "name": "github.com/supranational/blst",
    16. "ecosystem": "Go"
    17. },
    18. "ranges": [
    19. {
    20. "type": "SEMVER",
    21. "events": [
    22. {
    23. "introduced": "0.3.0"
    24. },
    25. {
    26. "fixed": "0.3.11"
    27. }
    28. ]
    29. }
    30. ],
    31. "ecosystem_specific": {
    32. "imports": [
    33. {
    34. "path": "github.com/supranational/blst/bindings/go",
    35. "symbols": [
    36. "P1Affine.SigValidate",
    37. "P2Affine.SigValidate"
    38. ]
    39. }
    40. ]
    41. }
    42. }
    43. ],
    44. "references": [
    45. {
    46. "type": "FIX",
    47. "url": "https://github.com/supranational/blst/commit/fb91221c91c82f65bfc7f243256308977a06d48b"
    48. },
    49. {
    50. "type": "WEB",
    51. "url": "https://github.com/supranational/blst/releases/tag/v0.3.11"
    52. }
    53. ],
    54. "credits": [
    55. {
    56. "name": "Yunjong Jeong (@blukat29)"
    57. }
    58. ],
    59. "database_specific": {
    60. "url": "https://pkg.go.dev/vuln/GO-2023-2003"
    61. }
    62. }

    govulncheck 使用漏洞数据库方法

    govulncheck 使用的漏洞数据地址是 https://vuln.go.dev,可以使用 -db 参数指定漏洞数据库,支持 http://、https:// 和 file:// 协议。指定的漏洞数据库必须实现上面讲解的几个 API。govulncheck 命令在从 http 源读取时使用 “.json.gz” 端点,而从文件源读取时,使用 “json”端点。

  • 相关阅读:
    2712. 使所有字符相等的最小成本
    Apache Maven系列【2】依赖的scope范围总结和将jar包安装到maven仓库
    Oracle "脑残" CBO 优化案例
    Part16:Pandas的分层索引MultiIndex怎么用?【详解】
    k8s(Kubernetes)集群部署--使用 kubeadm方式部署
    【面试题】说说JS中的this指向问题
    IO流低级流
    深度学习到智能小车(1)深度学习框架
    Deep Learning for Monocular Depth Estimation: A Review.基于深度学习的深度估计
    【深度学习】 Python 和 NumPy 系列教程(廿六):Matplotlib详解:3、多子图和布局:subplots()函数
  • 原文地址:https://blog.csdn.net/luduoyuan/article/details/132653076