docs: Gate 1 for #0051 — the backlog is three piles, not one
Now that the pipeline sees the whole estate, the numbers in the issue are obsolete and the work decomposes. A hundred and fifteen critical findings in running images have a fix version and are an update exercise. Sixty-eight have none, concentrated on eight images, and each needs a decision with an expiry rather than a patch. Sixty-two sit on three build artefacts that run nowhere and are almost entirely unfixable — for those, remediation is the wrong answer; they belong out of the registry or out of the target set. Concentration matters for scoping: forty-one running images carry critical findings, but nineteen of them carry eighty percent. The pass is deliberately critical-first. Twenty-six hundred high findings in running images are a category, not an undertaking, and saying so belongs in the closeout rather than in a footnote.
This commit is contained in:
@@ -58,7 +58,7 @@ Bedeutung der Meilensteine: siehe [roadmap.md](roadmap.md).
|
||||
|
||||
| Issue | Priorität | Status | Title |
|
||||
|---|---|---|---|
|
||||
| [0051](docs/issues/0051-cve-remediation-pass.md) | high | open | CVE-Remediation-Pass: Schwachstellen-Report abarbeiten |
|
||||
| [0051](docs/issues/0051-cve-remediation-pass.md) | high | in-progress | CVE-Remediation-Pass: Schwachstellen-Report abarbeiten |
|
||||
| [0065](docs/issues/0065-gitops-25-k3s-api-security-hardening.md) | high | open | K3s API security hardening |
|
||||
| [0058](docs/issues/0058-gitops-14-web-application-firewall-waf.md) | medium | open | Web Application Firewall (WAF) |
|
||||
| [0059](docs/issues/0059-gitops-16-pod-security-admission-restricted.md) | medium | open | Pod Security Admission (Restricted) |
|
||||
@@ -82,9 +82,11 @@ Bedeutung der Meilensteine: siehe [roadmap.md](roadmap.md).
|
||||
| [0072](docs/issues/0072-gitops-34-dsgvo-datenschutz-compliance-konkretisieren.md) | low | open | DSGVO/Datenschutz-Compliance konkretisieren |
|
||||
|
||||
|
||||
## Active design docs (0)
|
||||
## Active design docs (1)
|
||||
|
||||
_none active_
|
||||
| Design | Gate | Title |
|
||||
|---|---|---|
|
||||
| [2026-08-21-cve-remediation](docs/design/2026-08-21-cve-remediation.md) | gate-1 | Design: Den CVE-Bestand abarbeiten (#0051) |
|
||||
|
||||
## ADRs (27)
|
||||
|
||||
|
||||
@@ -0,0 +1,118 @@
|
||||
---
|
||||
type: design
|
||||
status: gate-1
|
||||
date: 2026-08-21
|
||||
size: L
|
||||
related:
|
||||
- "docs/issues/0051-cve-remediation-pass.md"
|
||||
- "docs/issues/0106-cve-scan-deckt-nur-die-haelfte-zielliste-ist-handgepflegt.md"
|
||||
- "docs/adr/0026-pruefziele-werden-abgeleitet-nicht-gepflegt.md"
|
||||
---
|
||||
|
||||
# Design: Den CVE-Bestand abarbeiten (#0051)
|
||||
|
||||
## Gate 1 — Product
|
||||
|
||||
### Problem
|
||||
|
||||
Seit dem 2026-08-21 sieht die Pipeline den vollen Bestand (#0106, 100 % Deckung
|
||||
statt 52 %). Damit ist zum ersten Mal messbar, wie groß der Rückstand wirklich
|
||||
ist — und die Zahlen im Issue, die auf 29 Images beruhten, sind überholt.
|
||||
|
||||
**Gemessen am 2026-08-21 über 56 Ziele** (Einzelbefunde; MEDIUM/LOW führt der
|
||||
Exporter bewusst nur als Zähler, nicht als Serien):
|
||||
|
||||
| | CRITICAL | davon mit Fix-Version | HIGH |
|
||||
|---|---|---|---|
|
||||
| **im Betrieb** (51 Ziele) | **183** | **115** (63 %) | 2688 |
|
||||
| **nur in der Registry** (3 Ziele) | **62** | **2** (3 %) | 760 |
|
||||
| **gesamt** | **245** | 117 (47 %) | 3448 |
|
||||
|
||||
**Für wen.** Für den Betreiber, der wissen muss, ob eine gemeldete Lücke etwas
|
||||
bedeutet — und für den, der sie schließen soll, ohne 3693 Zeilen zu lesen.
|
||||
|
||||
### ⚠️ Der Bestand zerfällt in drei Haufen, die verschiedene Arbeit sind
|
||||
|
||||
Das ist der eigentliche Ertrag der Ist-Bewertung: „Remediation-Pass" ist keine
|
||||
Aufgabe, sondern drei.
|
||||
|
||||
**A — 115 CRITICAL im Betrieb mit verfügbarer Fix-Version.** Ein
|
||||
Aktualisierungs-Vorhaben. Hängt unmittelbar an der Update-Kadenz (#0052);
|
||||
Updaten ist hier der Hebel, nicht Einzelbehandlung.
|
||||
|
||||
**B — 68 CRITICAL im Betrieb ohne Fix-Version**, konzentriert auf **acht**
|
||||
Images: `postgres:17.9-bookworm` (19), `goauthentik/server` (18),
|
||||
`coturn:4.17.2` (12), `synapse` (5) und vier kleinere. Kein Update hilft. Jeder
|
||||
Fall braucht eine **Entscheidung** — mitigiert, nicht erreichbar, hingenommen —
|
||||
und die gehört mit Begründung und Review-Datum nach `.trivyignore`, wie es die
|
||||
Abnahme des Issues bereits verlangt.
|
||||
|
||||
**C — 62 CRITICAL auf drei Bau-Artefakten, die nirgends laufen.**
|
||||
`element-desktop-build:bullseye` (39), `windows-vm` (22), `axion-backup:v1` (1).
|
||||
Davon sind **2** behebbar. ⚠️ **Hier ist Remediation die falsche Antwort.** Diese
|
||||
Images kamen erst durch die Registry-Auswahl aus ADR-0026 („die letzten drei
|
||||
Fassungen je Repo") in die Menge; sie werden nicht betrieben und teils gar nicht
|
||||
mehr gebaut. Zu entscheiden ist, ob sie aus der Registry verschwinden oder aus
|
||||
der Zielmenge — nicht, ob ihre CVEs geschlossen werden.
|
||||
|
||||
**Konzentration:** 41 laufende Images tragen CRITICAL-Befunde, aber **19 davon
|
||||
tragen 80 %**. Der Haufen A ist damit kleiner, als die Zahl 115 vermuten lässt.
|
||||
|
||||
### Abnahmekriterien
|
||||
|
||||
1. **Kein CRITICAL in einem laufenden Image ohne Entscheidung.** Zählbar:
|
||||
*behoben* **oder** Eintrag in `.trivyignore` mit Begründung **und**
|
||||
Review-Datum. Heute: 183 ohne Entscheidung.
|
||||
2. **Haufen C ist entschieden, nicht gepatcht.** Zählbar: 0 CRITICAL aus
|
||||
Images, die nirgends laufen — erreicht durch Entfernen aus der Registry oder
|
||||
durch eine begründete Einschränkung der Zielmenge. Heute: 62.
|
||||
3. **Das Ergebnis ist am Dashboard ablesbar, nicht nur behauptet:**
|
||||
`trivy_vuln_info{severity="CRITICAL"}` über laufende Ziele sinkt messbar, und
|
||||
der Stand vorher/nachher steht mit Datum im Abschluss.
|
||||
4. **Die Methode steht als Runbook** (`/betrieb/sicherheit`), damit der nächste
|
||||
Durchgang nicht wieder bei der Sortierung anfängt.
|
||||
5. **Kein Suppress ohne Ablauf.** Zählbar: jeder `.trivyignore`-Eintrag trägt ein
|
||||
Review-Datum; keiner ohne.
|
||||
|
||||
### Nicht-Ziele
|
||||
|
||||
- **HIGH in diesem Durchgang.** 2688 im Betrieb sind kein Vorhaben, sondern eine
|
||||
Kategorie. Dieser Durchgang ist **CRITICAL-first**; HIGH bekommt seinen eigenen,
|
||||
sobald die Methode steht. ⚠️ Das ist eine bewusste Verengung und keine
|
||||
Vollständigkeit — sie gehört in den Abschluss geschrieben.
|
||||
- **MEDIUM/LOW.** Der Exporter führt sie nur als Zähler; für Einzelbehandlung
|
||||
fehlt schon die Datengrundlage.
|
||||
- **Die Update-Kadenz selbst** (#0052). Dieser Durchgang nutzt sie, baut sie nicht.
|
||||
- **Die Zielmenge ändern** (#0106 ist abgeschlossen) — außer als ausdrückliche
|
||||
Entscheidung zu Haufen C.
|
||||
- `game-operating`, Homelab.
|
||||
|
||||
### ⚠️ Zwei Dinge, die Gate 1 nicht allein entscheiden kann
|
||||
|
||||
1. **Haufen C:** Registry aufräumen oder Zielmenge verengen? Das erste ist
|
||||
sauberer und trifft die Ursache; das zweite ist billiger, macht die
|
||||
Zielmenge aber wieder zu etwas, das jemand pflegt — genau wovon ADR-0026
|
||||
weg wollte. **Meine Empfehlung: aufräumen.**
|
||||
2. **Authentik** trägt 27 CRITICAL und 477 HIGH und ist damit der größte
|
||||
Einzelposten im Betrieb. Ein Update ist der Hebel, aber es ist der
|
||||
Anmeldeweg der ganzen Plattform. Ob das in diesen Durchgang gehört oder ein
|
||||
eigenes Vorhaben mit eigener Rückfallebene braucht, ist eine Risikofrage,
|
||||
keine technische.
|
||||
|
||||
### Ankündigung
|
||||
|
||||
Zum ersten Mal steht der vollständige Schwachstellenstand der Plattform als Zahl
|
||||
da, und er zerfällt sauber in drei Teile: was ein Update erledigt, was eine
|
||||
Entscheidung braucht, und was gar nicht hierher gehört, weil es niemand
|
||||
betreibt. Dieser Durchgang arbeitet die kritischen Befunde der laufenden Anlage
|
||||
ab — jeder einzelne endet entweder behoben oder als begründeter Eintrag mit
|
||||
Ablaufdatum, damit kein Suppress zur stillen Dauerlösung wird. Was danach im
|
||||
Dashboard steht, ist eine Aussage über die Plattform statt über die Länge einer
|
||||
Liste.
|
||||
|
||||
### Keine Oberfläche
|
||||
|
||||
Kein UI-Anteil; das Ergebnis ist im bestehenden Dashboard
|
||||
*Security / CVE-Übersicht* ablesbar.
|
||||
|
||||
> **STOP — Freigabe für Gate 1.**
|
||||
@@ -1,12 +1,12 @@
|
||||
---
|
||||
type: issue
|
||||
id: "0051"
|
||||
status: open
|
||||
status: in-progress
|
||||
created: 2026-08-14
|
||||
milestone: M5
|
||||
priority: high
|
||||
area: security
|
||||
related: [docs/issues/0025-deploy-uebergabe-cve-alarme-aggregiert-receiver.md, docs/aar/2026-08-01-cve-pipeline-gitops47.md, docs/issues/0106-cve-scan-deckt-nur-die-haelfte-zielliste-ist-handgepflegt.md]
|
||||
related: [docs/issues/0025-deploy-uebergabe-cve-alarme-aggregiert-receiver.md, docs/aar/2026-08-01-cve-pipeline-gitops47.md, docs/issues/0106-cve-scan-deckt-nur-die-haelfte-zielliste-ist-handgepflegt.md, docs/design/2026-08-21-cve-remediation.md]
|
||||
gitlab_iid: "37"
|
||||
---
|
||||
# CVE-Remediation-Pass: Schwachstellen-Report abarbeiten
|
||||
|
||||
Reference in New Issue
Block a user