Gegenbuch: Anker belegen nichts mehr, Anker-Verlust wird laut (R180-01/-02)

R180-01: Der Code nahm den hoechsten noch vorhandenen refs/notary/seq-* als
"hoechsten je". Loescht ein Angreifer nur die oberen Anker und laesst einen
niedrigeren stehen, senkt er den Vergleichswert selbst - ein frischer
Auditoren-Klon meldete OK, exit 0 auf gewaschenem Stand. Perverser Gradient:
Wer alle Refs loeschte, flog auf (Code 4); wer weniger loeschte, kam durch,
weil ankerBelegt sowohl die Gewissheit begruendete als auch den
Code-4-Diskriminator kurzschloss.

Fix: Anker begruenden keine Gewissheit mehr. Sie koennen ein Zurueckspulen
widerlegen, aber nie Unversehrtheit belegen. Der Code-4-Diskriminator haengt
nicht mehr an ihnen und greift nur im Schreiblauf.

R180-02: Der Anker-Push-Fehlschlag war nur eine Warnung mit exit 0 -
ausgerechnet bei der tragenden Eigenschaft. Der Normalbetrieb senkte damit den
Hoechststand still um eins. Fix: exit 3 bei Fehlschlag, und jeder Lauf zieht
fehlende Anker nach, bevor er etwas als OK meldet.

Verifiziert: Teil-Loeschung mit frischem Auditoren-Klon -> exit 3 mit Vorbehalt
statt exit 0; Anker-Push per Hook abgelehnt -> exit 3 statt Hinweis; Folgelauf
traegt den fehlenden Anker nach.

README: Der Schutz von refs/notary/* gegen Loeschen und Ueberschreiben ist von
der Fussnote zur tragenden Voraussetzung erhoben.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-22 10:59:07 +02:00
co-authored by Claude Opus 5
parent 1a252c5059
commit a954f0f736
3 changed files with 114 additions and 12 deletions
+35
View File
@@ -97,6 +97,41 @@ isolierte Instanz (keine Multi-Tenancy im Code), Provisioning + Abrechnung
## ✅ Erledigt
- [x] **🛑 Gegenbuch: Anker belegen nichts mehr, Anker-Verlust wird laut (Pentest R180-01/-02)** (2026-08-18)
- **R180-01 (MEDIUM)** Genau die Unsicherheit, die ich selbst benannt
hatte, bestaetigt: Der Code nahm den **hoechsten noch vorhandenen**
`refs/notary/seq-*` als „hoechsten je“. Loescht ein Angreifer nur die
OBEREN Anker und laesst einen niedrigeren stehen, senkt er den
Vergleichswert selbst ein frischer Auditoren-Klon meldete `OK`, exit 0
auf gewaschenem Stand.
Perverser Gradient: Wer ALLE Refs loeschte, flog auf (Code 4); wer weniger
loeschte, kam durch weil `ankerBelegt` sowohl die Gewissheit begruendete
als auch den Code-4-Diskriminator kurzschloss.
Fix: **Anker begruenden keine Gewissheit mehr.** Sie koennen ein
Zurueckspulen *widerlegen* (hoher Anker nicht mehr im Kopf → Alarm), aber
nie Unversehrtheit *belegen*. Der Code-4-Diskriminator haengt nicht mehr an
ihnen und greift nur noch im Schreiblauf (ein Auditor hatte nie ein
Gedaechtnis, ihm Code 4 vorzuwerfen waere Laerm).
- **R180-02 (LOW→MED)** Der Anker-Push-Fehlschlag war nur eine Warnung mit
exit 0, ausgerechnet bei der tragenden Eigenschaft: `main` stand auf dem
neuen Checkpoint, der Anker fehlte, niemand holte es nach. Der
**Normalbetrieb** senkte damit den Hoechststand still um eins und riss das
R180-01-Fenster ohne Angriff auf.
Fix: Anker-Push-Fehlschlag → **exit 3**; und jeder Lauf **zieht fehlende
Anker nach**, bevor er irgendetwas als OK meldet (Zuordnung ueber die
n-te Aenderung am Gegenbuch).
- Verifiziert: Teil-Loeschung (main auf seq-2, Anker 35 weg, DB gekuerzt),
frischer Auditoren-Klon → **exit 3 mit Vorbehalt statt exit 0** (das falsche
Gruen ist weg; erkannt wird es in-repo weiterhin nicht, das geht ohne
Ref-Schutz nicht); Anker-Push per Hook abgelehnt → **exit 3** statt
Hinweis; Folgelauf → „Fehlende Anker nachgetragen: 1“, Anker wieder
vollstaendig.
- **README:** Der Schutz von `refs/notary/*` gegen Loeschen und Ueberschreiben
ist von der Fussnote zur **tragenden Voraussetzung** erhoben mit der
Begruendung, warum Anker nichts belegen koennen, und dem ausdruecklichen
Hinweis, dass ein `--check` aus frischem Klon eine Anker-Loeschung nicht
erkennt.
- [x] **🧠 Gegenbuch: Gedaechtnis ins Substrat verlegt, Verlust laut behandelt (Pentest R180)** (2026-08-18)
- Sein Durchrechnen war zwingend: „erste Beobachtung → exit 3“ galt **genau
einen Lauf**. Danach baselinete der Waechter auf den AKTUELLEN Kopf nach