Skip to content

[stackstate-agent] Dev scan 34027081656: bump x/crypto to 0.56.0 and grpc to 1.83.1; krb5 and python rows need a human VEX or exception decision #509

Description

@ai-collaboration-app

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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions