fix(deps): close all 8 OSV advisories flagged by Scorecard (Vulnerabilities 8 → 10) - #372
Merged
Conversation
…lities 8 → 10) Go (osv-scanner matches go.mod at module level, no reachability): - klauspost/compress 1.18.4 → 1.18.7 (GO-2026-5841, s2 OOB read) - google.golang.org/grpc 1.81.1 → 1.82.1 (GO-2026-6061 / GHSA-hrxh-6v49-42gf) - golang.org/x/crypto 0.53.0 → 0.54.0 (hygiene, see below) Python docs build chain (docs/requirements.in floors + pip-compile --upgrade): - click 8.1.8 → 8.4.2 (PYSEC-2026-2132 / CVE-2026-7246) - pymdown-extensions 10.21.3 → 11.0.1 (GHSA-9xwg-3r6f-jcx2 / CVE-2026-61632) - setuptools 82.0.1 → 83.0.0 (PYSEC-2026-3447 / CVE-2026-59890) - soupsieve 2.8.3 → 2.9.1 (PYSEC-2026-3071, PYSEC-2026-3072) GO-2026-5932 (x/crypto/openpgp is unmaintained) carries introduced=0 with no fix event, so no bump can ever close it. Nothing in the build graph imports x/crypto/openpgp or its subpackages — OpenPGP work goes through ProtonMail/go-crypto/openpgp, the maintained fork the advisory itself recommends. Declared not_affected (vulnerable_code_not_present) in vex/openvex.json and mirrored into osv-scanner.toml, which is the only channel Scorecard reads. Re-triaged the pre-existing suppressions: GO-2022-0635 / GO-2022-0646 (aws-sdk-go v1 s3crypto) dropped out of go.mod via module pruning after the Pulumi upgrades, so osv-scanner reported both as unused ignores — removed from osv-scanner.toml, VEX statements flipped to status: fixed. Also in scope: tools.go deps pre-baked so CI's build-setup 'go get tools' is a no-op before 'go generate'; /vex/ and /osv-scanner.toml named in CODEOWNERS; DEPENDENCIES.md documents the mirror and the per-pass re-triage requirement. Verification: - osv-scanner scan source -r . → No issues found (was 8) - govulncheck -mode=source ./... → 0 reachable vulnerabilities - docs build in the pinned python:3.12-slim digest → OK - go build ./... + pkg/api/secrets + pkg/security tests → pass Signed-off-by: Dmitrii Creed <creeed22@gmail.com>
Cre-eD
requested review from
Laboratory,
smecsia and
universe-ops
as code owners
August 2, 2026 19:56
Semgrep Scan ResultsRepository:
Scanned at 2026-08-02 19:56 UTC |
Security Scan ResultsRepository:
Scanned at 2026-08-02 19:57 UTC |
📊 Statement coverageMeasured on the documented included set (see
Baseline: |
smecsia
approved these changes
Aug 3, 2026
universe-ops
approved these changes
Aug 3, 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
OpenSSF Scorecard's Vulnerabilities check is at 8/10 with 8 open advisories. This PR takes it to 10/10.
GO-2026-5932hasintroduced: 0and no fix event in OSV. Declarednot_affectedwith reachability evidence.GO-2022-0635/GO-2022-0646no longer apply; removed rather than carried forward.osv-scanner scan source -r .→ No issues found (was 8). Scorecard runs the same scanner (osvscanner.DoScanviaclients/osv.go) against the repo root, so the check flips on merge tomain.Fixed
github.com/klauspost/compresss2go.mod(indirect)google.golang.org/grpcgo.mod(indirect)clickdocs/requirements.txtpymdown-extensionsb64path traversaldocs/requirements.txtsetuptoolsdocs/requirements.txtsoupsievedocs/requirements.txtsoupsievedocs/requirements.txtSide-effect bumps pulled in by the above:
x/crypto0.53.0 → 0.54.0,x/sys0.46.0 → 0.47.0,x/term0.44.0 → 0.45.0,opentelemetry-operations-go/detectors/gcp1.31.0 → 1.32.0,contrib/detectors/gcp1.42.0 → 1.43.0, plus thetools.gochain (see CI ordering below).How the Python side was done
docs/requirements.ingains explicit patched floors for the four packages, following the pattern already established forrequests/urllib3after #264 — pinning the floor in the.infile is what stops a futurepip-compilefrom silently resolving back to a vulnerable version.docs/requirements.txtwas then regenerated withpip-compile --allow-unsafe --generate-hashes --upgrade.mkdocs-material9.7.7 declarespymdown-extensions>=10.2with no upper bound, so the 11.x major is in range for the theme — no theme pin change needed, and the docs site builds clean (evidence below). Theb64extension that carries CVE-2026-61632 is not enabled indocs/mkdocs.ymlat all; the bump closes the advisory rather than a live exposure.Not fixable —
GO-2026-5932(golang.org/x/crypto/openpgp)This is a permanent "this package should not be used" notice, not a patchable defect. In OSV it is
introduced: 0with no fix event, so no version ofx/cryptoclears it — bumping to 0.54.0 (done here anyway, for hygiene) changes nothing.Reachability:
x/cryptois a direct dependency, required forchacha20poly1305inpkg/api/secrets/ciphers. The advisory covers onlyopenpgpand its six subpackages.go list -deps ./... | grep x/crypto/openpgpreturns nothing, and Go's linker does not emit packages no import path reaches. The vulnerable code is not present in any binary this repo produces.govulncheck -mode=source ./...reports 0 reachable vulnerabilities; this advisory lands in its "modules you require, but your code doesn't appear to call" bucket.github.com/ProtonMail/go-crypto/openpgp, which is the maintained fork the advisory text itself recommends as the replacement.x/crypto/openpgp/*. That would flip the VEX statement toaffectedand block the gate.Recorded as
status: not_affected,justification: vulnerable_code_not_presentinvex/openvex.json, mirrored intoosv-scanner.toml— Scorecard's check has no VEX input, so the mirror is the only channel that reaches it. No.trivyignore, no# nosec, nothing hidden.Re-triage of existing suppressions
Both entries that predate this PR were re-checked rather than carried forward:
not_affected+ ignorefixed, ignore removedgithub.com/aws/aws-sdk-go(v1) is no longer ingo.mod— the Pulumi upgrades dropped the last build-graph edge and Go module pruning removed it.osv-scannerreported the entry as an unused ignore.not_affected+ ignorefixed, ignore removedVEX statements are kept one release as an audit trail; the
osv-scanner.tomlentries are gone.Governance changes
/vex/and/osv-scanner.tomlare now named explicitly. Anot_affectedstatement hides a real advisory from both the scanners and the Scorecard badge; that is the same class of change as touching a workflow, and it should not merge on a generic*match.docs/DEPENDENCIES.md— documents (a) thatosv-scanner.tomlis a derivative mirror which may only carry an ID that already exists in VEX, and (b) that every SCA pass re-triages both files, withunused ignoresas the removal signal. Previously the policy said suppressions live "never in a scanner-suppression file" whileosv-scanner.tomlexisted; policy and practice now agree.osv-scanner.toml— added a note thatreasonmust stay a single-line TOML basic string. A newline in it makes osv-scanner discard the entire config (strings cannot contain newlines) and silently re-report every ignored advisory. Hit while writing this PR.CI ordering (
tools.gopre-bake)build-setuprunsgo get $(tools.go imports)→go mod download→go generate -tags tools→go mod tidy. Becausego getresolves tools to latest andtidyonly runs afterwards, a tool minor landing between runs breaksgo generatewithmissing go.sum entry. The post-go getstate is pre-baked into this commit so CI'sgo getis a no-op:go-jsonschema0.23.1 → 0.24.1,go-internal1.14.1 → 1.15.0,gofumpt0.10.0 → 0.11.0,x/mod0.37.0 → 0.38.0,x/net0.56.0 → 0.57.0,x/tools0.47.0 → 0.48.0,x/telemetrybumped.Dependabot reconciliation
Open alerts before this PR: 5 —
pymdown-extensions,setuptools,soupsieve×2,grpc. All 5 are closed by the bumps above; they auto-resolve once this lands onmain.click(PYSEC-2026-2132) andklauspost/compress(GO-2026-5841) were not alerted by Dependabot but are flagged by OSV — fixed here too.Open Dependabot PRs:
soupsieve 2.8.3 → 2.8.4github-actions/dockerstreams, unrelated to this PR.No config change needed:
.github/dependabot.ymlalready coversgomod(/),pip(/docs),docker, andgithub-actions.Evidence
osv-scanner scan source -r .— beforeosv-scanner scan source -r .— aftergovulncheck -mode=source ./...— afterThe 1 module-level finding is GO-2026-5932, covered above.
Test plan
go build ./...go generate -tags tools(post-pre-bake, matches CI's build-setup order)go test ./pkg/api/secrets/... ./pkg/security/... -count=1— all passdocker run --rm -v $PWD/docs:/docs -w /docs python@sha256:401f6e1a... sh -c "pip install --require-hashes -r requirements.txt && mkdocs build"→Documentation built in 3.39 seconds, hash check clean, no new warningsjq empty vex/openvex.json