Skip to content

Track: remaining 86 HIGH (0 CRITICAL) code-scanning findings on upstream vendor images #82

Open

Description

@JJediny

Track: remaining 86 HIGH (0 CRITICAL) code-scanning findings on upstream vendor images

Summary

After PR #81 (security(deps): refresh digest-pinned images) merged on main at 7c9cbf6, the code-scanning tab still shows 86 HIGH and 0 CRITICAL findings across 4 vendor-published images. This tracking issue links the per-image follow-ups and records the resolution path for each.

Numbers (Trivy 0.74.0, current vuln DB, scanned 2026-09-14)

Image HIGH CRITICAL Resolution path
nvcr.io/nvidia/k8s/dcgm-exporter:latest 34 0 #83
netsampler/goflow2:latest 30 0 #84
anchore/grype:latest 15 0 #85
falcosecurity/falco:0.44.1 3 0 #86
osquery/osquery:5.17.0-ubuntu22.04 2 0 #87
otel-collector-contrib@799dc6cf 1 0 #88
openobserve@88fb692a 1 0 #89
clamav, clamav-base, rsigma 0 0 clean
Total 86 0

Already shipped

Why we stopped (not a fix)

  • No CRITICAL on any image → release gate (block on CRITICAL) is doing its job.
  • The remaining HIGHs are concentrated in 4 upstream-vendor images.
  • An in-repo fix would require picking a specific new digest per image. A draft PR-2 (tag-pinned bumps) showed mixed results: pinning dcgm-exporter had no effect, but pinning goflow2 to v2.2.6 regressed from 30 to 56 HIGH + 3 CRITICAL, and grype from 13 to 59 + 2 CRITICAL, on the same Trivy 0.74.0 binary. Those candidate digests are not safe to ship without upstream coordination.
  • osquery:5.17.0-ubuntu22.04 is the newest published tag for that series on Docker Hub; the 2 HIGHs (CVE-2025-68973 GnuPG, CVE-2026-45447 OpenSSL PKCS7) have no upstream fix without a major-version downgrade of the osquery image, which we will not do without a separate evaluation.

Resolution plan

  1. Per-image issues (one per remaining HIGH-bearing image) document:
    • The full CVE list with installed vs. fixed versions
    • The upstream tracking issue / release that will close each CVE
    • The acceptance criteria for re-pinning
  2. .trivyignore follow-up: once each per-image issue has a clear owner and a fix-in-flight upstream entry, add a .trivyignore line per CVE with reason: and expiry: so the security tab reflects "known + tracked" rather than "open + unowned". Not blanket suppression; per-CVE documentation.
  3. Re-scan gate: every digest bump must be re-scanned with trivy image --scanners vuln --severity HIGH,CRITICAL and have the new digest's CVE count compared against the old digest's count against the current vuln DB (not the matrix run's DB), to avoid the DB-drift false positive that misled the abandoned PR-2.

Acceptance criteria for closing this tracking issue

  • All per-image child issues closed.
  • .trivyignore in place with documented rationale and review dates.
  • Either the HIGH count drops to a documented, owner-tracked floor, or each remaining HIGH has an explicit "deferred to upstream X by YYYY-MM-DD" annotation in the code-scanning tab.

Activity

  1. JJediny commented on Oct 4, 2026

    @JJediny
    OwnerAuthor

    Progress Update (via PR #103)

    Total open code-scanning alerts on main dropped from 86 to 43 (30 goflow2, 11 grype, 2 osquery).

  2. JJediny commented on Oct 4, 2026

    @JJediny
    OwnerAuthor

    Status update — 2026-10-04 (Trivy 0.74.0, DB 2026-10-04)

    .trivyignore implemented per this issue's resolution plan step 2 in 4d90ba4 (+ CI-consistency for scripts/scan-images.sh, which now mounts the file into the Trivy container).

    Fresh per-image numbers from the 2026-10-04 CI scan (37230996409 / 37232639233):

    Image Sep-14 HIGH 2026-10-04 HIGH Change Action
    osquery 5.17.0-ubuntu22.04 (pinned) 2 3 +1 new libssl3 CVE-2026-84782 ignored w/ reason, review 2027-01-02 (#87)
    goflow2:latest 30 22 upstream :latest partially rebuilt 22 IDs ignored, review 2027-01-02 (#84)
    dcgm-exporter:latest 34 2 (unique CVE-2026-75804, CVE-2026-84782) NVIDIA rebuilt base ignored, review 2027-01-02 (#83)
    grype:latest 15 0 upstream rebuild cleared stdlib/docker/grpc CVEs #85 resolvable — no entries needed
    falco / openobserve / otel / rsigma / clamav(+) 0 0 — clean; children #86/#88/#89 closed

    Verified against the real binary: osquery 3→0, goflow2 22→0, dcgm 2→0 locally and in the post-merge CI run (all targets report 0). Open HIGH Trivy alerts on the Security tab: 57 → 44 immediately after the first clean upload; the historical remainder (old-digest goflow2/dcgm/grype IDs from September) auto-resolves as fixed on subsequent uploads — weekly Monday run guarantees convergence.

    Findings on process:

    1. Trivy 0.74.0 does not parse the EXPIRY= directive (three syntax variants tested empirically); review dates are comment- enforced and tied to the weekly workflow.
    2. ⚠️ New finding outside tracked scope: CVE-2026-103111 (pcre2 out-of-bounds write, HIGH) appeared on clamav/clamav:latest at 2026-10-04 00:24 UTC — active profile, unpinned floating tag, intentionally not in .trivyignore. Recommend a per-image child issue (like Reduce HIGH findings on nvcr.io/nvidia/k8s/dcgm-exporter (34 HIGH, 0 CRITICAL) #83–Reduce HIGH findings on osquery/osquery:5.17.0-ubuntu22.04 (2 HIGH, 0 CRITICAL) — no upstream fix #87) and/or digest-pinning the two clamav:latest services so a moving vendor tag does not silently introduce findings.
    3. .trivyignore entries are ID-global across all scanned images; the weekly scan is the guard against these IDs re-appearing somewhere they would actually matter.
  3. JJediny commented on Oct 4, 2026

    @JJediny
    OwnerAuthor

    Addendum — pinning doctrine now applied consistently (2026-10-04)

    Since the main comment, clamav (#111) and grype (#85, closed) floating tags were digest-pinned after verified pulls/scans. Remaining explicit decision: goflow2 (:latest) and dcgm-exporter (:latest) intentionally stay floating in both compose and the CI matrix. Rationale: for these two, upstream fixes are not in flight, so the moving tag is the drift-monitoring instrument — a new finding on the floating ref is the signal that upstream changed (which is exactly how this issue's 86→44 alert convergence and the clamav pcre2 discovery worked). Pinning them would freeze the suppressed-HIGH baseline and mute re-pin signals; their child issues #83/#84 keep the acceptance criteria (re-pin when upstream rebuilds clears the counts).

    Current posture: every active-path image is either digest-pinned (falco, openobserve, otel, rsigma, clamav×2, webhook-build, grype-debug, osquery-pin) or floating-by-design with a tracking issue (goflow2, dcgm, grype:latest as monitor). Weekly scan + trivy-results-* artifacts are the standing guard; 44 historical alerts converge on subsequent uploads as suppressed rules drop out of new SARIFs.

  4. JJediny commented on Oct 11, 2026

    @JJediny
    OwnerAuthor

    Closure-path milestone (2026-10-10): alert convergence completed

  5. added a commit that references this issue on Oct 11, 2026
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

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions