Golang中漏洞数据库的使用详解

 更新时间:2023年09月04日 08:31:20   作者:路多辛  
govulncheck是Golang中的漏洞扫描工具,它强大功能的背后,离不开 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]

示例如下:

$ curl https://vuln.go.dev/index/db.json
{"modified":"2023-08-23T14:38:50Z"}

2.获取每个模块元数据接口 /index/modules.json[.gz]

示例如下:

$ curl https://vuln.go.dev/index/modules.json
[ {
  // The module path.
  "path": string,
  // The vulnerabilities that affect this module.
  "vulns":
    [ {
      // The vulnerability ID.
      "id": string,
      // The latest time the vulnerability should be considered
      // to have been modified, as an RFC3339-formatted UTC
      // timestamp ending in "Z".
      "modified": string,
      // (Optional) The module version (in SemVer 2.0.0 format)
      // that contains the latest fix for the vulnerability.
      // If unknown or unavailable, this should be omitted.
      "fixed": string,
    } ]
} ]

3.获取每个漏洞元数据接口 /index/vulns.json[.gz]

示例如下:

$ curl https://vuln.go.dev/index/vulns.json
[ {
     // The vulnerability ID.
     "id": string,
     // The latest time the vulnerability should be considered
     // to have been modified, as an RFC3339-formatted UTC
     // timestamp ending in "Z".
     "modified": string,
     // A list of IDs of the same vulnerability in other databases.
     "aliases": [ string ]
 } ]

4.获取某个漏洞信息接口 /ID/$id.json[.gz]

示例如下:

$ curl https://vuln.go.dev/ID/GO-2023-2003.json
{
    "schema_version": "1.3.1",
    "id": "GO-2023-2003",
    "modified": "2023-08-10T22:06:06Z",
    "published": "2023-08-10T22:06:06Z",
    "aliases": [
        "GHSA-8c37-7qx3-4c4p"
    ],
    "summary": "Blst fails to perform group signature validation",
    "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.",
    "affected": [
        {
            "package": {
                "name": "github.com/supranational/blst",
                "ecosystem": "Go"
            },
            "ranges": [
                {
                    "type": "SEMVER",
                    "events": [
                        {
                            "introduced": "0.3.0"
                        },
                        {
                            "fixed": "0.3.11"
                        }
                    ]
                }
            ],
            "ecosystem_specific": {
                "imports": [
                    {
                        "path": "github.com/supranational/blst/bindings/go",
                        "symbols": [
                            "P1Affine.SigValidate",
                            "P2Affine.SigValidate"
                        ]
                    }
                ]
            }
        }
    ],
    "references": [
        {
            "type": "FIX",
            "url": "https://github.com/supranational/blst/commit/fb91221c91c82f65bfc7f243256308977a06d48b"
        },
        {
            "type": "WEB",
            "url": "https://github.com/supranational/blst/releases/tag/v0.3.11"
        }
    ],
    "credits": [
        {
            "name": "Yunjong Jeong (@blukat29)"
        }
    ],
    "database_specific": {
        "url": "https://pkg.go.dev/vuln/GO-2023-2003"
    }
}

govulncheck 使用漏洞数据库方法

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

到此这篇关于Golang中漏洞数据库的使用详解的文章就介绍到这了,更多相关Go漏洞数据库内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Go 分布式链路追踪实现原理解析

    Go 分布式链路追踪实现原理解析

    分布式链路追踪作为解决分布式应用可观测问题的重要技术,愈发成为分布式应用不可缺少的基础设施,本文将详细介绍分布式链路的核心概念、架构原理和相关开源标准协议,并分享我们在实现无侵入 Go 采集 Sdk 方面的一些实践,需要的朋友可以参考下
    2022-06-06
  • 关于go-micro与其它gRPC框架之间的通信问题及解决方法

    关于go-micro与其它gRPC框架之间的通信问题及解决方法

    在之前的文章中分别介绍了使用gRPC官方插件和go-micro插件开发gRPC应用程序的方式,都能正常走通。不过当两者混合使用的时候,互相访问就成了问题,下面通过本文给大家讲解下go-micro与gRPC框架通信问题,一起看看吧
    2022-04-04
  • Go语言接口定义与用法示例

    Go语言接口定义与用法示例

    这篇文章主要介绍了Go语言接口定义与用法,较为详细的分析了Go语言中接口的概念、定义、用法,需要的朋友可以参考下
    2016-07-07
  • Golang中interface{}转为数组的操作

    Golang中interface{}转为数组的操作

    这篇文章主要介绍了Golang中interface{}转为数组的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • Go语言中new()和 make()的区别详解

    Go语言中new()和 make()的区别详解

    这篇文章主要介绍了Go语言中new()和 make()的区别详解,本文讲解了new 的主要特性、make 的主要特性,并对它们的区别做了总结,需要的朋友可以参考下
    2014-10-10
  • Go语言题解LeetCode268丢失的数字示例详解

    Go语言题解LeetCode268丢失的数字示例详解

    这篇文章主要为大家介绍了Go语言题解LeetCode268丢失的数字示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • Go中strings的常用方法详解

    Go中strings的常用方法详解

    这篇文章主要介绍了Go中strings的常用方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • Go语言处理超大字符串型整数加减经典面试详解

    Go语言处理超大字符串型整数加减经典面试详解

    这篇文章主要为大家介绍了Go语言处理超大字符串型整数加减经典面试示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10
  • 使用golang实现在屏幕上打印进度条的操作

    使用golang实现在屏幕上打印进度条的操作

    这篇文章主要介绍了使用golang实现在屏幕上打印进度条的操作,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • Go语言解决大模型API调用中的超时错误的方法

    Go语言解决大模型API调用中的超时错误的方法

    在开发基于大语言模型(如DeepSeek)的智能应用时,我们常通过API实现自然语言交互,但在处理复杂任务或网络波动时,开发者可能会遭遇 context deadline exceeded错误,本文将以Go语言为例,深入分析该问题的根源,并提供一套完整的优化方案,需要的朋友可以参考下
    2025-05-05

最新评论