Canonical remediation ticket for the stackstate-agent rows in the dev chart scan 34027081656 (attempt 1, source 7c83f371, finding artifact sha256:78a1aa7f9d07). Coordinated from cve-reporter#29.
Both attributed targets scanned successfully, so this run is complete evidence for this repository:
| Target |
Gate |
quay.io/stackstate/stackstate-k8s-agent:ff38da51 |
failed (CVE gate) |
quay.io/stackstate/stackstate-k8s-cluster-agent:ff38da51 |
failed (CVE gate) |
16 unique advisories: 7 HIGH, 5 MEDIUM, 1 LOW (the aggregate lists 11 HIGH rows because CVE-2026-84304 appears four times across two scanners and two targets).
The chart has caught up. Both images are now built from ff38da51, the merge of #498. Every embedded-OpenSSL row from the previous cycle is gone from this scan, which is the delivery evidence #489 was waiting on — closing that child is a human call.
Fixable in source now — three advisories, two Go dependencies
| Severity |
CVE |
Package |
Installed |
Fixed in |
Verified against |
| HIGH |
CVE-2026-56855 |
golang.org/x/crypto |
v0.55.0 |
0.56.0 |
GO-2026-6355 |
| HIGH |
CVE-2026-78662 |
golang.org/x/crypto |
v0.55.0 |
0.56.0 |
GO-2026-6354 |
| HIGH |
CVE-2026-84304 |
google.golang.org/grpc |
v1.82.1 |
1.83.1 |
GHSA-vp52-pcj8-j9qc |
Confirmed each fix version against the authoritative advisory rather than trusting the scanner lead:
CVE-2026-56855 = GO-2026-6355 and CVE-2026-78662 = GO-2026-6354, both "DoS on deadlocked channel" defects in golang.org/x/crypto/ssh, both fixed: 0.56.0. v0.56.0 is the current latest release.
CVE-2026-84304 = GHSA-vp52-pcj8-j9qc, "gRPC-Go: Heap Memory Exhaustion (OOM) via HTTP/2 DATA Frame Fragmentation", vulnerable <= 1.83.0, first patched 1.83.1.
The open dependabot PRs do not fix this
The scan pins both findings to the root module, and that is where the shipped binaries come from. Neither open grpc PR touches it:
- #503 bumps
comp/otelcol/otlp/components/statsprocessor. That module is absent from go.work and not required by the root go.mod, so it reaches no shipped binary. Same category as datadogconnector and test/integration/serverless/src.
- #504 bumps
test/e2e-framework, a test-only workspace module that ships in no image.
#503 remains independently valid for its own module and is not duplicated by this work. #504 is subsumed: go work sync from the root bump already moves test/e2e-framework to grpc v1.83.1, so it can be closed as redundant once this lands.
The thrift PRs #505/#506 are not part of this workstream. No thrift row is attributed to stackstate-agent in this scan; the thrift advisory in this cycle (CVE-2026-43871, maven libthrift) belongs to stackgraph.
No adoptable fix — deferred, human decision
Nine rows have no adoptable fix, plus one row that is already fixed in the shipped build but
misreported by the scanner. That split matters: lumping all ten together as "no fix" would have carried a
false claim into the record. Per the terminal conditions these are recorded as deferred; no .trivyignore
entry and no local suppression has been added, and no VEX statement is proposed for approval here.
Nine with no adoptable fix
| Severity |
CVE |
Package |
Installed |
Fix status |
| HIGH |
CVE-2007-3149 |
krb5 |
1.21.3 |
none published — and not this component (see below) |
| HIGH |
CVE-2007-5894 |
krb5 |
1.21.3 |
none published — and not this component (see below) |
| HIGH |
CVE-2026-40355 |
krb5 |
1.21.3 |
fix committed upstream but unreleased |
| HIGH |
CVE-2026-40356 |
krb5 |
1.21.3 |
fix committed upstream but unreleased |
| MEDIUM |
CVE-2025-15367 |
python |
3.13.15 |
only 3.15.0a6, a pre-release of an unreleased minor |
| MEDIUM |
CVE-2026-15806 |
python |
3.13.15 |
none published |
| MEDIUM |
CVE-2026-17084 |
python |
3.13.15 |
none published |
| MEDIUM |
CVE-2026-19672 |
python |
3.13.15 |
none published |
| LOW |
CVE-2026-15310 |
python |
3.13.15 |
none published |
All nine are Grype-only matches on generic: sources. Refined findings on the krb5 group:
CVE-2026-40355 / CVE-2026-40356 are true positives with no released fix. Upstream committed the
fix, but 1.22.3 is unreleased and 1.22.2 is still in the affected range, so even bumping to the latest
release would not clear them. Both also need the acceptor side (gss_accept_sec_context()) plus a NegoEx
entry in /etc/gss/mech, which is not provisioned anywhere in this repo — suggestive of
non-reachability, but not proven by symbol-level callgraph analysis.
CVE-2007-3149 / CVE-2007-5894 are versionless-CPE mismatches, not merely "old CVEs on a new
release": the first is a sudo defect and the second a vendor-disputed gssftp ftpd issue. Neither is
the shipped libkrb5.so.3.3.
- krb5 is embedded only to satisfy the msodbcsql18 ODBC driver (
deps/repos.MODULE.bazel).
One already fixed in the shipped build, misreported by the scanner
| Severity |
CVE |
Package |
Installed |
Actual status |
| MEDIUM |
CVE-2026-4360 |
python |
3.13.15 |
already fixed in the installed interpreter |
python/cpython@eee3ddf0 is the 3.13 backport, and eee3ddf0...v3.13.15 gives behind_by: 0, so the fix
is an ancestor of the v3.13.15 tag that this image ships. The scanner reports "no fixed version" because
the PSF advisory expresses the fix only as git commits with no version ranges, and the first commit it
lists — python/cpython@c37a4fdf — is the 2012-04-06 "bump to 3.1.5 final" release commit that the
lightweight v3.1.5 tag points at. A deriver resolving that commit to its nearest tag produces "fixed in
3.1.5", which is precisely the single < 3.1.5 CPE range NVD carries, roughly fourteen years before this
advisory was published.
Its exception file is corrected and left under_investigation: retiring it would turn the row unmanaged,
and asserting not_affected belongs in a reviewed vexhub statement, so the disposition stays with the
owner.
Child items stay open and linked: #489,
vexhub#34,
vexhub#38.
Next action: @StackVista/observability-team decides, per package, between a reviewed vexhub statement and a scoped dated exception. An agent can prepare the evidence; the choice is a person's.
Four exception files lapsed two days ago
All four files under exceptions/ carry expires: '2026-09-04'. Today is 2026-09-06, so every one of them is expired:
exceptions/stackstate-k8s-agent/CVE-2025-15367.yaml
exceptions/stackstate-k8s-agent/CVE-2026-4360.yaml
exceptions/stackstate-k8s-agent/GO-2026-5932.yaml
exceptions/stackstate-k8s-cluster-agent/GO-2026-5932.yaml
The fail-closed behaviour #500 established is live, but it lives in image-pipeline, not this repo — which is why #501 was closed unmerged. evaluator/evaluate.go treats a missing or unparseable expiry, or any date before today, as Expired, and ExitCode fails gate mode on Expired > 0. So nothing is silently lapsing in a gating sense.
It is not currently failing either, and that is the thing to understand: this repository's own image scan runs mode: inform (report-only, since #487), and inform returns 0 unconditionally. So the four expired files produce a report-only note here and gate nothing. Renewing or retiring those dates is part of the human decision above.
Note GO-2026-5932 survives the x/crypto bump: it is the "openpgp package is unmaintained" advisory with introduced: 0 and no fixed version in any release, so it applies to v0.56.0 exactly as it did to v0.55.0. Its two exception files are kept, with the pinned purl moved to v0.56.0 so the record stays truthful. Their expiry dates are untouched — that is the owner's call.
Remaining work
- Land the root-module bump (PR linked in the checkpoint comment below) and follow required CI to a terminal state.
- Wait for the next complete dev chart scan to confirm the three Go rows clear on republished images. A merged PR is not closure evidence.
- Human decision on the nine no-adoptable-fix rows, on the
CVE-2026-4360 disposition, and on the four lapsed expiry dates.
This ticket stays open. Closure needs a later complete dev scan showing every target for this repository clean.
Canonical remediation ticket for the
stackstate-agentrows in the dev chart scan 34027081656 (attempt 1, source7c83f371, finding artifactsha256:78a1aa7f9d07). Coordinated from cve-reporter#29.Both attributed targets scanned successfully, so this run is complete evidence for this repository:
quay.io/stackstate/stackstate-k8s-agent:ff38da51quay.io/stackstate/stackstate-k8s-cluster-agent:ff38da5116 unique advisories: 7 HIGH, 5 MEDIUM, 1 LOW (the aggregate lists 11 HIGH rows because
CVE-2026-84304appears four times across two scanners and two targets).The chart has caught up. Both images are now built from
ff38da51, the merge of #498. Every embedded-OpenSSL row from the previous cycle is gone from this scan, which is the delivery evidence #489 was waiting on — closing that child is a human call.Fixable in source now — three advisories, two Go dependencies
golang.org/x/cryptogolang.org/x/cryptogoogle.golang.org/grpcConfirmed each fix version against the authoritative advisory rather than trusting the scanner lead:
CVE-2026-56855= GO-2026-6355 andCVE-2026-78662= GO-2026-6354, both "DoS on deadlocked channel" defects ingolang.org/x/crypto/ssh, bothfixed: 0.56.0.v0.56.0is the current latest release.CVE-2026-84304= GHSA-vp52-pcj8-j9qc, "gRPC-Go: Heap Memory Exhaustion (OOM) via HTTP/2 DATA Frame Fragmentation", vulnerable<= 1.83.0, first patched1.83.1.The open dependabot PRs do not fix this
The scan pins both findings to the root module, and that is where the shipped binaries come from. Neither open grpc PR touches it:
comp/otelcol/otlp/components/statsprocessor. That module is absent fromgo.workand not required by the rootgo.mod, so it reaches no shipped binary. Same category asdatadogconnectorandtest/integration/serverless/src.test/e2e-framework, a test-only workspace module that ships in no image.#503remains independently valid for its own module and is not duplicated by this work.#504is subsumed:go work syncfrom the root bump already movestest/e2e-frameworkto grpcv1.83.1, so it can be closed as redundant once this lands.The thrift PRs #505/#506 are not part of this workstream. No thrift row is attributed to
stackstate-agentin this scan; the thrift advisory in this cycle (CVE-2026-43871, mavenlibthrift) belongs tostackgraph.No adoptable fix — deferred, human decision
Nine rows have no adoptable fix, plus one row that is already fixed in the shipped build but
misreported by the scanner. That split matters: lumping all ten together as "no fix" would have carried a
false claim into the record. Per the terminal conditions these are recorded as deferred; no
.trivyignoreentry and no local suppression has been added, and no VEX statement is proposed for approval here.
Nine with no adoptable fix
krb5krb5krb5krb5python3.15.0a6, a pre-release of an unreleased minorpythonpythonpythonpythonAll nine are Grype-only matches on
generic:sources. Refined findings on the krb5 group:CVE-2026-40355/CVE-2026-40356are true positives with no released fix. Upstream committed thefix, but 1.22.3 is unreleased and 1.22.2 is still in the affected range, so even bumping to the latest
release would not clear them. Both also need the acceptor side (
gss_accept_sec_context()) plus a NegoExentry in
/etc/gss/mech, which is not provisioned anywhere in this repo — suggestive ofnon-reachability, but not proven by symbol-level callgraph analysis.
CVE-2007-3149/CVE-2007-5894are versionless-CPE mismatches, not merely "old CVEs on a newrelease": the first is a sudo defect and the second a vendor-disputed gssftp
ftpdissue. Neither isthe shipped
libkrb5.so.3.3.deps/repos.MODULE.bazel).One already fixed in the shipped build, misreported by the scanner
pythonpython/cpython@eee3ddf0is the 3.13 backport, andeee3ddf0...v3.13.15givesbehind_by: 0, so the fixis an ancestor of the
v3.13.15tag that this image ships. The scanner reports "no fixed version" becausethe PSF advisory expresses the fix only as git commits with no version ranges, and the first commit it
lists —
python/cpython@c37a4fdf— is the 2012-04-06 "bump to 3.1.5 final" release commit that thelightweight
v3.1.5tag points at. A deriver resolving that commit to its nearest tag produces "fixed in3.1.5", which is precisely the single
< 3.1.5CPE range NVD carries, roughly fourteen years before thisadvisory was published.
Its exception file is corrected and left
under_investigation: retiring it would turn the row unmanaged,and asserting
not_affectedbelongs in a reviewed vexhub statement, so the disposition stays with theowner.
Child items stay open and linked: #489,
vexhub#34,
vexhub#38.
Next action:
@StackVista/observability-teamdecides, per package, between a reviewed vexhub statement and a scoped dated exception. An agent can prepare the evidence; the choice is a person's.Four exception files lapsed two days ago
All four files under
exceptions/carryexpires: '2026-09-04'. Today is 2026-09-06, so every one of them is expired:exceptions/stackstate-k8s-agent/CVE-2025-15367.yamlexceptions/stackstate-k8s-agent/CVE-2026-4360.yamlexceptions/stackstate-k8s-agent/GO-2026-5932.yamlexceptions/stackstate-k8s-cluster-agent/GO-2026-5932.yamlThe fail-closed behaviour #500 established is live, but it lives in
image-pipeline, not this repo — which is why #501 was closed unmerged.evaluator/evaluate.gotreats a missing or unparseable expiry, or any date before today, asExpired, andExitCodefails gate mode onExpired > 0. So nothing is silently lapsing in a gating sense.It is not currently failing either, and that is the thing to understand: this repository's own image scan runs
mode: inform(report-only, since #487), andinformreturns 0 unconditionally. So the four expired files produce a report-only note here and gate nothing. Renewing or retiring those dates is part of the human decision above.Note
GO-2026-5932survives the x/crypto bump: it is the "openpgp package is unmaintained" advisory withintroduced: 0and no fixed version in any release, so it applies tov0.56.0exactly as it did tov0.55.0. Its two exception files are kept, with the pinned purl moved tov0.56.0so the record stays truthful. Their expiry dates are untouched — that is the owner's call.Remaining work
CVE-2026-4360disposition, and on the four lapsed expiry dates.This ticket stays open. Closure needs a later complete dev scan showing every target for this repository clean.