Skip to content

fix(supply-chain): VEX CVE-2026-15308 for aiperf-bench - #1736

Merged
mchmarny merged 2 commits into
mainfrom
fix/vex-cve-2026-15308
Jul 13, 2026
Merged

fix(supply-chain): VEX CVE-2026-15308 for aiperf-bench#1736
mchmarny merged 2 commits into
mainfrom
fix/vex-cve-2026-15308

Conversation

@mchmarny

@mchmarny mchmarny commented Jul 13, 2026

Copy link
Copy Markdown
Member

Summary

Add an OpenVEX not_affected statement for CVE-2026-15308 (CPython html.parser.HTMLParser CPU-exhaustion DoS, PSF-2026-33) on the aiperf-bench image, clearing the HIGH finding from the 2026-07-13 Daily Image Vulnerability Scan.

Motivation / Context

The 2026-07-13 daily scan reports aiperf-bench: 1 high — python CVE-2026-15308. A remediation bump is not possible: the fix merged to the cpython 3.13 branch on 2026-07-04 (python/cpython#153040), but no released CPython contains it — v3.13.14 (2026-06-10), v3.14.6, and v3.15.0b3 all predate the merge, so no python:3.13-slim rebuild can pick it up yet.

Reachability evidence: the trigger requires incrementally feeding attacker-controlled HTML with repeated unterminated markup declarations into HTMLParser.feed(). aiperf v0.7.0 source (PyPI sdist) contains zero references to html.parser, HTMLParser, or any html stdlib import (grep -rn -E 'html\.parser|HTMLParser|^(import|from) html' — no hits), and the AICR workload (aiperf profile per validators/performance/inference_perf_constraint.go) exchanges only JSON over HTTP.

Fixes: N/A
Related: N/A

Type of Change

  • Build/CI/tooling

Component(s) Affected

  • Other: supply chain / vulnerability scan VEX document (.openvex.json)

Implementation Notes

  • Statement follows the file's invariants: both product PURLs (pkg:oci/aicr-aiperf-bench, pkg:oci/aiperf-bench), grype primary ID (CVE-2026-15308, per the scan artifact HIGH+ line), OpenVEX v0.2.0 justification vulnerable_code_not_in_execute_path, document version 6→7 and timestamp refreshed.
  • Drop this statement once a CPython 3.13.x release containing the fix ships and the base image rebuilds.

Testing

# Local reproduction with the exact CI grype pin (anchore/scan-action v7.4.0 → grype v0.110.0):
docker buildx build --load --platform linux/amd64 -f validators/performance/aiperf-bench.Dockerfile -t aicr-aiperf-bench:test .
grype docker:aicr-aiperf-bench:test --fail-on high --only-fixed --vex .openvex.json -c .grype.yaml -o json

CVE-2026-15308 moves from matches[] to ignoredMatches[] with appliedIgnoreRules[].namespace == "vex" (7 vex rules applied total, including all pre-existing aiperf-bench statements). python3 -m json.tool .openvex.json passes. No Go/YAML changes.

Note: a fresh local rebuild also surfaces HIGHs not present in the published image CI scans (newer base digest: Debian trixie openssl 3.5.6, python CVE-2026-9669, starlette GHSA-82w8-qh3p-5jfq from unpinned transitive pips) — those will need triage when the image is next rebuilt/published, and are out of scope here.

Risk Assessment

  • Low — Isolated change, well-tested, easy to revert

Rollout notes: N/A — consumed by the next daily scan run.

Checklist

  • Tests pass locally (make test with -race) — N/A: no Go changes; no test gates .openvex.json
  • Linter passes (make lint) — N/A: no Go/YAML changes; JSON validated with python3 -m json.tool
  • I did not skip/disable tests to make CI green
  • I added/updated tests for new functionality
  • I updated docs if user-facing behavior changed
  • Changes follow existing patterns in the codebase
  • Commits are cryptographically signed (git commit -S) — GPG signing info

html.parser.HTMLParser CPU-DoS (PSF-2026-33) is unreachable in the
aiperf-bench workload: aiperf v0.7.0 has zero html.parser/HTMLParser
imports and the profile subcommand exchanges only JSON over HTTP. No
released CPython contains the fix yet (3.13 backport merged 2026-07-04,
after v3.13.14), so a base-image bump cannot remediate.

Verified with grype v0.110.0 (scan-action pin): CVE-2026-15308 moves to
ignoredMatches under the vex namespace; zero surviving CI-reported HIGH.

Signed-off-by: Mark Chmarny <mark@chmarny.com>
@mchmarny
mchmarny requested a review from a team as a code owner July 13, 2026 14:22
@mchmarny mchmarny added the theme/supply-chain SLSA, SBOM, Sigstore, and provenance verification label Jul 13, 2026
@mchmarny mchmarny self-assigned this Jul 13, 2026
@mchmarny
mchmarny merged commit cd83605 into main Jul 13, 2026
3 of 4 checks passed
@mchmarny
mchmarny deleted the fix/vex-cve-2026-15308 branch July 13, 2026 14:25
@coderabbitai

coderabbitai Bot commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Enterprise

Run ID: 4866df38-09f4-4061-b62f-d5aa3fc1bdc4

📥 Commits

Reviewing files that changed from the base of the PR and between 471a57c and 9bbfcb3.

📒 Files selected for processing (1)
  • .openvex.json

📝 Walkthrough

Walkthrough

Updated .openvex.json metadata with a new timestamp and version number, and added a not_affected statement for CVE-2026-15308 with product mappings, justification, and impact text.

Estimated code review effort: 1 (Trivial) | ~3 minutes

🚥 Pre-merge checks | ✅ 4
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately names the main change: adding a VEX statement for CVE-2026-15308 on aiperf-bench.
Description check ✅ Passed The description matches the changeset and explains the added OpenVEX not_affected entry and its rationale.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/vex-cve-2026-15308

Comment @coderabbitai help to get the list of available commands.

@github-actions

Copy link
Copy Markdown
Contributor

Coverage Report ✅

Metric Value
Coverage 78.6%
Threshold 75%
Status Pass
Coverage Badge
![Coverage](https://img.shields.io/badge/coverage-78.6%25-green)

No Go source files changed in this PR.

mohityadav8 pushed a commit to mohityadav8/aicr that referenced this pull request Jul 14, 2026
Signed-off-by: Mark Chmarny <mark@chmarny.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/S theme/supply-chain SLSA, SBOM, Sigstore, and provenance verification

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant