使用IDE扫描Go依赖项的漏洞

本文翻译自《Vulnerability Scanning in IDE》。

点此回到《Go安全》

Go语言服务器集成的编辑器,例如装有Go扩展的VS Code,可以检测依赖项中的漏洞。

检测依赖关系中的漏洞有两种模式。两者都由Go漏洞数据库支持,并相互补充。

  • 基于导入的分析:在这种模式下,编辑器通过扫描工作区中导入的一组包来报告漏洞,并在go.mod文件中显示诊断结果。这很快,但如果你的代码导入了有漏洞的包,但并没有实际调用具有该漏洞的函数,则可能会误报。此模式可以通过“vulncheck”: “Imports”设置启用。
  • Govulncheck分析:这是基于gopls中嵌入的govulnchick命令行工具。这提供了一种低噪声、可靠的方法来确认代码是否真的调用了易受攻击的函数。由于此分析的计算成本可能很高,因此必须与基于导入的分析中的诊断报告相关的“Run govuncheck to verify”代码操作或使用go.mod文件上的“codelens.Run_govulcheck”代码操作手动触发。

切换Vulncheck (vulncheck.mp4)

这些功能在gopls v0.11.0或更新版本中可用。请在https://go.dev/s/vsc-vulncheck-feedback上分享你的反馈。

编辑器相关指导

VS Code

Go扩展提供了与gopls的集成。需要以下设置才能启用漏洞扫描功能:

"go.diagnostic.vulncheck": "Imports", // 默认启用基于导入的Govulncheck分析
"gopls": {
  "ui.codelenses": {
    "run_govulncheck": true  // 在go.mod文件里,鼠标移到依赖项上时显示"Run govulncheck"菜单选项
  }
}

Go Toggle Vulcheck”命令可用于打开和关闭当前工作空间的基于导入的分析。

Vim/NeoVim

使用coc.nvim插件时,以下设置将启用基于导入的分析。

{
    "codeLens.enable": true,
    "languageserver": {
        "go": {
            "command": "gopls",
            ...
            "initializationOptions": {
                "vulncheck": "Imports",
            }
        }
    }
}

注意事项和警告

  • 该扩展不扫描私有包,也不发送任何有关私有模块的信息。所有分析都是通过从Go漏洞数据库中提取已知有漏洞风险的模块的列表,然后在本地计算交集来完成的。
  • 基于导入的分析使用工作区(workspace)模块中的包列表,如果使用了go.work文件或replace/exclude指令,则该列表可能与你在go.mod文件中看到的不同。
  • 在修改代码或更新Go漏洞数据库后,govulcheck分析结果可能会变得过时。要手动使分析结果失效,请使用go.mod文件顶部显示的“Reset go.mod diagnostics”选项。否则,结果将在一小时后自动失效。
  • 这些功能目前不会报告标准库或工具链中的漏洞。我们仍在调查用户体验,了解在哪里显示这些发现比较合适,以及如何帮助用户处理这些问题。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注