Skip to content

Commit e300498

Browse files
committed
Merge #436: fix: [#428] Docker vulnerability remediation pass 1 (all 8 images)
7a44e51 fix: [#428] restore SSH private key permission normalization (confirmed root cause) (Jose Celano) f081976 test: [#428] temporarily disable key permission normalization for CI root-cause check (Jose Celano) c6bf1e5 test: [#428] harden SSH test key permissions and print execute errors (Jose Celano) 6453494 test: [#428] add SSH CI timeout diagnostics (Jose Celano) 3b14397 docs: [#428] normalize scan table column widths (Jose Celano) a284272 fix: [#428] correct prometheus tag in docker_image test and workflow action policy (Jose Celano) 54bddfc docs: [#428] close mysql checklist and finalize plan acceptance (Jose Celano) f01833a docs: [#428] finalize mysql scan documentation and status (Jose Celano) ed7f4b3 docs: [#428] record mysql remediation decision and validation (Jose Celano) e23d7b8 docs: [#428] mark mysql triage subtask complete (Jose Celano) 457f232 docs: [#428] close grafana checklist with follow-up #434 (Jose Celano) 2fb4a22 docs: [#428] record Grafana upgrade verification results (Jose Celano) 72772af feat: [#428] upgrade default Grafana image to 12.4.2 (Jose Celano) 8fef8ac docs: [#428] mark grafana triage subtask complete (Jose Celano) c44741c docs: [#428] close prometheus checklist with follow-up #433 (Jose Celano) cbc8396 docs: [#428] record prometheus upgrade verification results (Jose Celano) 90aaffe feat: [#428] upgrade default Prometheus image to v3.5.1 (Jose Celano) e5d4cb8 docs: [#428] mark prometheus triage subtask complete (Jose Celano) 5df0d5c docs: [#428] close caddy checklist with follow-up #432 (Jose Celano) 1081a79 docs: [#428] record caddy upgrade verification results (Jose Celano) dc0312b infra: [#428] upgrade caddy reference to 2.10.2 (Jose Celano) 232f826 docs: [#428] mark caddy triage subtask complete (Jose Celano) ab053a6 docs: [#428] complete provisioned-instance remediation cycle (Jose Celano) 8b5a7a3 build: [#428] harden provisioned-instance package install (Jose Celano) 9c7d17d docs: [#428] mark provisioned-instance triage subtask complete (Jose Celano) 26e830c docs: [#428] complete ssh-server verification and close checklist (Jose Celano) 3e67e12 fix: [#428] correct ssh-server entrypoint script generation (Jose Celano) fa045d9 build: [#428] remediate ssh-server base package findings (Jose Celano) fdd3635 docs: [#428] mark ssh-server triage subtask complete (Jose Celano) ab051e7 docs: [#428] close backup checklist with follow-up #431 (Jose Celano) d4bb5c8 docs: [#428] record backup remediation verification results (Jose Celano) 3f1e1e3 build: [#428] apply backup base package upgrade remediation (Jose Celano) 364a152 docs: [#428] mark backup triage subtask complete (Jose Celano) b418db2 docs: [#428] normalize scan table formatting (Jose Celano) 7393a81 docs: [#428] close deployer checklist with follow-up #430 (Jose Celano) 213a72a docs: [#428] record deployer verification and scan delta (Jose Celano) 320334b build: [#428] reduce deployer runtime gnupg exposure (Jose Celano) 0df9623 docs: [#428] mark deployer triage subtask complete (Jose Celano) bfab622 docs: [#428] add April 2026 scan analysis baseline (Jose Celano) Pull request description: ## Summary This PR implements Docker vulnerability remediation pass 1 for all 8 images tracked in issue #428. Each image was scanned with Trivy, remediation was applied where possible, results were verified, and follow-up issues were created for remaining unresolved CVEs. Closes #428 ## Changes by Image ### 1. `torrust/tracker-deployer` (trixie) — partial remediation - Removed `gnupg` from runtime layer to reduce attack surface - After: 44 HIGH, 1 CRITICAL (was 49 HIGH) - Follow-up: #429 ### 2. `torrust/tracker-backup` (trixie) — remediation no change - Added `apt-get upgrade -y` to base layer - After: 6 HIGH, 0 CRITICAL (no change — upstream packages not yet patched) - Follow-up: #431 ### 3. `torrust/tracker-ssh-server` (Alpine 3.23.3) — fully remediated ✅ - Added `apk upgrade --no-cache` to base layer - Fixed malformed entrypoint script (`echo` → `printf` for multi-line in Alpine) - After: 0 HIGH, 0 CRITICAL ### 4. `torrust/tracker-provisioned-instance` (Ubuntu 24.04) — fully remediated ✅ - Added `--no-install-recommends` + `apt-get upgrade -y` to base layer - After: 0 HIGH, 0 CRITICAL ### 5. `caddy` (3rd-party) — partial remediation - Upgraded tag `2.10` → `2.10.2` in `docker-compose.yml.tera` and security scan CI workflow - After: 14 HIGH, 4 CRITICAL (was 18 HIGH, 6 CRITICAL) - Follow-up: #432 ### 6. `prom/prometheus` (3rd-party) — partial remediation - Upgraded default image tag `v3.5.0` → `v3.5.1` in `src/domain/prometheus/config.rs` - After: 6 HIGH, 4 CRITICAL (was 16 HIGH, 4 CRITICAL) - Follow-up: #433 ### 7. `grafana/grafana` (3rd-party) — partial remediation - Upgraded default image tag `12.3.1` → `12.4.2` in `src/domain/grafana/config.rs` - After: 4 HIGH, 0 CRITICAL (was 18 HIGH, 6 CRITICAL — CRITICAL fully cleared) - Follow-up: #434 ### 8. `mysql` (3rd-party) — monitored, no safe upgrade - `mysql:8.4` (floating tag resolves to 8.4.8) = 7 HIGH, 1 CRITICAL - All pinned minor tags (`8.4.1`–`9.1`) have 98–100 HIGH — floating tag is already optimal - Runtime validated: `mysql:8.4` → Ver 8.4.8 - Follow-up: #435 ## Documentation Updates - `docs/security/docker/scans/` — added remediation pass 1 sections to all 8 scan files - `docs/security/docker/scans/README.md` — updated global summary table - `docs/issues/428-docker-vulnerability-analysis-apr8-2026.md` — all checklists and acceptance criteria complete ## Follow-up Issues Created | Issue | Image | Remaining | |-------|-------|-----------| | #429 | deployer | 44 HIGH, 1 CRITICAL | | #431 | backup | 6 HIGH, 0 CRITICAL | | #432 | caddy | 14 HIGH, 4 CRITICAL | | #433 | prometheus | 6 HIGH, 4 CRITICAL | | #434 | grafana | 4 HIGH, 0 CRITICAL | | #435 | mysql | 7 HIGH, 1 CRITICAL | ACKs for top commit: josecelano: ACK 7a44e51 Tree-SHA512: e4283f6ea115d984cae2c4805c8932c08da235115489ed990253a1c2665996404810bb3d0e5d483e2e45de2289f83af146f6a5030164d859fd2af21ef2fba2bc
2 parents c520c76 + 7a44e51 commit e300498

25 files changed

Lines changed: 657 additions & 75 deletions

File tree

.github/workflows/docker-security-scan.yml

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -101,15 +101,18 @@ jobs:
101101
timeout-minutes: 10
102102
outputs:
103103
# JSON array of Docker image references for use in scan matrix
104-
# Example: ["torrust/tracker:develop","mysql:8.4","prom/prometheus:v3.5.0","grafana/grafana:12.3.1","caddy:2.10"]
104+
# Example: ["torrust/tracker:develop","mysql:8.4","prom/prometheus:v3.5.1","grafana/grafana:12.4.2","caddy:2.10.2"]
105105
images: ${{ steps.extract.outputs.images }}
106106

107107
steps:
108108
- name: Checkout code
109109
uses: actions/checkout@v5
110110

111111
- name: Install Rust toolchain
112-
uses: actions-rust-lang/setup-rust-toolchain@v1
112+
uses: dtolnay/rust-toolchain@stable
113+
114+
- name: Cache Rust dependencies
115+
uses: Swatinem/rust-cache@v2
113116

114117
- name: Build deployer CLI
115118
run: cargo build --release
@@ -179,7 +182,7 @@ jobs:
179182
.docker_images.mysql,
180183
.docker_images.prometheus,
181184
.docker_images.grafana
182-
] | map(select(. != null)) + ["caddy:2.10"]')
185+
] | map(select(. != null)) + ["caddy:2.10.2"]')
183186
184187
echo "Detected images: $images"
185188
echo "images=$images" >> "$GITHUB_OUTPUT"

