Skip to content

Scan published Server images for actionable vulnerabilities #802

Open

Description

@rmcdaniel

Problem

The Server release workflow verifies the published image's trust stores, readiness, Compose behavior, database TLS, and protocol behavior, but it does not currently inventory vulnerabilities in the final multi-architecture image. A source dependency scan alone cannot see distribution packages added by the production Dockerfile.

Current release evidence

Security scanned the exact published Server 2.11.5 manifests at 2026-10-28 15:10 UTC. The complete receipt and dispositions supersede the earlier 2.11.3/2.11.4 inventories.

  • Multi-architecture index: sha256:f4f2ec64a6522ee18a31542a30554873dbaa2f5d3af3ccb52deb914591699c20.
  • amd64: sha256:bcc672859a399d1df234fc304531ab06b7bfa8acad7cb2c9da95f8e7ab5c98b4.
  • arm64: sha256:3160f4f58ab9b144705c3e4d5d97b0881b0891c1f00e9ab6b99b3245a8c3b26a.
  • Pinned Trivy: 0.76.1@sha256:2e6c00d711ab4ae41d8a30c2c1fd3bd3b62704c177bb120f95012e939edfb3df.
  • Vulnerability DB v2 updated 2026-10-28T13:01:10.618103814Z.

Both platforms have the same Debian 13.7 inventory: 147 high/critical OS-package rows, 86 unique advisory IDs, three critical and 144 high, with zero supported fixed versions. Composer, Node and Cargo inventory has zero high/critical findings. The receipt includes the identical normalized inventory fingerprint.

The three critical rows currently have no identified reachable critical path in this image: CVE-2026-6653 in libxml2 has no identified non-test parser use in the exact source; CVE-2026-93221 and CVE-2026-99083 concern host-kernel services and are attributed to userspace headers in linux-libc-dev. These dispositions are specific to the scanned image and current evidence.

Security found no actionable fixed-version high/critical finding and added no incident, rollback, release hold or Rust gate. This is read-only inventory evidence, not completed scan automation.

General retains implementation of exact-manifest release scans and scheduled rescans of the latest stable image. Next: add the repository-owned scan command and thin Actions integration, retain compact receipts, and qualify the actionable-risk policy before closing this issue.

Acceptance criteria

  • Scan the exact amd64 and arm64 platform digests of a release candidate or newly published stable image with a pinned scanner and current vulnerability database.
  • Retain a compact, metadata-only receipt containing platform digest, scanner/database version and time, advisory IDs, packages, installed versions, fix status, and disposition. Do not retain large image exports or redundant full reports.
  • Distinguish OS packages from language dependencies and build/header packages from reachable runtime code.
  • Use a risk-tiered policy: hold promotion for an actionable fixed-version high/critical finding or an explicitly reachable unpatched critical finding. Do not make supported-distribution, no-fix inventory a permanent release failure.
  • Schedule a rescan of the latest stable image so newly published advisories or fixes are detected after release.
  • Update one owning issue with the latest disposition rather than opening a new issue for every unchanged scanner row.
  • If a package appears unnecessary at runtime, evaluate removing it separately with conformance and production-runtime qualification; do not remove packages speculatively.

References

