Name the concrete removal trigger for the openpgp exclusion - #6286
Merged
Conversation
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #6286 +/- ##
==========================================
- Coverage 73.08% 73.03% -0.05%
==========================================
Files 745 745
Lines 78804 78804
==========================================
- Hits 57597 57558 -39
- Misses 17177 17232 +55
+ Partials 4030 4014 -16 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
2 tasks
"Remove when sigstore drops the dependency" is not something anyone can check, so the entry would outlive its cause. Rekor already made the change — sigstore/rekor#2883, merged after v1.5.3 — so the trigger is a release containing it. Also record the import chain and that every govulncheck trace is package-init reachability rather than a call, which is the part that makes the exclusion defensible.
The trailing `|| true` covered the whole pipeline, so a jq parse error, an empty output file, or a missing one all produced an empty finding list — indistinguishable from a clean scan, and the gate reported success. Verified against malformed, empty, and missing output: all three passed before, all three now fail. A genuinely clean scan and a real unexcluded finding both keep their previous verdicts. Found in review of stacklok/toolhive-core#230, whose equivalent step was modelled on this one.
samuv
force-pushed
the
docs/openpgp-exclusion-trigger
branch
from
August 19, 2026 13:48
5ecb6a9 to
dff06fa
Compare
JAORMX
approved these changes
Aug 19, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
security-scan.ymlexcludesGO-2026-5932(deprecatedgolang.org/x/crypto/openpgp) with the note "Remove when sigstore drops the openpgp dependency." That is not a condition anyone can check, so the entry would outlive its cause — the usual fate of a suppression with a vague expiry.It turns out the condition is already half met, and is now nameable: rekor migrated to
ProtonMail/go-crypto/openpgpin sigstore/rekor#2883, merged 2026-07-15. That landed after v1.5.3 (2026-07-02), so it is not in any release yet. The trigger becomes "bump rekor past v1.5.3 once a release contains it", which someone can actually evaluate.While documenting it I traced where openpgp enters, which the old note left vague:
rekor/pkg/pkiis a pluggable signature-format registry, so importing it links every format, PGP included. Worth recording because it explains why this cannot be fixed locally — there is no openpgp call in ToolHive to rewrite.Also recorded: every govulncheck trace is package-init reachability (
signer.init calls sign.init, which eventually calls armor.init), not a call. The code is linked, never invoked; nothing on any ToolHive path parses PGP data. That distinction is what makes the exclusion defensible rather than merely convenient, and it was missing.Comment-only change — no behaviour, no logic.
Type of change
Test plan
YAML re-parsed after editing (
yaml.safe_load) to confirm the block comment did not break the workflow. No executable lines changed —IGNORED_VULNSis byte-identical.Special notes for reviewers
Prompted by a reviewer question on a related PR: should we use ProtonMail's gopenpgp instead of accepting the vuln? Worth recording the answer, since it will come up again:
gopenpgpwould be the wrong library anyway.ProtonMail/go-crypto/openpgpis the API-compatible fork and the official migration path (what rekor chose).ProtonMail/gopenpgp/v3is a higher-level wrapper with a different API, built on top of go-crypto.replacedirective does not work either. It would have to begolang.org/x/crypto => ProtonMail/go-crypto, which swaps the entire x/crypto module while go-crypto only carries the openpgp subtree — chacha20, ssh, and the rest vanish and the build breaks.The same justification is applied to
stacklok/toolhive-corein stacklok/toolhive-core#230, which consumes the same sigstore packages.Generated with Claude Code