diff --git a/docs/ledger/2026-08-21-cve-remediation.md b/docs/ledger/2026-08-21-cve-remediation.md index 0177291..54eb5d2 100644 --- a/docs/ledger/2026-08-21-cve-remediation.md +++ b/docs/ledger/2026-08-21-cve-remediation.md @@ -23,10 +23,9 @@ Nachfrage erfuellt wurde (`docs/wiki/stolpersteine/aar-pflicht-ohne-werkzeug.md` | gate | commit | approval | status | note | |---|---|---|---|---| -| 3+4 | 70823b4 | sorb | DONE | Zusammengelegt (eine Datei, eine Zeile, keine Signaturen); Fund: Flux haette selbsttaetig zurueckgerollt. | -| 2 | 80ee448 | sorb | DONE | Gestufter Authentik-Weg belegt; die Pflicht-Zwischenstufe traegt den ganzen CRITICAL-Gewinn. | | 1 | 24ae5b9 | sorb | DONE | Drei Haufen statt eines Vorhabens; Reichweite Haufen C = einengen auf Betriebenes. | -| 5 | | | BLOCKED | Nicht faellig: Haufen B (68 CRITICAL ohne Fix) und der Rest von Haufen A stehen aus. | +| 2 | 80ee448 | sorb | DONE | Gestufter Authentik-Weg belegt; die Pflicht-Zwischenstufe traegt den ganzen CRITICAL-Gewinn. | +| 3+4 | 70823b4 | sorb | DONE | Zusammengelegt (eine Datei, eine Zeile, keine Signaturen); Fund: Flux haette selbsttaetig zurueckgerollt. | ## Slices @@ -55,6 +54,11 @@ Nachfrage erfuellt wurde (`docs/wiki/stolpersteine/aar-pflicht-ohne-werkzeug.md` ## Notes +**Gate 5 steht aus und hat deshalb KEINE Zeile.** Die Vorlage sagt „one row per +gate as it closes" — eine Zeile fuer ein nicht geschlossenes Gate waere eine +Behauptung ohne Commit, und genau das faengt der Richter ab. Was fehlt: Haufen B +(68 CRITICAL ohne Fix-Version, auf acht Images) und der Rest von Haufen A. + ⚠️ **Der erste Commit der Haufen-C-Einengung war ungetestet, und die Gegenprobe hat es gefangen.** Nach dem Abschalten des Filters blieben alle 22 Zusicherungen gruen — meine „Gegenprobe" prueft die Uebersprung-Logik in `herleiten()`, nicht diff --git a/docs/ledger/2026-08-21-cve-ziele-ableiten.md b/docs/ledger/2026-08-21-cve-ziele-ableiten.md index 13360d3..5af6e19 100644 --- a/docs/ledger/2026-08-21-cve-ziele-ableiten.md +++ b/docs/ledger/2026-08-21-cve-ziele-ableiten.md @@ -14,11 +14,11 @@ related: | gate | commit | approval | status | note | |---|---|---|---|---| -| 5 | e342229 | sorb | DONE | Ausgerollt von sorb; 56 Ziele, Deckung 100 %, 39 Meldungen, keine Drosselung. ADR-0026 angenommen. | -| 4 | e316193 | sorb | DONE | Fuenf Slices; Ausrollen als Deploy-Uebergabe, Mengengeruest beigelegt. | -| 3 | a0cd02a | sorb | DONE | Dateien, Signaturen, Zusicherungen, Grenzen; fuenf wackelige Annahmen benannt. | -| 2 | 2693a2d | sorb | DONE | Herleitung im Exporter statt drittem Dienst; ADR-0026 vorgeschlagen. | | 1 | e10cd5d | sorb | DONE | Sechs Kriterien; Registry-Reichweite = Option C (Bestand + letzte drei je Repo). | +| 2 | 2693a2d | sorb | DONE | Herleitung im Exporter statt drittem Dienst; ADR-0026 vorgeschlagen. | +| 3 | a0cd02a | sorb | DONE | Dateien, Signaturen, Zusicherungen, Grenzen; fuenf wackelige Annahmen benannt. | +| 4 | e316193 | sorb | DONE | Fuenf Slices; Ausrollen als Deploy-Uebergabe, Mengengeruest beigelegt. | +| 5 | e342229 | sorb | DONE | Ausgerollt von sorb; 56 Ziele, Deckung 100 %, 39 Meldungen, keine Drosselung. ADR-0026 angenommen. | ## Slices @@ -34,16 +34,16 @@ related: | searched | found | outcome | commit | |---|---|---|---| -| ob #0078 ueberhaupt noch Arbeit ist, bevor ein Entwurf beginnt | das gesamte Zielbild war seit dem 2026-08-01 gebaut und lieferte: Raum, Metriken, Dashboard, fuenf Regeln, Raum-Routing | reused: nichts gebaut — #0078 mit Nachweis geschlossen statt umgesetzt | | -| eine Entscheidung zum Meldeweg, bevor eine eigene getroffen wird | ADR-0003 (angenommen, 2026-08-01) legt Aggregation, Security-Raum und einen Bot bereits fest | reused: der Meldeweg bleibt unberuehrt und wird Nicht-Ziel | | -| eine Quelle fuer die laufenden Images, statt eine zu bauen | `kube_pod_container_info` (39) und `container_last_seen{job="operating_cadvisor"}` (12) liegen in **derselben** Prometheus, die der Scanner ueber das vorhandene Compose-Netz erreicht | reused: kein neuer Dienst, keine Zugangsdaten, kein neuer Netzweg | | -| einen Weg, game-operating auszuschliessen | `job="gameserver_cadvisor"` (20 Images) trennt sauber von `operating_cadvisor` | reused: ein Beschriftungsvergleich statt einer Ausschlussliste | | -| ob die Registry ohne neue Zugangsdaten lesbar ist | anonymer Token-Tanz genuegt: `/v2/token` → Katalog und Tag-Listen; 6 Repos, 36 Tags | reused: die Standard-Registry-Authentifizierung, die der Scanner ohnehin schon fuer das Ziehen macht | | -| einen Weg, den Betriebs-Host selbst auszurollen | `10.0.0.3:2248` ist von MATRIX offen und die Agent-Weiterleitung traegt, der Schluessel ist dort aber nicht zugelassen | reused: das bestehende Verfahren `deploy-uebergabe.md` statt eines neuen Zugangs — es entstand 2026-08-01 aus genau diesem Stack | | -| einen anonymen Weg an die Tag-Zeitstempel, bevor ein Token eingeplant wird | Giteas `/api/v1/packages` verlangt einen Token — die Registry-API dagegen nicht: Manifest → Config-Blob liefert `created`, anonym, ~90 Anfragen je Runde | reused: die Registry-Authentifizierung, die der Scanner ohnehin macht — Randbedingung "keine neuen Zugangsdaten" bleibt gewahrt | | -| einen Ort fuer die Soll-Menge, bevor ein Dienst dafuer gebaut wird | der `cve-exporter` braucht sie fuer die Deckungsmetrik ohnehin und ist ein laufender stdlib-Python-Prozess im selben Netz | reused: bestehender Prozess statt drittem Container — kein `jq`, kein `pip`, keine zweite Wahrheit | | -| eine AAR zu genau diesem Stack, bevor Randbedingungen geraten werden | AAR 2026-08-01: `up -d` aktiviert Configs nicht (im Container pruefen), und `TrivyScanStale` kann ein nie gescanntes Image nicht melden | reused: beide Funde als Randbedingung uebernommen statt neu zu entdecken — Befund 3 bestimmt, dass die Deckung aus der Soll-Menge kommen muss | | -| ob die rohana-Berichte ueberhaupt frisch sind | alle 29 Berichte gleichmaessig 4,1 h alt — der Scanner zieht aus der Registry erfolgreich | reused: die bestehende Scan-Schleife bleibt, nur ihre Zielbeschaffung aendert sich | | +| ob #0078 ueberhaupt noch Arbeit ist, bevor ein Entwurf beginnt | das gesamte Zielbild war seit dem 2026-08-01 gebaut und lieferte: Raum, Metriken, Dashboard, fuenf Regeln, Raum-Routing | reused: nichts gebaut — #0078 mit Nachweis geschlossen statt umgesetzt | b3d961d | +| eine Entscheidung zum Meldeweg, bevor eine eigene getroffen wird | ADR-0003 (angenommen, 2026-08-01) legt Aggregation, Security-Raum und einen Bot bereits fest | reused: der Meldeweg bleibt unberuehrt und wird Nicht-Ziel | e10cd5d | +| eine Quelle fuer die laufenden Images, statt eine zu bauen | `kube_pod_container_info` (39) und `container_last_seen{job="operating_cadvisor"}` (12) liegen in **derselben** Prometheus, die der Scanner ueber das vorhandene Compose-Netz erreicht | reused: kein neuer Dienst, keine Zugangsdaten, kein neuer Netzweg | e10cd5d | +| einen Weg, game-operating auszuschliessen | `job="gameserver_cadvisor"` (20 Images) trennt sauber von `operating_cadvisor` | reused: ein Beschriftungsvergleich statt einer Ausschlussliste | e10cd5d | +| ob die Registry ohne neue Zugangsdaten lesbar ist | anonymer Token-Tanz genuegt: `/v2/token` → Katalog und Tag-Listen; 6 Repos, 36 Tags | reused: die Standard-Registry-Authentifizierung, die der Scanner ohnehin schon fuer das Ziehen macht | e10cd5d | +| einen Weg, den Betriebs-Host selbst auszurollen | `10.0.0.3:2248` ist von MATRIX offen und die Agent-Weiterleitung traegt, der Schluessel ist dort aber nicht zugelassen | reused: das bestehende Verfahren `deploy-uebergabe.md` statt eines neuen Zugangs — es entstand 2026-08-01 aus genau diesem Stack | e316193 | +| einen anonymen Weg an die Tag-Zeitstempel, bevor ein Token eingeplant wird | Giteas `/api/v1/packages` verlangt einen Token — die Registry-API dagegen nicht: Manifest → Config-Blob liefert `created`, anonym, ~90 Anfragen je Runde | reused: die Registry-Authentifizierung, die der Scanner ohnehin macht — Randbedingung "keine neuen Zugangsdaten" bleibt gewahrt | a0cd02a | +| einen Ort fuer die Soll-Menge, bevor ein Dienst dafuer gebaut wird | der `cve-exporter` braucht sie fuer die Deckungsmetrik ohnehin und ist ein laufender stdlib-Python-Prozess im selben Netz | reused: bestehender Prozess statt drittem Container — kein `jq`, kein `pip`, keine zweite Wahrheit | 2693a2d | +| eine AAR zu genau diesem Stack, bevor Randbedingungen geraten werden | AAR 2026-08-01: `up -d` aktiviert Configs nicht (im Container pruefen), und `TrivyScanStale` kann ein nie gescanntes Image nicht melden | reused: beide Funde als Randbedingung uebernommen statt neu zu entdecken — Befund 3 bestimmt, dass die Deckung aus der Soll-Menge kommen muss | 2693a2d | +| ob die rohana-Berichte ueberhaupt frisch sind | alle 29 Berichte gleichmaessig 4,1 h alt — der Scanner zieht aus der Registry erfolgreich | reused: die bestehende Scan-Schleife bleibt, nur ihre Zielbeschaffung aendert sich | a0cd02a | ## Notes diff --git a/docs/ledger/2026-08-21-egress-vollstaendig.md b/docs/ledger/2026-08-21-egress-vollstaendig.md index 05f2311..47d784c 100644 --- a/docs/ledger/2026-08-21-egress-vollstaendig.md +++ b/docs/ledger/2026-08-21-egress-vollstaendig.md @@ -14,25 +14,25 @@ related: | gate | commit | approval | status | note | |---|---|---|---|---| -| 5 | 52326f4 | sorb | DONE | Abnahmeliste vollstaendig, Call gemessen; ADR-0025 angenommen, #0088 geschlossen. | -| 4 | b0837b7 | sorb | DONE | Fuenf Slices in vier Wellen; Rueckweg in Slice 1 geprobt und Gate 2 korrigiert. | -| 3 | a7d561b | sorb | DONE | Klassen, Regelform, rohana intern statt extern. | -| 2 | 1dc5439 | sorb | DONE | Drei Klassen, CIDR-only, ClamAV als harter Fall benannt. | | 1 | 04b1b84 | sorb | DONE | Umfang und vier zaehlbare Abnahmekriterien; #0088 auf in-progress. | +| 2 | 1dc5439 | sorb | DONE | Drei Klassen, CIDR-only, ClamAV als harter Fall benannt. | +| 3 | a7d561b | sorb | DONE | Klassen, Regelform, rohana intern statt extern. | +| 4 | b0837b7 | sorb | DONE | Fuenf Slices in vier Wellen; Rueckweg in Slice 1 geprobt und Gate 2 korrigiert. | +| 5 | 52326f4 | sorb | DONE | Abnahmeliste vollstaendig, Call gemessen; ADR-0025 angenommen, #0088 geschlossen. | ## Ladder | searched | found | outcome | commit | |---|---|---|---| -| `apps/production/networkpolicy.yaml` und die beiden anderen Namespaces, bevor ein Modell entworfen wird | 18 Policies, davon drei Egress; `authentik` und `monitoring` haben je eine eigene Datei mit nur der Metadaten-Sperre | reused: bestehender Stil je Namespace, kein neues Modell und kein Werkzeug | | -| die Bestandsaufnahme aus der Vormessung, statt neu zu zaehlen | 10 eingeschraenkt, 7 laufend offen, 8 Job-artig offen, 2 Namespaces gar nicht erfasst | reused: die Zahlen aus #0088 vom selben Tag, samt Methodik | | -| die Durchsetzungsschicht, bevor eine Regelform gewaehlt wird | kein separater CNI-/Policy-Pod — k3s' eingebauter Controller, also Standard-NetworkPolicy | reused: die bestehende Erlaubnisform (DNS + 10.42/16 + 10.43/16), kein neues Modell | | -| ob IPv6 eine Umgehung waere | podCIDRs nur IPv4, v6-Verbindung scheitert mit OSError | reused: IPv4-CIDRs genuegen — kein Zusatzaufwand fuer eine Adressfamilie, die es nicht gibt | | -| das git-storage-Ziel von wikijs, statt es zu raten | steht nicht im Manifest, sondern in der Wiki.js-Datenbank: `https://rohana.axion1337.de/sorb/ThreadNetWiki.git` | reused: die laufende Konfiguration als Quelle — Klasse B bestaetigt | | -| ob die Sperre von gestern ueberhaupt beisst, bevor neue dazukommen | drei echt externe Ziele blockiert, die Knoten-Adresse erreichbar | built: nichts — aber der Fund aendert die Klasseneinteilung und gehoert ins Issue | | -| einen privaten Weg zu rohana, auf sorbs Einwand hin | `10.0.0.3:443` antwortet als Gitea und traegt ein gueltiges Let's-Encrypt-Zertifikat fuer den oeffentlichen Namen | reused: der vorhandene private Pfad statt einer Erlaubnis nach draussen — kein Dienst muss umkonfiguriert werden | | -| einen Weg, den Namen intern umzubiegen | die Corefile importiert bereits beides: `*.override` im Hauptblock (Z. 19) und `*.server` am Ende (Z. 22); nur die ConfigMap fehlt | reused: der vorgesehene k3s-Mechanismus, keine Aenderung an der Corefile selbst — `.server`, weil eine eigene Zone noetig ist und ein zweiter `hosts`-Block im Hauptblock mit `NodeHosts` kollidiert waere | | -| einen Weg, einen distroless Pod zu pruefen | `kubectl debug` haengt einen ephemeren Container in denselben Netz-Namensraum, die Policy gilt fuer ihn genauso | reused: Bordmittel statt Sidecar oder Image-Aenderung | | +| `apps/production/networkpolicy.yaml` und die beiden anderen Namespaces, bevor ein Modell entworfen wird | 18 Policies, davon drei Egress; `authentik` und `monitoring` haben je eine eigene Datei mit nur der Metadaten-Sperre | reused: bestehender Stil je Namespace, kein neues Modell und kein Werkzeug | 04b1b84 | +| die Bestandsaufnahme aus der Vormessung, statt neu zu zaehlen | 10 eingeschraenkt, 7 laufend offen, 8 Job-artig offen, 2 Namespaces gar nicht erfasst | reused: die Zahlen aus #0088 vom selben Tag, samt Methodik | 04b1b84 | +| die Durchsetzungsschicht, bevor eine Regelform gewaehlt wird | kein separater CNI-/Policy-Pod — k3s' eingebauter Controller, also Standard-NetworkPolicy | reused: die bestehende Erlaubnisform (DNS + 10.42/16 + 10.43/16), kein neues Modell | 1dc5439 | +| ob IPv6 eine Umgehung waere | podCIDRs nur IPv4, v6-Verbindung scheitert mit OSError | reused: IPv4-CIDRs genuegen — kein Zusatzaufwand fuer eine Adressfamilie, die es nicht gibt | 1dc5439 | +| das git-storage-Ziel von wikijs, statt es zu raten | steht nicht im Manifest, sondern in der Wiki.js-Datenbank: `https://rohana.axion1337.de/sorb/ThreadNetWiki.git` | reused: die laufende Konfiguration als Quelle — Klasse B bestaetigt | a7d561b | +| ob die Sperre von gestern ueberhaupt beisst, bevor neue dazukommen | drei echt externe Ziele blockiert, die Knoten-Adresse erreichbar | built: nichts — aber der Fund aendert die Klasseneinteilung und gehoert ins Issue | 722c149 | +| einen privaten Weg zu rohana, auf sorbs Einwand hin | `10.0.0.3:443` antwortet als Gitea und traegt ein gueltiges Let's-Encrypt-Zertifikat fuer den oeffentlichen Namen | reused: der vorhandene private Pfad statt einer Erlaubnis nach draussen — kein Dienst muss umkonfiguriert werden | a7d561b | +| einen Weg, den Namen intern umzubiegen | die Corefile importiert bereits beides: `*.override` im Hauptblock (Z. 19) und `*.server` am Ende (Z. 22); nur die ConfigMap fehlt | reused: der vorgesehene k3s-Mechanismus, keine Aenderung an der Corefile selbst — `.server`, weil eine eigene Zone noetig ist und ein zweiter `hosts`-Block im Hauptblock mit `NodeHosts` kollidiert waere | 20cfeae | +| einen Weg, einen distroless Pod zu pruefen | `kubectl debug` haengt einen ephemeren Container in denselben Netz-Namensraum, die Policy gilt fuer ihn genauso | reused: Bordmittel statt Sidecar oder Image-Aenderung | c7f7e73 | ## Notes