Skip to content

Commit 8e0b4e8

Browse files
committed
Merge #456: docs: [#435] document mysql:8.4 CVE analysis and accepted risk
0ece6d4 docs: [#435] align table columns in mysql scan doc (Jose Celano) dc2049e docs: [#435] document mysql:8.4 CVE analysis and accepted risk (gosu Go stdlib) (Jose Celano) Pull request description: ## Summary Re-scan of `mysql:8.4` as requested in issue #435. **No code change** — `mysql:8.4` is a floating tag (no version constant to update). ## Findings (Apr 15, 2026 — Trivy v0.69.3) | Image | Resolves to | HIGH | CRITICAL | |-------------|-------------|------|----------| | `mysql:8.4` | `8.4.8` | 9 | 1 | | `mysql:9.6` | `9.6.0` | 9 | 1 | The floating tag still resolves to **8.4.8** (same digest as Apr 8 baseline). The CVE count moved from 7H+1C → 9H+1C due to Trivy DB updates only; no new MySQL release was shipped. All vulnerabilities are in **helper components only** — not MySQL Server core: - `gosu v1.24.6` (Go stdlib): 7 HIGH + 1 CRITICAL - CRITICAL: CVE-2025-68121 — crypto/tls cert validation during TLS resumption (fix: Go ≥ 1.24.13) - MySQL Shell Python packages: 2 HIGH (`cryptography`, `pyOpenSSL`) ## mysql:9.x Assessment `mysql:9.6` (latest Innovation Release, 2026-04-14) has an **identical CVE profile**: same `gosu v1.24.6` and same Python packages → no security benefit to switching. Additionally, `mysql:9.x` is a non-LTS Innovation Release with a shorter lifecycle vs `mysql:8.4` (LTS until Apr 2032). ## Decision **Accepted risk — close #435.** - No viable upgrade path exists (same CVEs across all tags) - CVEs are in `gosu` helper and mysqlsh tools, not MySQL server - Fix requires MySQL upstream to ship new image with `gosu` rebuilt on Go ≥ 1.24.13 - Revisit when `mysql:8.4.9` or later is released ## Changes - `docs/security/docker/scans/mysql.md` — new Remediation Pass 2 history entry with full CVE tables - `docs/security/docker/scans/README.md` — updated mysql row (9H+1C, Apr 15) - `docs/issues/435-mysql-cves.md` — checked off steps, filled Outcome section - `project-words.txt` — added `DTLS`, `mysqlsh`, `syscall` Closes #435 ACKs for top commit: josecelano: ACK 0ece6d4 Tree-SHA512: f145a698e60dcba17900c40cb0acd8209117f6e49aa4c6f72958869098744604341fc566f36315b340a3b905bdfcc3bf37ffa87da48625b6f078e87d27528586
2 parents 49f24b4 + 0ece6d4 commit 8e0b4e8

4 files changed

Lines changed: 84 additions & 16 deletions

File tree

docs/issues/435-mysql-cves.md

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -24,25 +24,24 @@ the best available option.
2424

2525
## Steps
2626

27-
- [ ] Pull and scan the current floating tag:
27+
- [x] Pull and scan the current floating tag:
2828
`docker pull mysql:8.4 && trivy image --severity HIGH,CRITICAL mysql:8.4`
29-
- [ ] Check which patch the floating tag currently resolves to:
29+
- [x] Check which patch the floating tag currently resolves to:
3030
`docker inspect mysql:8.4 | grep -i version`
31-
- [ ] Compare results against the 8.4.8 baseline in
31+
- [x] Compare results against the 8.4.8 baseline in
3232
`docs/security/docker/scans/mysql.md`
33-
- [ ] Check if `mysql:9.x` is now a viable option for the deployer (compatibility,
33+
- [x] Check if `mysql:9.x` is now a viable option for the deployer (compatibility,
3434
LTS status):
3535
<https://hub.docker.com/_/mysql>
3636
- [ ] **If CVE count has dropped**: update the scan doc; post comment; close #435
37-
- [ ] **If still 7 HIGH / 1 CRITICAL with no viable upgrade path**: post comment
37+
- [x] **If still 7 HIGH / 1 CRITICAL with no viable upgrade path**: post comment
3838
documenting accepted risk (helper components, not MySQL core); close #435
3939

4040
## Outcome
4141

42-
<!-- Fill in after doing the work -->
43-
44-
- Date:
45-
- Floating tag resolves to:
46-
- Findings (HIGH / CRITICAL):
47-
- Decision: accepted risk / upgrade to mysql:9.x
48-
- Comment/PR:
42+
- Date: Apr 15, 2026
43+
- Floating tag resolves to: `8.4.8` (unchanged from Apr 8 baseline)
44+
- Previous findings (Apr 8, HIGH / CRITICAL): 7 HIGH / 1 CRITICAL
45+
- Current findings (Apr 15, HIGH / CRITICAL): 9 HIGH / 1 CRITICAL (Trivy DB update; same image digest)
46+
- mysql:9.6 (latest Innovation Release): identical CVE profile — 9 HIGH / 1 CRITICAL
47+
- Decision: **accepted risk** — all CVEs in `gosu` helper binary and MySQL Shell Python tools, not MySQL Server core. No viable upgrade path. Requires MySQL upstream to ship updated `gosu` on Go ≥ 1.24.13.

docs/security/docker/scans/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ This directory contains historical security scan results for Docker images used
1313
| `caddy` | 2.11.2 | 10 | 2 | ⚠️ Partial remediation | Apr 15, 2026 | [View](caddy.md) |
1414
| `prom/prometheus` | v3.11.2 | 4 | 0 | ✅ Remediated | Apr 14, 2026 | [View](prometheus.md) |
1515
| `grafana/grafana` | 12.4.2 | 4 | 0 | ⚠️ Partial remediation | Apr 8, 2026 | [View](grafana.md) |
16-
| `mysql` | 8.4 | 7 | 1 | ⚠️ Monitored | Apr 8, 2026 | [View](mysql.md) |
16+
| `mysql` | 8.4 | 9 | 1 | ⚠️ Accepted risk (gosu) | Apr 15, 2026 | [View](mysql.md) |
1717

1818
**Overall Status**: ⚠️ **CVE database update detected** - Most images still show increased vulnerability counts from previous scans (Feb-Dec 2025). Deployer has a first remediation pass applied (49 HIGH -> 44 HIGH, with 1 CRITICAL still open).
1919

docs/security/docker/scans/mysql.md

Lines changed: 69 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,78 @@ Security scan history for the `mysql` Docker image.
44

55
## Current Status
66

7-
| Version | HIGH | CRITICAL | Status | Last Scan | Support EOL |
8-
| ------- | ---- | -------- | ------------------------------------ | ----------- | ------------ |
9-
| 8.4 | 7 | 1 | ⚠️ Monitored (no safer easy upgrade) | Apr 8, 2026 | Apr 30, 2032 |
7+
| Version | HIGH | CRITICAL | Status | Last Scan | Support EOL |
8+
| ------- | ---- | -------- | ----------------------- | ------------ | ------------ |
9+
| 8.4 | 9 | 1 | ⚠️ Accepted risk (gosu) | Apr 15, 2026 | Apr 30, 2032 |
1010

1111
## Scan History
1212

13+
### April 15, 2026 - Remediation Pass 2 / Accepted Risk (Issue #435)
14+
15+
**Image**: `mysql:8.4` (resolves to `8.4.8`)
16+
**Trivy Version**: 0.69.3
17+
**Scan Mode**: `--scanners vuln --severity HIGH,CRITICAL`
18+
**Status**: ⚠️ **10 vulnerabilities** (9 HIGH, 1 CRITICAL)
19+
20+
#### Summary
21+
22+
Floating tag still resolves to `8.4.8` (unchanged from Apr 8 baseline). Vulnerability count
23+
increased from 7 HIGH + 1 CRITICAL to 9 HIGH + 1 CRITICAL due to Trivy DB updates only;
24+
no new MySQL release shipped.
25+
26+
A comparison scan of `mysql:9.6` (latest Innovation Release, shipped 2026-04-14) shows an
27+
**identical CVE profile** — same `gosu v1.24.6` Go binary and same Python packages:
28+
29+
| Version | HIGH | CRITICAL | Notes |
30+
| ------- | ---- | -------- | ------------------------------------- |
31+
| `8.4.8` | 9 | 1 | LTS, support EOL Apr 2032 |
32+
| `9.6` | 9 | 1 | Innovation Release, shorter lifecycle |
33+
34+
All CVEs are in helper components only:
35+
36+
| Target | HIGH | CRITICAL |
37+
| ------------------------- | ----- | -------- |
38+
| `mysql:8.4` (oracle 9.7) | 0 | 0 |
39+
| Python packages (mysqlsh) | 2 | 0 |
40+
| `usr/local/bin/gosu` | 7 | 1 |
41+
| **Total** | **9** | **1** |
42+
43+
**CVE details — Python packages (`cryptography 45.0.7`, `pyOpenSSL 25.1.0`):**
44+
45+
| CVE | Library | Severity | Status | Fixed Version | Title |
46+
| -------------- | ------------ | -------- | ------ | ------------- | ---------------------------------------------- |
47+
| CVE-2026-26007 | cryptography | HIGH | fixed | 46.0.5 | Subgroup attack due to missing SECT validation |
48+
| CVE-2026-27459 | pyOpenSSL | HIGH | fixed | 26.0.0 | DTLS cookie callback buffer overflow |
49+
50+
**CVE details — `gosu` (`stdlib v1.24.6`):**
51+
52+
| CVE | Severity | Status | Fixed Version | Title |
53+
| -------------- | -------- | ------ | --------------- | ------------------------------------------------------------- |
54+
| CVE-2025-68121 | CRITICAL | fixed | 1.24.13, 1.25.7 | crypto/tls: Incorrect certificate validation (TLS resumption) |
55+
| CVE-2025-58183 | HIGH | fixed | 1.24.8, 1.25.2 | archive/tar: Unbounded allocation in GNU sparse map |
56+
| CVE-2025-61726 | HIGH | fixed | 1.24.12, 1.25.6 | net/url: Memory exhaustion in query parameter parsing |
57+
| CVE-2025-61728 | HIGH | fixed | 1.24.12, 1.25.6 | archive/zip: Excessive CPU - building archive index |
58+
| CVE-2025-61729 | HIGH | fixed | 1.24.11, 1.25.5 | crypto/x509: DoS via excessive resource consumption |
59+
| CVE-2026-25679 | HIGH | fixed | 1.25.8, 1.26.1 | net/url: Incorrect parsing of IPv6 host literals |
60+
| CVE-2026-32280 | HIGH | fixed | 1.25.9, 1.26.2 | chain building: unbounded work amount |
61+
| CVE-2026-32282 | HIGH | fixed | 1.25.9, 1.26.2 | internal/syscall/unix: Root.Chmod can follow symlinks |
62+
63+
#### Decision
64+
65+
**Accepted risk — close issue #435.**
66+
67+
- No viable upgrade path: `mysql:9.6` (latest) has an identical CVE profile
68+
- All CVEs are in `gosu` (process privilege helper) and MySQL Shell Python packages —
69+
**not MySQL Server itself**
70+
- The CRITICAL (CVE-2025-68121, crypto/tls cert validation) is in `gosu`, not in any
71+
MySQL network-facing code path
72+
- `mysql:8.4` remains the correct choice: LTS with support until Apr 30, 2032
73+
- Fix requires MySQL upstream to release a new image with `gosu` rebuilt on Go ≥ 1.24.13
74+
75+
**Revisit**: When MySQL upstream ships `8.4.9` or later with updated `gosu`.
76+
77+
---
78+
1379
### April 8, 2026 - Remediation Pass 1 (Issue #428)
1480

1581
**Image**: `mysql:8.4`

project-words.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -441,6 +441,9 @@ sarif
441441
sarifs
442442
scannability
443443
SCEP
444+
DTLS
445+
mysqlsh
446+
syscall
444447
schemafile
445448
schemars
446449
scriptable

0 commit comments

Comments
 (0)