Skip to content

Grype backlog: 10 published servers fail the vulnerability gate, several fixable via spec.constraints/overrides #830

Description

@danbarr

Context

#669 touches cmd/dockhand/**, which triggers a full catalog rebuild. That rebuild ran the Grype gate against every server for the first time in a while and 11 build-containers jobs failed: 10 on Run Grype vulnerability scanner, and browserbase-mcp-server additionally on Build and push Docker image.

These are not caused by #669. For any spec without overrides/constraints the injection is a strict no-op: the generated Dockerfile is byte-identical between that branch and main. The full rebuild simply re-scanned images whose vulnerabilities had accrued since their last build.

That is the underlying dynamic worth noting: a server is only rebuilt when its own spec.yaml changes (or cmd/dockhand, go.mod, or the workflow), so newly published advisories against an already-built image go unnoticed until something unrelated forces a rebuild. The published images on GHCR carry these findings today.

Findings by server

Server High/Critical findings
npx/brightdata-mcp @modelcontextprotocol/sdk x3 (high)
npx/astra-db-mcp undici x3 (high)
npx/browserbase-mcp-server sharp (high), plus a separate build failure
npx/mcp-server-neon ~34 across next (1 critical), axios, lodash, postcss, sharp, @modelcontextprotocol/sdk
npx/onchain-mcp @modelcontextprotocol/sdk x2 (high)
npx/mcp-jetbrains fails the gate; specific packages need reading from the run's SARIF (no code-scanning alerts landed for this category)
uvx/chroma-mcp mcp x5 (high)
uvx/mcp-neo4j-cypher fastmcp (1 critical, 1 high)
uvx/mcp-neo4j-aura-manager fastmcp (1 critical, 1 high)
uvx/mcp-neo4j-memory fastmcp (1 critical, 1 high)

uvx/adb-mysql-mcp-server also fails, split out as #828 since it is unblocked by #669 directly.

Relationship to #668

Two of these are the original cases #668 was opened for:

Two refinements to what #668 recorded:

Newly identified as the same shape:

  • chroma-mcp hard-pins mcp[cli]==1.6.0, while its 5 high findings are fixed across 1.9.4, 1.10.0, 1.23.0, 1.27.2, and 1.28.1. An exact pin excluding every fix, so an override candidate.

Different shape, likely not override territory:

  • mcp-server-neon has ~34 high/critical across a broad dependency tree. That reads as a badly stale upstream release rather than one cap, and probably wants an upstream bump or a version reassessment.
  • browserbase-mcp-server has a genuine build failure that needs fixing before its sharp finding matters.

Proposed work

  1. Per-server triage: for each, determine whether an upstream pin/cap excludes the fix (use spec.constraints/spec.overrides from feat(dockhand): support transitive dependency overrides/constraints in spec.yaml #669) or whether the server needs an upstream version bump.
  2. Where an override is used, follow the caution in docs/adding-servers.md and functionally test, especially when forcing across a major boundary.
  3. Consider whether the gate should run more often than "when something forces a rebuild", since that is what let this backlog build up.

The weekly periodic-security-scan workflow was supposed to be the safety net here, but its critical-finding alerting is broken. Tracked in #829.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingneeds-triageIssue needs initial triage by a maintainer

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions