Surfaced while verifying #1835 (which closes #1833). Out of that issue's scope (#1833 is specifically about Go standard library CVEs from the toolchain) but found in the same scan, and it affects the shipped binary.
What
govulncheck -mode=binary against /app/cudly extracted from the image built on the #1835 branch, on both architectures:
Your code is affected by 2 vulnerabilities from 2 modules.
Standard-library findings: 0 (that is #1833, now fixed). The two remaining are dependency advisories:
- GO-2026-5158
- GO-2026-5932
At least one traces into golang.org/x/crypto.
Why it matters
These are in the binary we deploy, and they are reachable enough that govulncheck's symbol analysis surfaced them rather than filtering them out as unused code paths. /app/cudly is the API server.
Note also that CI's govulncheck runs in source mode over the six modules, so these should be visible there too. Check whether the CI job currently passes despite them, and if so, why. Either it is not failing on non-stdlib findings, or the source-mode analysis reaches a different conclusion from the binary-mode one. Both possibilities are worth understanding, because they determine whether anything would catch the next such advisory.
Fix direction
- Confirm both advisories against the live vulnerability database and identify the fixed versions.
- Bump the affected modules (
go get -u, then go mod tidy) across every module in the workspace that pulls them in: this is a go.work monorepo with 6 modules (., pkg, providers/{aws,azure,gcp}, tests/e2e), and ./... only covers the current one.
- Re-scan the built binary, not just the source, and assert with a sound method.
Verification bar
Assert on govulncheck's summary line, or use -format json and count OSV entries. Do not use a bare grep -c 'Module: stdlib': govulncheck v1.1.4 does not emit that string, it prints a bare Standard library line, so that pattern returns 0 whether or not findings exist. That vacuous check was found on #1835 and is exactly how an artifact ships dirty behind a green result.
Related: #1836 (nothing in the pipeline scans the image we ship), #1833 (the stdlib half, fixed by #1835).
Surfaced while verifying #1835 (which closes #1833). Out of that issue's scope (#1833 is specifically about Go standard library CVEs from the toolchain) but found in the same scan, and it affects the shipped binary.
What
govulncheck -mode=binaryagainst/app/cudlyextracted from the image built on the #1835 branch, on both architectures:Standard-library findings: 0 (that is #1833, now fixed). The two remaining are dependency advisories:
At least one traces into
golang.org/x/crypto.Why it matters
These are in the binary we deploy, and they are reachable enough that govulncheck's symbol analysis surfaced them rather than filtering them out as unused code paths.
/app/cudlyis the API server.Note also that CI's
govulncheckruns in source mode over the six modules, so these should be visible there too. Check whether the CI job currently passes despite them, and if so, why. Either it is not failing on non-stdlib findings, or the source-mode analysis reaches a different conclusion from the binary-mode one. Both possibilities are worth understanding, because they determine whether anything would catch the next such advisory.Fix direction
go get -u, thengo mod tidy) across every module in the workspace that pulls them in: this is ago.workmonorepo with 6 modules (.,pkg,providers/{aws,azure,gcp},tests/e2e), and./...only covers the current one.Verification bar
Assert on govulncheck's summary line, or use
-format jsonand count OSV entries. Do not use a baregrep -c 'Module: stdlib': govulncheck v1.1.4 does not emit that string, it prints a bareStandard libraryline, so that pattern returns 0 whether or not findings exist. That vacuous check was found on #1835 and is exactly how an artifact ships dirty behind a green result.Related: #1836 (nothing in the pipeline scans the image we ship), #1833 (the stdlib half, fixed by #1835).