Golang中漏洞数据库的使用详解
作者:路多辛
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漏洞数据库内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!