Snyk for Go
Snyk supports testing and monitoring of Go projects that have dependencies managed by Go Modules, dep, and govendor.
After January 1, 2023, Snyk will no longer support govendor Projects. As a general security best practice, Snyk recommends using tools that are consistently maintained and up-to-date.
Because govendor was archived in GitHub, it has not been receiving bug fixes and security updates, nor has it been improved and maintained.
Once Snyk no longer supports scanning of govendor Projects, a warning will be issued and no results will be received.
Snyk recommends using Go Modules, which is considered production beginning with go1.14 but which also works well in go1.13 and go1.12.
The following describes how to use Snyk to scan your Go Projects:
Package managers / Features | CLI support | Git support | License scanning | Fix PRs |
---|---|---|---|---|
✔︎ | ✔︎ | ✔︎ | ​ | |
✔︎ | ✔︎ | ✔︎ | ​ | |
✔︎ | ✔︎ | ✔︎ | ​ |
Once Snyk builds the tree, Snyk uses the vulnerability database to find vulnerabilities in any of the modules or packages, anywhere in the dependency tree.
To scan your dependencies in the CLI, ensure you have first installed the relevant package manager and that your project contains the supported manifest files.
How Snyk analyzes and builds the tree varies depending on the language and package manager for the Project, as well as on the location of your Project.
To build the dependency tree, Snyk uses the
go list -json -deps
command.Snyk scans Go Modules projects in the CLI at the package level rather than on the module level, as Snyk has full access to your Project source code.
This is beneficial since you might use a vulnerable module but not the vulnerable package.
When you test Go Modules projects using the CLI, Snyk does not require that dependencies be installed, but you must have a
go.mod
file at the root of your Project; go list
uses this and your project source code to build a complete dependency tree.Different versions of Go generate different results for the go list -json -deps command. This can affect the dependency tree and the vulnerabilities that the Snyk CLI finds.
To build the dependency tree, Snyk analyzes your
Gopkg.lock
files.When you test dep Projects using the CLI, Snyk requires dependencies to be installed. Run
dep ensure
to achieve this.To build the dependency tree, Snyk analyzes your
vendor/vendor.json
files.When you test Govendor projects using the CLI, Snyk requires that dependencies be installed. Run
govendor sync
to achieve this.For Go Modules projects imported via Git, dependencies are resolved at the module level rather than at the package level, because Snyk does not have full access to your project source code.
This means that you may see more issues, including potential false positives, reported than for projects tested in the CLI, because Snyk reports all the vulnerabilities for each module, and not just the package(s) referenced in your source code.
To build the dependency tree Snyk runs the
go mod graph
command using the go.mod
files in the selected repository.Go Modules Projects that depend on modules from private Git repositories are supported when the private repositories are in the same Git organization as the main project repository.
Snyk supports a single private Git repository for all the Go Modules projects you have.
Imports for Projects with private modules from repos in other Git organizations will fail. Support for private module dependencies from other Git organizations is planned for the future.
Private modules are supported for GitHub, GitHub Enterprise, and Bitbucket Cloud. GitLab and Bitbucket Server are not currently supported.
To add support to existing clients created before December 30, 2020, add
go.mod
and go.sum
to your accept.json
file, as per the changes in this pull request.If you're using private Go Modules (repositories) integrated via the Broker, note that Snyk requires that each private module have a
go.mod
file defined.To build the dependency tree, Snyk analyzes the
Gopkg.lock
files in the selected repository.To build the dependency tree, Snyk analyzes the
vendor/vendor.json
files in the selected repository.Last modified 5d ago