安全很重要,但实际工作中,大家不知不觉会忘记它。我希望通过这篇文章,用上我介绍的工具,你能对安全问题更重视,也更好的规避库的安全漏洞。

vscode自动规范代码插件(GoModule有漏洞免费的Go漏洞扫描VSCode插件)(1)

作为一个 Go 开发人员,安全问题一样得重视。如果你使用 VSCode,推荐给你一个免费的插件,它能够方便的将有风险的 Go Module 及时告诉你。

这个插件就是 JFrog,在 VSCode 中搜索安装。它能将当前项目使用的公开依赖的实时漏洞信息从 JFrog GoCenter[1] 的元数据中直接引入到源代码编辑器中。这意味着你在首次构建之前就能看到开源 Go 模块的潜在风险,并做出更好的选择。

背景

VSCode 已成为许多 Go 开发人员的首选源代码编辑器,包括 JFrog 的一些开发人员。它是为 JFrog Xray 客户提供的针对流行 IDE[2] 的几种 JFrog 集成之一,使开发人员更容易理解开源依赖的风险,并有助于保持对安全的警惕。

为了帮助实现使软件开发和交付更快、更安全和更可靠的使命,JFrog 将 VSCode 扩展提高到了一个新水平。通过利用 GoCenter 中可用的 Go 模块漏洞数据,即使没有 Xray 许可实例,VSCode 用户也可以从中受益。

使用

安装扩展程序后,有两种方式查看项目中的漏洞。

方式一

安装了 JFrog 扩展后,在 VSCode 编辑器左侧会出现一个按钮:

vscode自动规范代码插件(GoModule有漏洞免费的Go漏洞扫描VSCode插件)(2)

点击它,会看到如下的界面:

vscode自动规范代码插件(GoModule有漏洞免费的Go漏洞扫描VSCode插件)(3)

在左侧看到了一些问题:有叹号,中等级别的漏洞。

咦?echo 框架竟然有漏洞?于是点开它左侧的 > :

vscode自动规范代码插件(GoModule有漏洞免费的Go漏洞扫描VSCode插件)(4)

原来是 golang.org/x/text 包有漏洞。但具体什么问题不清楚。同时我们发现该包最新的版本是 v0.3.4。

方式二

将鼠标悬停在 go.mod 文件中的模块上时,即可在 VSCode 中查看所有这些信息。

vscode自动规范代码插件(GoModule有漏洞免费的Go漏洞扫描VSCode插件)(5)

同时依赖底部的黄色波浪线也表明有问题。

你可以从 go.mod 中的模块直接跳至树状视图(鼠标停留在某个依赖,左侧会出现一个黄色小灯泡),并支持从树中跳转至 go.mod 中的模块定义。图中红框部分就是做这种跳转。

vscode自动规范代码插件(GoModule有漏洞免费的Go漏洞扫描VSCode插件)(6)

点击小灯泡,出来的菜单还可以直接跳转到 GoCenter 网站。关于 GoCenter 的一些相关信息,以后再介绍。这里简单提一句,在 GoCenter 网站,点击 “Security” 标签下查看有关该模块的更多信息。

vscode自动规范代码插件(GoModule有漏洞免费的Go漏洞扫描VSCode插件)(7)

也可以看到 golang.org/x/text 有漏洞。

查看具体漏洞信息

但怎么看到具体漏洞信息呢?通过 GoCenter,找到有问题的包,比如这里是上面的 golang.org/x/text 包,对应 0.3.0 或 0.3.2 都行。在 Security 标签下,可以看到漏洞描述:

vscode自动规范代码插件(GoModule有漏洞免费的Go漏洞扫描VSCode插件)(8)

这个漏洞大意是:在 0.3.3 版本之前,x/text 包在编码/解码方面存在漏洞,可能导致 UTF-16 解码器进入无限循环,导致程序崩溃或内存耗尽。如果调用解码器上的 String 函数,或者解码器传递到 golang.org/x/text/transform.String,攻击者可以为使用 UseBOM 或 ExpectBOM 实例化的 UTF16 解码器提供单个字节来触发无限循环。

切换到 0.3.3 发现确实没有漏洞了。因此我们项目中应该升级该库的版本。

小问题

这里有一个小问题。比如上面提到的 https://github.com/polaris1119/go-echo-example 项目,golang.org/x/text 库在这个项目中被很多库依赖,而且不同库依赖的版本还不一样,而且有些库的最新版本依赖的 golang.org/x/text 还是 0.3.2,比如 locales 库的 go.mod https://github.com/go-playground/locales/blob/v0.13.0/go.mod,依赖的还是 0.3.2。所以即使更新了相关的库,VSCode 上 JFrog 插件还是提示有漏洞。但实际上已经没有问题了,你可以试试删除掉 golang.org/x/text v0.3.3 以下的版本(在 $GOPATH/pkg/mod 下面),然后编译项目,是否能成功过。

总结

希望本文能够让你重视项目安全问题,重视 go module 的安全。

此外,Jfrog 的 VSCode 扩展还可以使用在其他语言项目中。例如 Maven,Gradle,npm,NuGet,RubyGems 和 PHP Composer 等。

参考资料

[1]

JFrog GoCenter: https://search.gocenter.io/

[2]

流行 IDE: https://www.jfrog.com/confluence/display/JFROG/IDE Integration

vscode自动规范代码插件(GoModule有漏洞免费的Go漏洞扫描VSCode插件)(9)

,