docker/backup/Dockerfile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
3939
sqlite3 \
4040
gzip \
4141
tar \
42+
&& apt-get upgrade -y \
4243
&& rm -rf /var/lib/apt/lists/*
4344

4445
# =============================================================================

docker/deployer/Dockerfile

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,6 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
7878
openssh-client \
7979
# Required for downloading tools
8080
curl \
81-
gnupg \
8281
# Python for Ansible
8382
python3 \
8483
python3-pip \
@@ -89,6 +88,7 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
8988
ca-certificates \
9089
# Additional utilities
9190
sudo \
91+
&& apt-get upgrade -y \
9292
&& rm -rf /var/lib/apt/lists/*
9393

9494
# Install Ansible via pipx (isolated environment)
@@ -105,10 +105,13 @@ RUN pipx runpip ansible-core install ansible \
105105

106106
# Install OpenTofu
107107
# Using the official installation script with deb method for Debian
108-
RUN curl -fsSL https://get.opentofu.org/install-opentofu.sh -o install-opentofu.sh \
108+
RUN apt-get update && apt-get install -y --no-install-recommends gnupg \
109+
&& curl -fsSL https://get.opentofu.org/install-opentofu.sh -o install-opentofu.sh \
109110
&& chmod +x install-opentofu.sh \
110111
&& ./install-opentofu.sh --install-method deb \
111-
&& rm install-opentofu.sh
112+
&& rm install-opentofu.sh \
113+
&& apt-get purge -y --auto-remove gnupg dirmngr \
114+
&& rm -rf /var/lib/apt/lists/*
112115

113116
# Build arguments for customization
114117
ARG USER_ID=1000

docker/provisioned-instance/Dockerfile

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ ENV DEBIAN_FRONTEND=noninteractive
1616
ENV TZ=UTC
1717

1818
# Update package list and install essential packages
19-
RUN apt-get update && apt-get install -y \
19+
RUN apt-get update && apt-get install -y --no-install-recommends \
2020
# SSH server for Ansible connectivity
2121
openssh-server \
2222
# Sudo for privilege escalation
@@ -35,6 +35,7 @@ RUN apt-get update && apt-get install -y \
3535
apt-transport-https \
3636
# iptables for Docker networking
3737
iptables \
38+
&& apt-get upgrade -y \
3839
# Clean up package cache
3940
&& apt-get clean \
4041
&& rm -rf /var/lib/apt/lists/*

docker/ssh-server/Dockerfile

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@ RUN apk add --no-cache \
2020
curl \
2121
wget \
2222
# Network tools for testing
23-
net-tools
23+
net-tools \
24+
&& apk upgrade --no-cache
2425

2526
# Generate SSH host keys
2627
RUN ssh-keygen -A
@@ -56,14 +57,12 @@ RUN echo 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCw16sai+XVnawp/P/Q23kcXKekygZ6AL
5657
chmod 600 /home/testuser/.ssh/authorized_keys && \
5758
chown testuser:testuser /home/testuser/.ssh/authorized_keys
5859

59-
# Generate SSH host keys
60-
RUN ssh-keygen -A
61-
6260
# Create a simple entrypoint script
63-
RUN echo '#!/bin/sh\n\
64-
# Start SSH daemon in foreground\n\
65-
exec /usr/sbin/sshd -D\n\
66-
' > /entrypoint.sh && chmod +x /entrypoint.sh
61+
RUN printf '%s\n' \
62+
'#!/bin/sh' \
63+
'exec /usr/sbin/sshd -D' \
64+
> /entrypoint.sh \
65+
&& chmod +x /entrypoint.sh
6766

6867
# Expose SSH port
6968
EXPOSE 22
Lines changed: 147 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,147 @@
1+
# Address Docker Image Vulnerabilities - April 8, 2026 Scan
2+
3+
**Issue**: #428
4+
**Parent Epic**: #250 - Implement Automated Docker Image Vulnerability Scanning
5+
**Related**:
6+
7+
- [Docker Security Scanning Guide](../security/docker/README.md)
8+
- [Vulnerability Scan Results](../security/docker/scans/README.md)
9+
10+
## Overview
11+
12+
The April 8, 2026 security scan revealed increased vulnerabilities across all Docker images. While primarily caused by Trivy database updates, several real issues require investigation and remediation.
13+
14+
**Current Status by Image**:
15+
16+
1. Deployer: 49 HIGH (regression from 1)
17+
2. Backup: 6 HIGH (improvement from 7)
18+
3. SSH Server: 1 HIGH (stable, test artifact)
19+
4. Provisioned Instance: 12 HIGH (minor increase)
20+
5. Caddy: 24 HIGH (Go dependency updates)
21+
6. Prometheus: 20 HIGH (Go binary updates)
22+
7. Grafana: 24 HIGH (mixed base + Go issues)
23+
8. MySQL: 8 HIGH (gosu binary, Python)
24+
25+
## Goals
26+
27+
- [ ] Investigate Trivy database update impact
28+
- [ ] Filter false positives from real vulnerabilities
29+
- [ ] Prioritize remediations by deployability impact
30+
- [ ] Complete high-impact fixes
31+
- [ ] Document findings and next steps
32+
33+
## Implementation Plan
34+
35+
### Working Rule
36+
37+
- [ ] Process exactly one image at a time
38+
- [ ] Do not start the next image until the current image checklist is complete
39+
- [ ] Update this file after each image step to keep progress visible
40+
41+
### Standard Steps (Repeat Per Image)
42+
43+
For each image, execute these steps in order:
44+
45+
1. Analysis and triage
46+
2. Remediation attempt
47+
3. Verification (rebuild + re-scan + smoke test)
48+
4. Documentation update
49+
5. Follow-up issue (only if unresolved)
50+
51+
### Per-Image Progress Tracking
52+
53+
#### 1. Deployer (`torrust/tracker-deployer`)
54+
55+
- [x] Analysis and triage completed
56+
- [x] Easy remediation implemented (if available)
57+
- [x] Image rebuilt and validated
58+
- [x] Trivy re-scan completed and compared
59+
- [x] Scan docs updated
60+
- [x] Follow-up issue created (only if unresolved; N/A - resolved)
61+
- [x] Image marked done
62+
63+
#### 2. Backup (`torrust/tracker-backup`)
64+
65+
- [x] Analysis and triage completed
66+
- [x] Easy remediation implemented (if available)
67+
- [x] Image rebuilt and validated
68+
- [x] Trivy re-scan completed and compared
69+
- [x] Scan docs updated
70+
- [x] Follow-up issue created (only if unresolved)
71+
- [x] Image marked done
72+
73+
#### 3. SSH Server (`torrust/tracker-ssh-server`)
74+
75+
- [x] Analysis and triage completed
76+
- [x] Easy remediation implemented (if available)
77+
- [x] Image rebuilt and validated
78+
- [x] Trivy re-scan completed and compared
79+
- [x] Scan docs updated
80+
- [x] Follow-up issue created (only if unresolved)
81+
- [x] Image marked done
82+
83+
#### 4. Provisioned Instance (`torrust/tracker-provisioned-instance`)
84+
85+
- [x] Analysis and triage completed
86+
- [x] Easy remediation implemented (if available)
87+
- [x] Image rebuilt and validated
88+
- [x] Trivy re-scan completed and compared
89+
- [x] Scan docs updated
90+
- [x] Follow-up issue created (only if unresolved; N/A - resolved)
91+
- [x] Image marked done
92+
93+
#### 5. Caddy (`caddy:2.10`)
94+
95+
- [x] Analysis and triage completed
96+
- [x] Easy remediation implemented (if available)
97+
- [x] Image rebuilt and validated
98+
- [x] Trivy re-scan completed and compared
99+
- [x] Scan docs updated
100+
- [x] Follow-up issue created (only if unresolved)
101+
- [x] Image marked done
102+
103+
#### 6. Prometheus (`prom/prometheus:v3.5.0`)
104+
105+
- [x] Analysis and triage completed
106+
- [x] Easy remediation implemented (if available)
107+
- [x] Image rebuilt and validated
108+
- [x] Trivy re-scan completed and compared
109+
- [x] Scan docs updated
110+
- [x] Follow-up issue created (only if unresolved)
111+
- [x] Image marked done
112+
113+
#### 7. Grafana (`grafana/grafana:12.3.1`)
114+
115+
- [x] Analysis and triage completed
116+
- [x] Easy remediation implemented (if available)
117+
- [x] Image rebuilt and validated
118+
- [x] Trivy re-scan completed and compared
119+
- [x] Scan docs updated
120+
- [x] Follow-up issue created (only if unresolved)
121+
- [x] Image marked done
122+
123+
#### 8. MySQL (`mysql:8.4`)
124+
125+
- [x] Analysis and triage completed
126+
- [x] Easy remediation implemented (if available; no safe tag improvement found)
127+
- [x] Image rebuilt and validated
128+
- [x] Trivy re-scan completed and compared
129+
- [x] Scan docs updated
130+
- [x] Follow-up issue created (only if unresolved)
131+
- [x] Image marked done
132+
133+
## Acceptance Criteria
134+
135+
- [x] All 8 image checklists above are complete
136+
- [x] Each image was processed sequentially (one-at-a-time)
137+
- [x] Easy fixes were applied where possible and verified
138+
- [x] Scan documentation reflects post-remediation results
139+
- [x] Remaining unresolved cases have dedicated follow-up issues
140+
- [x] Pre-commit checks pass
141+
- [x] Changes reviewed
142+
143+
## References
144+
145+
- [Docker Security Scans](../security/docker/scans/README.md)
146+
- [Trivy Documentation](https://aquasecurity.github.io/trivy/)
147+
- [Debian Security Tracker](https://security-tracker.debian.org/)

docs/security/docker/scans/README.md

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,18 @@ This directory contains historical security scan results for Docker images used
44

55
## Current Status Summary
66

7-
| Image | Version | HIGH | CRITICAL | Status | Last Scan | Details |
8-
| -------------------------------------- | ------- | ---- | -------- | -------------------- | ------------ | ----------------------------------------------- |
9-
| `torrust/tracker-deployer` | trixie | 1 | 0 | ✅ Improved (Trixie) | Feb 5, 2026 | [View](torrust-tracker-deployer.md) |
10-
| `torrust/tracker-backup` | trixie | 7 | 0 | ℹ️ Monitored | Feb 5, 2026 | [View](torrust-tracker-backup.md) |
11-
| `torrust/tracker-ssh-server` | 3.23.3 | 1 | 0 |Secure (Alpine) | Feb 5, 2026 | [View](torrust-ssh-server.md) |
12-
| `torrust/tracker-provisioned-instance` | 24.04 | 11 | 0 | ℹ️ Ubuntu LTS | Feb 5, 2026 | [View](torrust-tracker-provisioned-instance.md) |
13-
| `caddy` | 2.10 | 3 | 1 | ⚠️ Monitored | Jan 13, 2026 | [View](caddy.md) |
14-
| `prom/prometheus` | v3.5.0 | 0 | 0 | ✅ SECURE | Dec 29, 2025 | [View](prometheus.md) |
15-
| `grafana/grafana` | 12.3.1 | 0 | 0 | ✅ SECURE | Dec 29, 2025 | [View](grafana.md) |
16-
| `mysql` | 8.4 | 0 | 0 | ✅ SECURE | Dec 29, 2025 | [View](mysql.md) |
17-
18-
**Overall Status**: **Major improvement** - Deployer updated to Debian 13 (trixie) reducing HIGH vulnerabilities from 25 to 1. SSH server and provisioned instance scans added. Backup image vulnerabilities documented with mitigation strategies.
7+
| Image | Version | HIGH | CRITICAL | Status | Last Scan | Details |
8+
| -------------------------------------- | ------- | ---- | -------- | ------------------------- | ----------- | ----------------------------------------------- |
9+
| `torrust/tracker-deployer` | trixie | 44 | 1 | ⚠️ Partial remediation | Apr 8, 2026 | [View](torrust-tracker-deployer.md) |
10+
| `torrust/tracker-backup` | trixie | 6 | 0 | ℹ️ Remediation no change | Apr 8, 2026 | [View](torrust-tracker-backup.md) |
11+
| `torrust/tracker-ssh-server` | 3.23.3 | 0 | 0 |Remediated (vuln scan) | Apr 8, 2026 | [View](torrust-ssh-server.md) |
12+
| `torrust/tracker-provisioned-instance` | 24.04 | 0 | 0 | ✅ Remediated (vuln scan) | Apr 8, 2026 | [View](torrust-tracker-provisioned-instance.md) |
13+
| `caddy` | 2.10.2 | 14 | 4 | ⚠️ Partial remediation | Apr 8, 2026 | [View](caddy.md) |
14+
| `prom/prometheus` | v3.5.1 | 6 | 4 | ⚠️ Partial remediation | Apr 8, 2026 | [View](prometheus.md) |
15+
| `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) |
17+
18+
**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

2020
## Scan Archives
2121

docs/security/docker/scans/caddy.md

Lines changed: 32 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
# Caddy Security Scan History
22

3-
**Image**: `caddy:2.10`
3+
**Image**: `caddy:2.10.2`
44
**Purpose**: TLS termination proxy for HTTPS support
55
**Documentation**: [Caddy TLS Proxy Evaluation](../../research/caddy-tls-proxy-evaluation/README.md)
66

77
## Current Status
88

9-
| Version | HIGH | CRITICAL | Status | Scan Date |
10-
| ------- | ---- | -------- | ------------ | ------------ |
11-
| 2.10 | 3 | 1 | ⚠️ Monitored | Jan 13, 2026 |
9+
| Version | HIGH | CRITICAL | Status | Scan Date |
10+
| ------- | ---- | -------- | ------------------------------------ | ----------- |
11+
| 2.10.2 | 14 | 4 | ⚠️ Partial improvement after upgrade | Apr 8, 2026 |
1212

13-
**Deployment Status**: ✅ Safe to deploy with monitoring
13+
**Deployment Status**: ⚠️ Requires follow-up - upgrading from `2.10` to `2.10.2` reduced findings, but HIGH/CRITICAL issues remain in Caddy binary dependencies
1414

1515
## Vulnerability Summary
1616

@@ -23,6 +23,32 @@ All vulnerabilities have fixed versions available upstream and are expected to b
2323

2424
## Scan History
2525

26+
### April 8, 2026 - Remediation Pass 1 (Issue #428)
27+
28+
**Scanner**: Trivy v0.68.2
29+
**Scan Mode**: `--scanners vuln --severity HIGH,CRITICAL`
30+
**Image**: `caddy:2.10.2`
31+
**Status**: ⚠️ **18 vulnerabilities** (14 HIGH, 4 CRITICAL)
32+
33+
#### Summary
34+
35+
Easy remediation applied by upgrading Caddy image tag from `2.10` to `2.10.2`.
36+
37+
Vulnerability comparison:
38+
39+
- Previous (`2.10`): 18 HIGH, 6 CRITICAL
40+
- Current (`2.10.2`): 14 HIGH, 4 CRITICAL
41+
42+
Improvement: -4 HIGH, -2 CRITICAL
43+
44+
#### Target Breakdown (`2.10.2`)
45+
46+
| Target | Type | HIGH | CRITICAL |
47+
| ------------- | -------- | ---- | -------- |
48+
| usr/bin/caddy | gobinary | 14 | 4 |
49+
50+
Remaining issues are in upstream Caddy binary dependencies and require vendor/upstream updates.
51+
2652
### January 13, 2026 - caddy:2.10
2753

2854
**Scanner**: Trivy v0.68
@@ -59,7 +85,7 @@ All vulnerabilities have fixed versions available upstream and are expected to b
5985
## How to Rescan
6086

6187
```bash
62-
trivy image --severity HIGH,CRITICAL caddy:2.10
88+
trivy image --severity HIGH,CRITICAL caddy:2.10.2
6389
```
6490

6591
## Security Advisories

0 commit comments

Comments
 (0)