Bestandssiegel betriebstauglich gemacht (Pentest R173-01/-02/-03)
R173-01 (HIGH): Das Siegel war ueber HTTP tot. Die generische auditMiddleware
protokolliert den POST /seal-backlog-Request selbst als AuditLog/CREATE mit
demselben endpoint - exakt die Signatur, mit der der Marker gesucht wurde, nur
mit hoeherer id und ohne changesAfter. Der Selektor griff diese Zeile, root war
undefined, Ergebnis: dauerhaft "gebrochen" bei null manipulierten Zeilen.
Mein Testfehler: sealBacklog()/verifyIntegrity() direkt aufgerufen, nie ueber
HTTP - die Middleware lief nie mit. Dieselbe Fehlerklasse wie R165.
Fix: eigener Ressourcentyp AuditBacklogSeal, den die Middleware nie vergibt,
zusaetzlich muss der Marker auswertbares {toId, root} tragen.
R173-02 (MEDIUM): Fehlende Zeilen wurden uebersprungen, das Loeschen eines
gesiegelten Einbruchsbelegs erschien nur als unerklaerte Luecke, waehrend der
Indikator "intakt" meldete. Fix: fehlende gesiegelte Zeilen sind ein
Siegelbruch mit eigener Liste (backlogMissing) und werden namentlich gemeldet.
R173-03 (MEDIUM): Die R170-01-Haertung (Vorbefund im Marker) war auf
seal-backlog nie angewandt, ein Re-Seal absorbierte Manipulationen mit weniger
Spur als ein Rehash. Fix: Der Marker haelt den Befund vor dem Siegeln fest
samt Status und Wurzel des vorherigen Siegels; verify weist die Anzahl
gueltiger Siegel aus und warnt bei mehr als einem.
Verifiziert ueber den echten HTTP-Pfad inkl. Middleware (separate Wegwerf-DB,
Mischbestand 6xV1/4xV2/4xV3): Protokollzeile vorhanden, Status trotzdem
intakt; Loeschen einer gesiegelten Zeile -> gebrochen mit backlogMissing[2];
erneutes Siegeln -> Anzahl 2 gemeldet, Vorbefund im Marker. tsc + vite build
gruen.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -97,6 +97,42 @@ isolierte Instanz (keine Multi-Tenancy im Code), Provisioning + Abrechnung
|
||||
|
||||
## ✅ Erledigt
|
||||
|
||||
- [x] **🔧 Bestandssiegel betriebstauglich gemacht (Pentest R173-01 HIGH, R173-02/-03 MEDIUM)** (2026-08-18)
|
||||
- **R173-01 (HIGH) – Siegel war ueber HTTP tot.** Die generische
|
||||
`auditMiddleware` protokolliert den `POST /seal-backlog`-Request SELBST als
|
||||
`AuditLog / CREATE / endpoint=/api/audit-logs/seal-backlog` – exakt die
|
||||
Signatur, mit der ich den Marker suchte, nur mit hoeherer id und ohne
|
||||
`changesAfter`. Der Selektor griff diese Zeile, `root` war `undefined`,
|
||||
Ergebnis: **dauerhaft „gebrochen“ bei null manipulierten Zeilen.** Das
|
||||
komplette R171-02-Deliverable war damit im Betrieb wertlos.
|
||||
**Mein Testfehler:** Ich hatte `sealBacklog()`/`verifyIntegrity()` direkt
|
||||
aufgerufen, nie ueber HTTP – die Middleware lief nie mit. Dieselbe
|
||||
Fehlerklasse wie R165 (Code korrekt, im Betrieb nicht erreichbar).
|
||||
Fix: eigener Ressourcentyp `AuditBacklogSeal`, den die Middleware nie
|
||||
vergibt (sie leitet ihn aus dem Pfad ab → `AuditLog`), zusaetzlich muss der
|
||||
Marker auswertbares `{toId, root}` tragen.
|
||||
- **R173-02 (MEDIUM) – Siegel war blind fuers Loeschen.** `if (!zeile)
|
||||
continue` uebersprang fehlende Zeilen; das Loeschen eines gesiegelten
|
||||
Einbruchsbelegs erschien nur als „unerklaerte Luecke“, waehrend der
|
||||
dedizierte Indikator „intakt“ meldete – Entwarnung, waehrend Beweismaterial
|
||||
verschwindet. Fix: fehlende gesiegelte Zeilen sind ein Siegelbruch mit
|
||||
eigener Liste (`backlogMissing`) und werden namentlich gemeldet. Deckt
|
||||
zugleich seine Frage (a) ab: geprueft wird jetzt die gesiegelte Menge
|
||||
gegen die Live-Population, nicht nur der Inhalt vorhandener Zeilen.
|
||||
- **R173-03 (MEDIUM) – Re-Seal wusch mit weniger Spur als ein Rehash.** Die
|
||||
R170-01-Haertung (Vorbefund im Marker) war auf `seal-backlog` nie
|
||||
angewandt. Fix: Der Siegel-Marker haelt jetzt den Befund VOR dem Siegeln
|
||||
fest (manipulierte/fehlende Zeilen, Ketten-Luecken) samt Status und Wurzel
|
||||
des vorherigen Siegels; `/verify` weist die Anzahl gueltiger Siegel aus und
|
||||
weist bei >1 ausdruecklich darauf hin.
|
||||
- Verifiziert **ueber den echten HTTP-Pfad inkl. Middleware** (separate
|
||||
Wegwerf-DB, Mischbestand 6×V1/4×V2/4×V3): Middleware-Protokollzeile ist
|
||||
vorhanden, Status trotzdem `intakt`; Loeschen einer gesiegelten Zeile →
|
||||
`gebrochen`, `backlogMissing:[2]`, namentlich in der Meldung; erneutes
|
||||
Siegeln → Anzahl 2 gemeldet, Marker enthaelt „vorheriges Siegel: gebrochen,
|
||||
Befund fehlend [2]“. Wegwerf-DB geloescht, Dev unberuehrt.
|
||||
`tsc` + `vite build` gruen.
|
||||
|
||||
- [x] **🧿 Bestandssiegel: Altbestand gegen stille Aenderung gesichert (Pentest R171-02, HIGH)** (2026-08-18)
|
||||
- Der Pentester hat den Fund live reproduziert: Bei Hash-Version 1 sind nur
|
||||
7 von 24 Spalten gehasht. Ein DB-Schreibzugriff konnte eine
|
||||
|
||||
Reference in New Issue
Block a user