From 24ae5b9d2bfcf427a1a8e249956f9aa6643a615b Mon Sep 17 00:00:00 2001 From: Thore Cimbal Date: Fri, 21 Aug 2026 12:00:00 +0000 Subject: [PATCH] =?UTF-8?q?docs:=20Gate=201=20for=20#0051=20=E2=80=94=20th?= =?UTF-8?q?e=20backlog=20is=20three=20piles,=20not=20one?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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. --- STATUS.md | 8 +- docs/design/2026-08-21-cve-remediation.md | 118 ++++++++++++++++++++++ docs/issues/0051-cve-remediation-pass.md | 4 +- 3 files changed, 125 insertions(+), 5 deletions(-) create mode 100644 docs/design/2026-08-21-cve-remediation.md diff --git a/STATUS.md b/STATUS.md index eef7098..d7ff388 100644 --- a/STATUS.md +++ b/STATUS.md @@ -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) diff --git a/docs/design/2026-08-21-cve-remediation.md b/docs/design/2026-08-21-cve-remediation.md new file mode 100644 index 0000000..bccc08b --- /dev/null +++ b/docs/design/2026-08-21-cve-remediation.md @@ -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.** diff --git a/docs/issues/0051-cve-remediation-pass.md b/docs/issues/0051-cve-remediation-pass.md index 243a6a1..27ff1d7 100644 --- a/docs/issues/0051-cve-remediation-pass.md +++ b/docs/issues/0051-cve-remediation-pass.md @@ -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