检测,报告和减轻Go模块的漏洞

更新:自2021年5月1日起,GoCenter中央存储库已被淘汰,所有功能将被弃用。有关中心日落的更多信息,请阅读弃用博客文章

Go模块的漏洞让许多Go开发人员的生活受挫,并可以将一个简单的项目变成开发人员和他们的耐心之间的耐力之战。配合CI/CD的过程将离开对于开发人员来说,能够尽早跟踪和报告漏洞变得越来越重要。JFrog GoCenter可以提供帮助跟踪和缓解漏洞让围棋开发者的生活更轻松。

报告的漏洞

漏洞在任何系统应用程序的整个开发生命周期中都受到一致的监控,并且应该由发现问题的任何人报告,以便可以在公共组织之间跟踪和共享其补救措施。对已知的漏洞进行跟踪和分类常见漏洞及暴露(CVE)- - - - - -一个列表公开披露的信息安全漏洞和曝光。每个CVE包含一个标准标识号(CVE ID)、一个状态指示器、漏洞的简要描述以及与漏洞报告和警告相关的引用。

CVE不是一个漏洞数据库——相反,CVE的设计目的是允许漏洞数据库和其他工具链接在一起,并促进安全工具和服务之间的比较。的国家漏洞数据库NVD)是一个免费的公共数据库,使用CVE列表标识符,包括每个漏洞的修复信息、评分和其他相关信息。

必须将检测到的漏洞报告给CVE编号机构(CNA)附有详细的文件说明漏洞的影响和至少一个受其影响的代码库,然后才能将其识别为常见漏洞并分配CVE ID。CVE ID =的格式供参考CVE前缀+年份+任意数字。CVE ID的示例如下:

保护Go模块的数据复杂性

保护Go模块可能是一项棘手的任务,特别是因为Go模块和Go包之间的关系。一旦收到Go模块的安全数据,就很难将该数据与特定的模块版本关联起来。这是因为安全漏洞存在于包级别,但在模块级别报告。这可能会给人留下整个模块都很脆弱的印象,但事实往往并非如此。除非使用易受攻击的包数据,否则您的模块很可能保持安全。

让我们使用cve - 2020 - 10660举个例子。以下是版本1.3.4更新日志的摘录,详细说明了此漏洞的影响:

gopkg.in / hashicorp / vault.v0而且github.com/hashicorp/vault,都受到了影响cve - 2020 - 10660HashiCorp Vault和Vault Enterprise版本0.9.0到1.3.3。在使用这些包时,他们在某些情况下,实体的组成员资格可能会无意中包含该实体不再具有权限的组。

Vault Enterprise中还发现了另一个漏洞,即在某些情况下,现有的嵌套路径策略可能允许访问事后创建的名称空间。幸运的是,在版本1.3.4中进行了更改以修复这些漏洞。

抬头一看,里面已经修好了github.com/hashicorp/vault.该模块istio.io / istio依赖于github.com/hashicorp/vault在其go.mod文件。通常情况下,你会假设安全性istio.io / istio会被妥协,但它只是在使用github.com/hashicorp/vault/api包,因此其代码不受漏洞影响。请参阅下面的源代码。

减轻软件漏洞

现在您已经了解了Go Module漏洞的报告过程以及安全复杂性的一些细节,让我们看看如何在未来的开发中减轻这些威胁。

首先,让我们看一下github / hashicorp /库Go模块在GoCenter。

利用CVE数据,JFrog x光是否能够扫描所有依赖项go.mod并识别每个漏洞。GoCenter将此x射线数据暴露在依赖关系选项卡为您提供有关依赖项树每个级别上易受攻击组件的详细信息。Y你会在每个脆弱的模块旁边看到一个警告三角形。然后,您可以单击易受攻击的模块,并被路由到该页面。从那里,查看版本选项卡寻找该模块的安全版本,以便在您的go.mod文件。

一旦识别了所有组件和依赖项,它们的信息将与其他漏洞提要和数据库进行交叉引用,以提醒您任何潜在的威胁。基本的x光Go模块漏洞扫描在GoCenter上免费提供,所示安全选项卡

使用GoCenter确保软件安全

GoCenter是公共的GOPROXY以及拥有超过70万个Go模块版本的中央存储库。当使用GoCenter作为GOPROXY时,可以确保从正确的源代码下载的代码版本是正确的。GoCenter作为您的GOPROXY无缝工作去命令具有安全、快速、可用和存储效率高的优点。

许多Golang开发人员还可以将GoCenter的漏洞信息直接带入他们的IDE,使用免费的JFrog扩展VS Code

随着CI/CD周期越来越左移,GoCenter的安全特性可以帮助您识别正在导入的公共Go模块版本中是否存在易受攻击的依赖项。