Activity

  1. rmcdaniel commented on Oct 27, 2026

    @rmcdaniel
    MemberAuthor

    Latest-stable receipt: Server 2.11.4 was published at source commit ad3ac5fda0a30a58084b2d68569f2d91e23fabf3 on 2026-10-27. I scanned both exact platform manifests with the same pinned Trivy 0.76.1 image and vulnerability database used for the 2.11.3 baseline (database updated 2026-10-27T01:25:30Z):

    • multi-architecture index: sha256:9dd7e5fc8382c0bbdda106ffac86ab8edc4264545e2df3c7e43209884fb8091d
    • amd64: sha256:bee30cde5b70a429561a49f25daf4ef71a1e405d43322f78ff1b8137029c80f3
    • arm64: sha256:cc297aa7d1f81b8bfa1169de6980dabe58d9776dcf513f379dcba2a51b1f5cc7

    Both platforms again report Debian 13.7, 144 high/critical package rows, 83 unique advisory IDs, two critical rows, zero rows with a supported FixedVersion, and zero high/critical language-package findings. The normalized advisory/package/version/fix-status set has SHA-256 fingerprint 3fc4d75b89623837df3f0110f2caa54dfd3891711bd7bbd52baf721961cb459d on both platforms and matches 2.11.3 exactly.

    The critical dispositions therefore remain unchanged: CVE-2026-6653 is the Debian stable libxml2 no-DSA/minor item with no identified Server parser reachability, and CVE-2026-93221 is the nfsd kernel race attributed to the image's linux-libc-dev headers rather than a kernel supplied or run by the container. No incident, rollback, or 2.11.4/Rust work hold is indicated by this scan.

  2. rmcdaniel commented on Oct 28, 2026

    @rmcdaniel
    MemberAuthor

    Latest-stable receipt: Server 2.11.5 was published at source commit 721b2831975cc898cc39d7528c5ba7e8441fe744. At 2026-10-28 15:10 UTC I scanned both exact platform manifests with pinned Trivy 0.76.1@sha256:2e6c00d711ab4ae41d8a30c2c1fd3bd3b62704c177bb120f95012e939edfb3df and vulnerability DB v2 updated 2026-10-28T13:01:10.618103814Z:

    • multi-architecture index: sha256:f4f2ec64a6522ee18a31542a30554873dbaa2f5d3af3ccb52deb914591699c20
    • amd64: sha256:bcc672859a399d1df234fc304531ab06b7bfa8acad7cb2c9da95f8e7ab5c98b4
    • arm64: sha256:3160f4f58ab9b144705c3e4d5d97b0881b0891c1f00e9ab6b99b3245a8c3b26a

    Both platform results are identical: Debian 13.7, 147 high/critical OS-package rows representing 86 unique advisory IDs, 3 critical and 144 high. Zero rows have a supported FixedVersion; Composer, Node and Cargo inventory have zero high/critical findings. The normalized advisory/package/installed-version/fix-status set has SHA-256 fingerprint 47a15aa2b29cf58b5ecccd4fe3635183c66039966caa94a5b9bfabb9023dd786 on both platforms.

    The current-DB counts are three rows and three unique IDs higher than the 2.11.4 receipt. The two prior critical dispositions remain unchanged. The new critical row is CVE-2026-99083 on linux-libc-dev 6.12.113-1: Debian identifies a ksmbd kernel heap out-of-bounds write, lists Trixie security as vulnerable with no stable fixed version, and fixes it only in unstable linux 7.2.12-1 (tracker). As with the existing nfsd row, the container contains userspace kernel headers; it does not supply or run the host kernel or ksmbd. The libxml2 row still has no identified non-test parser reachability in the exact Server source.

    Disposition: no actionable fixed-version high/critical finding, no explicitly reachable unpatched critical path, and no incident, rollback, release hold, or Rust #325 gate. This was a read-only image inventory; neither platform image was executed and no source or schedule was changed. General retains the scan-automation implementation.

  3. rmcdaniel commented on Oct 30, 2026

    @rmcdaniel
    MemberAuthor

    Latest-stable runtime-image receipt: I scanned both exact 2.11.7 platform manifests at 2026-10-30 02:56–02:57 UTC.

    Identity:

    • source revision: f55f90e54a213872f1c164a1b22c082d859c18aa
    • multi-platform index: sha256:96e3e7de8c58f31bfb1ef4d5bddddc2678f4684f5cb3505e6e9ddc6fa3f7f625
    • amd64: sha256:be7c2288ff935396262d743590530b204fac11b76582e56a525cc81a8da840d3
    • arm64: sha256:7dbc3db050fec05ea5cd10e07ac8399ecf3e285d593bca32979a2320f02a104f
    • scanner: aquasec/trivy:0.76.1@sha256:2e6c00d711ab4ae41d8a30c2c1fd3bd3b62704c177bb120f95012e939edfb3df
    • vulnerability DB v2 updated 2026-10-30T01:01:11.134360213Z, downloaded 2026-10-30T02:51:55.649556823Z

    Both architectures report Debian 13.7 and have the same normalized high/critical inventory fingerprint, b339c784d6b5337328a165efe3b3b3513af151d22480e529670dcf89d51d3ddc: 151 OS-package rows, 90 unique advisory IDs, 2 critical and 149 high. Zero rows report a supported FixedVersion. Cargo, Composer-vendor and Node inventories contain zero high/critical findings.

    Critical dispositions:

    • CVE-2026-6653, libxml2 2.12.7+dfsg+really2.9.14-2.1+deb13u3: Debian still marks Trixie vulnerable but explicitly no-dsa / minor, with the fix only in unstable. Exact release-source search again found no non-test Server use of DOM/SimpleXML/XMLReader/XMLWriter/libxml/XSLT/SOAP APIs. No reachable critical path is identified. https://security-tracker.debian.org/tracker/CVE-2026-6653
    • CVE-2026-99083, linux-libc-dev 6.12.113-1: Debian describes a ksmbd kernel heap write and has no Trixie fixed package. The container inventory is userspace kernel headers; this image neither supplies nor runs the host kernel or ksmbd. https://security-tracker.debian.org/tracker/CVE-2026-99083

    The prior 2.11.5 counts used an older DB, so count movement is not treated as an image regression. Under this issue's accepted policy there is no actionable fixed-version high/critical result and no explicitly reachable unpatched critical path: no incident, rollback, release hold, or Rust #325 gate. This is read-only current-stable inventory evidence, not the still-open repository-owned release/scheduled scan automation.

  4. rmcdaniel commented on Nov 1, 2026

    @rmcdaniel
    MemberAuthor

    Latest-stable read-only rescan: Server 2.11.7, 2026-11-01 11:37–11:38 UTC.

    Identity:

    • annotated tag 2.11.7 peels to source f55f90e54a213872f1c164a1b22c082d859c18aa;
    • the live tag still resolves to amd64 sha256:be7c2288ff935396262d743590530b204fac11b76582e56a525cc81a8da840d3 and arm64 sha256:7dbc3db050fec05ea5cd10e07ac8399ecf3e285d593bca32979a2320f02a104f;
    • scanner aquasec/trivy:0.76.1@sha256:2e6c00d711ab4ae41d8a30c2c1fd3bd3b62704c177bb120f95012e939edfb3df;
    • vulnerability DB v2 updated 2026-11-01T07:08:40.846369079Z, downloaded 2026-11-01T11:38:02.050768137Z.

    Both exact platform manifests report the same normalized inventory: Debian 13.7, 150 high/critical OS-package rows representing 89 unique advisory IDs, 2 critical / 148 high, and zero rows with a supported FixedVersion. Cargo, Composer-vendor and Node inventories contain zero high/critical findings. The sorted advisory/package/installed-version/fix-status fingerprint is f4582c43f0ea29be5cff15fc58cd9c6f9b4bb6dc75bc60c09cfa5e16f9678221 on both architectures.

    Compared with the October 30 receipt against the same immutable image, the current database has one fewer high row and one fewer unique advisory ID (151/90 → 150/89). This is database movement, not an image change. There is no new critical finding. The two critical rows remain:

    • CVE-2026-6653 on libxml2 2.12.7+dfsg+really2.9.14-2.1+deb13u3; and
    • CVE-2026-99083 on linux-libc-dev 6.12.113-1.

    Their existing exact-image dispositions remain applicable: the release-source review found no non-test libxml parser path, while linux-libc-dev supplies userspace headers rather than the host kernel or ksmbd. The current database provides no supported fix for either row.

    Disposition: no actionable fixed-version high/critical finding, no newly identified reachable unpatched critical path, and no incident, rollback, release hold, or Rust #325 gate. This was inventory-only; neither image was executed and no product, workflow, publication, or production state changed.

    General still owns repository-managed release/scheduled scan automation. To avoid repetitive manual checks, the next manual rescan is due no earlier than 2026-11-03 after the database refresh, unless a new stable Server image, a relevant advisory/fix signal, or automation lands first.

  5. rmcdaniel commented on Nov 1, 2026

    @rmcdaniel
    MemberAuthor

    New-stable trigger for the next bounded inventory: PHP Server2.11.8 is published at source fa3fc2f2f6b8935ea4a6eea47f6a9221e2adafff, index sha256:3848d5d5cd1b23bd2881e3fdecea64cc44b72e6fb812e577c2db6d0872d065dd. This meets the new-stable exception in the preceding cadence; it does not justify repeating the old2.11.7 scan. Publisher/matching chart41304149748 and installed functional acceptance pass.

    Next: one exact2.11.8 amd64+arm64 inventory against the current advisory DB, preserving the existing reachability/fixability policy and exact artifact identity. The last accepted2.11.7 counts remain historical; no2.11.8 vulnerability counts are claimed yet. General retains automation and is coordinating the bounded manual inventory with Security. No incident or unrelated release gate is inferred from a pending inventory.

  6. rmcdaniel commented on Nov 1, 2026

    @rmcdaniel
    MemberAuthor

    Latest-stable read-only inventory: Server 2.11.8, 2026-11-01 14:42 UTC.

    Identity:

    • source fa3fc2f2f6b8935ea4a6eea47f6a9221e2adafff;
    • multi-platform index sha256:3848d5d5cd1b23bd2881e3fdecea64cc44b72e6fb812e577c2db6d0872d065dd;
    • amd64 sha256:980fe0a052089ced34ec3fcd2be2ea4e77436861d8fb537fb6654cb652a53e07;
    • arm64 sha256:cea163f8fcedf3a17302acf0141b073a85fbdb395ebbcd59e5af6f5fa9ad75e1;
    • scanner aquasec/trivy:0.76.1@sha256:2e6c00d711ab4ae41d8a30c2c1fd3bd3b62704c177bb120f95012e939edfb3df;
    • vulnerability DB v2 updated 2026-11-01T13:02:34.671548954Z, downloaded 2026-11-01T14:42:40.096798114Z.

    Both exact platform manifests report the same normalized inventory: Debian 13.7, 152 high/critical OS-package rows representing 91 unique advisory IDs, 2 critical / 150 high, and zero rows with a supported FixedVersion. Cargo, Composer-vendor and Node inventories contain zero high/critical findings. The sorted advisory/package/installed-version/fix-status fingerprint is 37517e5f3dc66819f61f5a7bb8ace1921282415f10551d2defa5c3eb0985b570 on both architectures.

    The November 1 2.11.7 receipt reported 150 rows / 89 IDs against the earlier 07:08 UTC database. This inventory uses the later 13:02 UTC database, so the two-row/two-ID movement is not evidence of an image regression. There is no new critical result. The two critical rows and installed packages are unchanged:

    • CVE-2026-6653 on libxml2 2.12.7+dfsg+really2.9.14-2.1+deb13u3; and
    • CVE-2026-99083 on linux-libc-dev 6.12.113-1.

    The exact 2.11.8 source still has no non-test use of DOM/SimpleXML/XMLReader/XMLWriter/libxml/XSLT/SOAP APIs. linux-libc-dev remains userspace kernel headers; this image does not supply or run the host kernel or ksmbd. The current database gives neither critical row a supported fixed version.

    Disposition: no actionable fixed-version high/critical result, no newly identified reachable unpatched critical path, and no incident, rollback, release hold, or Rust #325 gate. This was a remote inventory of immutable manifests; neither Server image was executed and no product, workflow, publication, or production state changed.

    General retains repository-managed release/scheduled scan automation. The accepted manual cadence resumes: no repeat before 2026-11-03 after the database refresh, unless a new stable Server image, a relevant advisory/fix signal, or automation lands first.

  7. rmcdaniel commented on Nov 1, 2026

    @rmcdaniel
    MemberAuthor

    Native-final scope confirmation from #919

    Read-only source review of Server #919 exact head a7046050c7f9f04649d20f99fa25332d5cf7330a confirms that the native final publisher:

    • builds the digest-pinned Debian/Rust image with Cargo.lock and cargo build --release --locked;
    • verifies the exact amd64/arm64 index and emits SLSA build-provenance attestations for that index;
    • contains no Trivy/Grype/OSV/container-vulnerability step and no SBOM generation or SBOM attestation.

    The attestation is therefore provenance evidence only; do not describe it as an SBOM or vulnerability inventory. This is the existing #802 automation gap, not a new #919 source defect.

    Apply this issue's already accepted risk-tiered policy to the native release line:

    1. Include the next published native candidate used for final qualification—and the exact 3.0.0 stable index if it differs—in the same pinned-scanner, current-database amd64+arm64 inventory.
    2. Record the exact index/platform digests, scanner/DB identity and time, OS plus Cargo findings, normalized fingerprint, fixability and reachability disposition.
    3. Hold only for this issue's existing actionable conditions: a supported fixed-version high/critical result or an explicitly reachable unpatched critical path. Do not convert unchanged no-fix distribution inventory into a permanent Rust gate.
    4. If repository automation is not ready before the qualifying artifact exists, use one bounded manual exact-manifest inventory and keep automation ownership here. Do not repeat today's accepted PHP 2.11.8 inventory.
    5. If a formal SBOM is required as a release deliverable, add and verify it explicitly; the current provenance action does not provide one.

    No image was pulled, executed or scanned in this review, and no registry, source, workflow or credential state changed. This adds no pre-RC or #919 hold. General retains #802 implementation and cadence ownership.

  8. rmcdaniel commented on Nov 4, 2026

    @rmcdaniel
    MemberAuthor

    Server open-item pass, 2026-11-04.

    General retains scan-command/cadence ownership and Security owns fixability/reachability disposition; Server owns exact native artifact/workflow binding. The latest read PHP2.11.8 inventory is historical evidence, and no scan/SBOM is inferred from native provenance (#792, now completed for its own scope).

    Next source artifact is a pinned-scanner exact-index/platform command with bounded metadata receipts and current vulnerability-DB identity, followed by thin release/rescan integration. Security/General: return any newer exact native stable inventory and select the next authorized immutable tuple if one is due. Preserve the existing actionable fixed-version/reachable-critical policy; unchanged no-fix distro rows do not become a permanent gate. This pass starts no pull, scan, build or registry action.

  9. rmcdaniel commented on Nov 11, 2026

    @rmcdaniel
    MemberAuthor

    Triage 2026-11-11: no workflow scans the published native image for vulnerabilities; native-release.yml records provenance only. Next: add one pinned scanner step for the native amd64/arm64 index in native-release.yml and attach the report. Owner: server; Security owns finding dispositions.

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

    agent:serverkind:featureA public product capability or experience is requestedpriority:P2Normal-priority product workstatus:readyReady for implementation

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions