Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

cmd/go: go mod verify should check hashes in go.sum against GOSUMDB. #47752

jayconrod opened this issue Aug 17, 2021 · 1 comment

cmd/go: go mod verify should check hashes in go.sum against GOSUMDB. #47752

jayconrod opened this issue Aug 17, 2021 · 1 comment


Copy link

@jayconrod jayconrod commented Aug 17, 2021

What version of Go are you using (go version)?

$ go version

Does this issue reproduce with the latest release?


What did you do?

  1. Tag a version of a module, say
  2. Set GOPROXY=direct, GOSUMDB=off, then go get in another module. This downloads the version into the cache without notifying or and adds a sum to go.sum.
  3. Change something and update the version tag to point to the new change.
  4. Clear GOPROXY and GOSUMDB.
  5. Run go mod verify, observing no security error.
  6. Clean the module cache with go clean -modcache.
  7. Run go list all or any other command that would download the modified version, observing a security error. is an example repo. was modified, is the dependent module.

What did you expect to see?

The first go mod verify command should report a security error. For each module in the build list not matched by GOPRIVATE or GONOSUMDB (that is, each publicly available module), go mod verify should check the hash of the downloaded module and the hash in go.sum against the checksum database in GOSUMDB, assuming it is not disabled.

In this scenario, that hash won't be in the checksum database, and the lookup should cause to fetch from its origin and return the sum for the modified version. go mod verify would then report a security error because that sum will not match the original sum in the dependent module's go.sum. go mod verify should also report a security error if returns any error response (most commonly, 404 or 410) or is not available.

This is important for identifying when both go.sum and the contents of the module cache don't match a publicly available version. People in this situation will see their builds work fine, but builds for other developers and CI builds will fail. go mod verify only checks that go.sum matches the contents of the module cache. It will only consult the checksum database if it needs to download something that's not cached.

What did you see instead?

go mod verify reports no security error in step 5.

Copy link

@gopherbot gopherbot commented Aug 26, 2021

Change mentions this issue: cmd/go/internal/modcmd: check hashes in go.sum against GOSUMDB

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
None yet
Linked pull requests

Successfully merging a pull request may close this issue.

None yet
2 participants