Skip to content

docs: document & VEX the residual upstream CVEs#49

Merged
maniator merged 1 commit into
mainfrom
security/document-residual-cves
Jun 20, 2026
Merged

docs: document & VEX the residual upstream CVEs#49
maniator merged 1 commit into
mainfrom
security/document-residual-cves

Conversation

@maniator

Copy link
Copy Markdown
Owner

Why

After the base-image patch merged, Docker Scout still flags 2 findings on maniator/gh:latest. Both are upstream and not fixable in this repo; this PR documents them transparently and provides a machine-readable VEX so scanners can suppress the non-applicable one.

The two findings

CVE Sev Why it's here Why we can't fix it
CVE-2025-15558 High github.com/docker/cli compiled into the upstream gh binary Windows-only privesc via C:\ProgramData\Docker\cli-plugins — that path can't exist on our linux/* images. Marked not_affected (vulnerable_code_not_in_execute_path) in openvex.json.
CVE-2025-60876 Medium busybox wget in the Alpine base No fixed busybox exists in any Alpine branch yet (incl. edge); apk upgrade already pulls the newest. Auto-clears on the nightly rebuild once Alpine patches.

What's added

  • SECURITY.md — reporting, hardening summary, and a tracked table of accepted residual findings (re-evaluated as upstream fixes land).
  • openvex.json — OpenVEX assertion that the image is not affected by CVE-2025-15558, consumable via trivy image --vex openvex.json maniator/gh:latest.

No code/Dockerfile change — these are docs + a security attestation.

🤖 Generated with Claude Code

The two findings Docker Scout reports on maniator/gh:latest are both upstream
and not fixable in this repo:

- CVE-2025-15558 (High): in github.com/docker/cli, compiled into the upstream
  gh binary. It's a Windows-only privilege escalation via a C:\ProgramData path
  that doesn't exist on our linux/* images -> asserted not_affected in
  openvex.json (vulnerable_code_not_in_execute_path).
- CVE-2025-60876 (Medium): busybox wget; no fixed package exists in any Alpine
  branch yet. apk upgrade already pulls the newest; auto-clears on the nightly
  rebuild once Alpine ships a patch.

SECURITY.md documents the hardening, the accepted residual findings, and how to
consume the VEX (`trivy image --vex openvex.json ...`).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings June 20, 2026 00:16
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, you can upgrade your account or add credits to your account and enable them for code reviews in your settings.

@maniator maniator merged commit a1b617f into main Jun 20, 2026
8 checks passed
@maniator maniator deleted the security/document-residual-cves branch June 20, 2026 00:17

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Pull request overview

This PR adds security-focused documentation and an OpenVEX attestation to explicitly track residual vulnerability scanner findings that are upstream/non-actionable for this Alpine-based maniator/gh image.

Changes:

  • Add SECURITY.md with vulnerability reporting guidance, hardening notes, and a table tracking accepted residual CVEs.
  • Add openvex.json with an OpenVEX statement asserting CVE-2025-15558 is not affected for the Linux-published image.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 4 comments.

File Description
SECURITY.md Documents reporting process, hardening approach, and a maintained list of residual upstream CVE findings.
openvex.json Provides a machine-readable OpenVEX assertion to suppress a Windows-only CVE as not applicable to Linux images.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread SECURITY.md

| CVE | Severity | Component | Status | Notes |
|-----|----------|-----------|--------|-------|
| [CVE-2025-15558](https://osv.dev/vulnerability/CVE-2025-15558) | High | `github.com/docker/cli`, compiled into the upstream `gh` binary | **Not affected (Linux)** | Windows-only privilege escalation via `C:\ProgramData\Docker\cli-plugins`; that path does not exist on these `linux/*` images, so the vulnerable code is not in the execute path. Asserted in [`openvex.json`](./openvex.json). Fixed upstream in `docker/cli` ≥ 29.2.0; the scanner finding clears when `gh` ships a release bumping its vendored `docker/cli`. |
Comment thread SECURITY.md
| CVE | Severity | Component | Status | Notes |
|-----|----------|-----------|--------|-------|
| [CVE-2025-15558](https://osv.dev/vulnerability/CVE-2025-15558) | High | `github.com/docker/cli`, compiled into the upstream `gh` binary | **Not affected (Linux)** | Windows-only privilege escalation via `C:\ProgramData\Docker\cli-plugins`; that path does not exist on these `linux/*` images, so the vulnerable code is not in the execute path. Asserted in [`openvex.json`](./openvex.json). Fixed upstream in `docker/cli` ≥ 29.2.0; the scanner finding clears when `gh` ships a release bumping its vendored `docker/cli`. |
| [CVE-2025-60876](https://security.alpinelinux.org/srcpkg/busybox) | Medium | `alpine/busybox` | **Affected — no upstream fix** | BusyBox `wget` request-splitting. No fixed `busybox` exists in any Alpine branch yet (incl. edge) — `apk upgrade` already pulls the newest available. Not exercised at runtime by a `gh` container. Auto-clears via the nightly rebuild once Alpine publishes a patch. |
Comment thread openvex.json
@@ -0,0 +1,22 @@
{
"@context": "https://openvex.dev/ns/v0.2.0",
"@id": "https://github.com/maniator/gh/blob/main/openvex.json",
Comment thread openvex.json
],
"status": "not_affected",
"justification": "vulnerable_code_not_in_execute_path",
"impact_statement": "CVE-2025-15558 is a Windows-only privilege escalation via C:\\ProgramData\\Docker\\cli-plugins, in the github.com/docker/cli module compiled into the upstream gh binary. maniator/gh publishes only linux/* images, where that path does not exist and the Windows plugin-lookup code cannot execute."
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.

2 participants