track: x/crypto is in go.mod only for the update signature check, so osv-scanner ignores GO-2026-5932 #621
Labels
No labels
breaking
bug
documentation
enhancement
epic
good first issue
help wanted
refactoring
resolution/duplicate
resolution/invalid
resolution/wontfix
security
severity/critical
severity/high
severity/low
severity/medium
status/abandoned
status/blocked
status/needs-decision
status/needs-info
status/needs-verification
testing
upstream
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Blocks
#759 epic: code and supply-chain security hardening
sixfold-space/madtea
Reference
sixfold-space/madtea#621
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
What
GO-2026-5932 says the
golang.org/x/crypto/openpgppackage is unsafe by design and unmaintained. No fixed version exists, and none will: the advisory covers the package itself.madtea never builds that package.
madtea updatechecks the release signature withgithub.com/ProtonMail/go-crypto/openpgp(internal/cmd/update/verify.go), the maintained fork the advisory recommends. That library pulls in otherx/cryptopackages (sha3,hkdf,argon2,blake2b,cast5,cryptobyte). Go records dependencies per module, so all ofx/cryptosits ingo.mod, and a module-level scan flags the advisory anyway.I keep the ProtonMail library for now. The osv-scanner gate leg (#587) scans every module version, so it ignores this one advisory, and a test fails if madtea ever builds
x/crypto/openpgp.Why this issue stays open
An ignore entry is a standing exception. This issue tracks it until one of these makes it unnecessary:
x/cryptomodule changes so that madtea's version no longer matches.crypto/ed25519. That would reverse ADR 0012, so it needs its own decision and a transition period, because installed binaries only check the.ascsignature.x/crypto.Related: ADR 0012 (release signing), #413 (sigstore for release artifacts), #587 (the osv-scanner leg).
Acceptance
I checked whether this setup follows the Go way. I keep PGP for now. The answer has two parts.
1. The signature library follows the Go way.
The deprecation notice on
golang.org/x/crypto/openpgp(v0.57.0,openpgp/read.go) says:madtea does interoperate with OpenPGP.
scripts/install.shcheckschecksums.txt.ascwithgpg --verify,SECURITY.mdtells users to verify downloads by hand withgpg, and GoReleaser signs withgpg. That is the case where the Go authors point to the ProtonMail fork, and that is whatmadtea updateuses. The "focused, modern alternative" (for example Ed25519) fits only if the installer, the manual steps, and the release signing all move off OpenPGP together.2. The vulnerability scan does not follow the Go way.
govulncheck's own documentation (
golang.org/x/vulnv1.8.0,cmd/govulncheck/doc.go) says it "uses static analysis of source code or a binary's symbol table to narrow down reports to only those that could affect the application", and that "There is no support for silencing vulnerability findings" (go.dev/issue/61211). The Go vulnerability page (go.dev/security/vuln) says govulncheck "only surfaces vulnerabilities that actually affect you, based on which functions in your code are transitively calling vulnerable functions."So the Go way is to report by reachability, with no ignore list. Under it, GO-2026-5932 is not a finding for madtea: govulncheck reports nothing, because no madtea code imports
x/crypto/openpgp.The osv-scanner leg from #587 departs from that on purpose. It scans every module version, reached or not, and that found 6 real vulnerable versions govulncheck did not report. The cost is module-level false positives like this one, which need the ignore entry that Go's tool deliberately does not offer.
This issue stays open on that tension: the ignore entry exists only because the scan is stricter than the Go way.