Skip to content

πŸ”’ security(image): clear image HIGH/CRITICAL CVEs and scope the Grype gate#442

Merged
scttbnsn merged 1 commit into
mainfrom
fix/image-cve-grype
Jun 16, 2026
Merged

πŸ”’ security(image): clear image HIGH/CRITICAL CVEs and scope the Grype gate#442
scttbnsn merged 1 commit into
mainfrom
fix/image-cve-grype

Conversation

@scttbnsn

Copy link
Copy Markdown
Contributor

What

Clears the HIGH/CRITICAL container-image CVEs that the new grype-image scan
(added in #441) surfaced, and scopes the Grype image gate so it stays accurate
going forward.

Before this change the built release image reported 11 critical + 22 high.
After it: 0 HIGH/CRITICAL outside the two bundled third-party tool binaries
(cosign, trivy), which are triaged with a documented, location-scoped
.grype.yaml.

Changes

  • Dockerfile β€” bump the base + pins that carried the fixable CVEs:
    • node:24-alpine β†’ Alpine 3.24.1 digest (clears the Node-runtime CVE, musl, curl Γ—2, git)
    • bash 5.3.3-r1 β†’ 5.3.9-r1, git 2.52.0-r0 β†’ 2.54.0-r0
    • cosign 2.6.3-r1 β†’ 3.0.6-r1 (clears the bulk of the vendored-Go cosign CVEs; CLI verify flags drydock uses are unchanged)
  • .grype.yaml (new) β€” location-scoped ignore for /usr/bin/cosign and
    /usr/bin/trivy only. These are vendored Go-module CVEs compiled into the
    upstream tool binaries; we can't patch them independently β€” they clear when
    Alpine rebuilds those packages, which we pick up on the next base bump. The
    Node runtime, every OS package, and the entire app dependency graph stay
    fully gated. Gating on a module graph we don't ship is the same
    manifest-vs-shipped mismatch we dropped Snyk over.
  • security-grype.yml β€” wire GRYPE_CONFIG to the repo-root .grype.yaml
    so the gate is deterministic across action versions (grype also auto-discovers
    it, but pinning the path is explicit).
  • CHANGELOG.md β€” Security entry under Unreleased.

Verification

  • Full release image scan: grype --fail-on high with the config exits 0
    (was exit 2 / 33 findings). HIGH+ findings outside the two triaged binaries: 0.
  • cosign 3.0.6 CLI confirmed compatible with app/security/scan.ts's
    verify --output json --key --certificate-identity --certificate-oidc-issuer.
  • qlty / hadolint / yamllint clean on changed files.

The red grype-image alerts currently in the Security tab will auto-close on the
next scan once this lands (the new SARIF no longer reports them).

… gate

The first grype-image scan on main surfaced a pre-existing CVE backlog that
nothing had been scanning (Snyk Container never ran β€” no token configured).
Bumped the base + cosign to clear everything in the Node runtime and Alpine OS
packages; triaged the residual findings that live only inside the bundled
cosign/trivy tool binaries' vendored Go module graphs.

- πŸ”§ Dockerfile: node:24-alpine base bump (node 24.14.0->24.16.0 / CVE-2026-21710,
  musl 1.2.5->1.2.6, curl 8.19.0->8.20.0, git 2.52.0->2.54.0), cosign 2.6.3->3.0.6,
  bash 5.3.3->5.3.9. cosign 3.0.6 keeps the verify flags the signature path uses.
- ✨ .grype.yaml: documented, location-scoped triage for /usr/bin/cosign and
  /usr/bin/trivy (vendored Go CVEs clear only on Alpine package rebuilds)
- πŸ”§ security-grype.yml: load .grype.yaml via GRYPE_CONFIG for a deterministic gate
- πŸ“ CHANGELOG: Security entry

Verified: full release image scan reports 0 HIGH/CRITICAL outside the two triaged
binaries; grype --fail-on high passes with the config (was 11 critical + 22 high).
@vercel

vercel Bot commented Jun 16, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
drydock-website Ready Ready Preview, Comment Jun 16, 2026 8:30pm
drydockdemo-website Ready Ready Preview, Comment Jun 16, 2026 8:30pm

@codecov

codecov Bot commented Jun 16, 2026

Copy link
Copy Markdown

Codecov Report

βœ… All modified and coverable lines are covered by tests.

πŸ“’ Thoughts on this report? Let us know!

@biggest-littlest biggest-littlest left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Image CVE remediation looks right. Base + cosign bump clears the fixable HIGH/CRITICALs; the .grype.yaml triage is location-scoped to the bundled cosign/trivy binaries only and well documented. Verified the gate passes. πŸ‘

@ALARGECOMPANY ALARGECOMPANY left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. Triage rationale matches the Snyk-removal reasoning (don't gate on a module graph we don't ship), Node/OS/app deps stay fully gated. Approving.

@scttbnsn scttbnsn merged commit 6fc0f37 into main Jun 16, 2026
27 checks passed
@scttbnsn scttbnsn deleted the fix/image-cve-grype branch June 16, 2026 20:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants