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

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

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

报告的漏洞

漏洞在任何系统应用程序的整个开发生命周期中都得到一致的监控,并且发现问题的任何人都应该报告漏洞,以便可以跟踪漏洞的补救措施,并在公共组织中共享。方法跟踪和分类已知的漏洞常见漏洞和暴露(CVE)- - - - - -一个列表公开披露的信息安全漏洞和曝光。每个CVE包含一个CVE ID (standard identifier number)、状态指示灯、漏洞简要说明以及漏洞报告和建议的相关参考。

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.v0github.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模块漏洞的过程以及有关安全复杂性的一些细节,让我们看看如何在未来的开发中减轻这些威胁。

首先,让我们看看github / hashicorp /库Go模块。

使用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模块版本中是否存在易受攻击的依赖项。