docs: API security model, audit results and operating notes

Auth flow and guard order as built now, new architecture decisions
(user-management escalation guard, SSO identity binding, sealed backups),
a section on API security with the remaining known gaps, and the audit
table with commits, new env variables and steps after the update.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
This commit is contained in:
Nick SzaunigandClaude Opus 5.5 committed 2026-10-01 07:27:22 +02:00
1 parent 45efb08369
commit 8b6f48b996
2 files changed
+57 -5

No files matched your search

+26
View File
@@ -106,3 +106,29 @@ Aufbewahrung 5 Jahre.
- Rechte `winter-checks:read/create/update`: per Migration an Imker und Mitarbeiter wie Durchsichten,
Nur-Lesen-Rollen nur lesen. Einträge sind im Backup enthalten.
- Quelle Verlustkategorien: COLOSS-Monitoring (z. B. Gray et al. 2020, J. Apic. Res., doi:10.1080/00218839.2020.1797272).
## API-Sicherheit (Oktober 2026)
Audit des gesamten Backends nach OWASP API Top 10 / ASVS L2 (25 Befunde), alle umgesetzt außer den zwei in ARCHITECTURE.md §9 begründeten Restpunkten. Verifikation: AT (Unit + E2E gegen Postgres 17).
| Befund | Schwere | Commit |
|---|---|---|
| MFA-Zwischen-Token galt als Access-Token (MFA-Bypass) | Kritisch | `e0bd7b2` |
| `users:update` konnte Admin-Konten übernehmen | Hoch | `c4a11b4` |
| SSO-Konto über unverifizierten E-Mail-Claim gewählt | Hoch | `a25265b` |
| Backup-Import überschreibt Benutzer; Export enthält Hashes/Secrets; Pfad-Traversal im Import | Hoch | `bd592ad` |
| Backup-Pfad/Zeitplan frei wählbar | Mittel | `ebeb499` |
| Webhooks: DNS-Rebinding, kein Timeout, Signatur ohne Zeitstempel | Mittel | `79d20ee` |
| TOTP-Replay, keine Kontosperre, MFA-Aus nur mit Passwort, Timing-Enumeration | Mittel | `5c666fe` |
| Refresh-Rotation nicht atomar, keine Höchstdauer | Mittel | `2de93bc` |
| Throttler nach Auth, Proxy-Vertrauen fest, Cache/CSP, Logs mit Query | Mittel | `9ae1d96` |
| API-Schlüssel ohne IP-Bindung, Scope über eigene Rechte hinaus | Mittel | `f1dc0de` |
| CSV-Formel-Injection | Mittel | `61e3247` |
| Passwortregel 8 Zeichen, kein Leak-Abgleich | Mittel | `0ba8996` |
| Suche umgeht Leserechte | Niedrig–Mittel | `eafe925` |
| Öffentliche Chargen-Seite, SSO-Callback-URL, Logout-Limit, 4xx-Mapping | Niedrig | `0899576` |
| SSO-/MFA-Token mehrfach nutzbar; Rechte-Cache je Replika | Niedrig–Mittel | `45efb08` |
Neue Umgebungsvariablen: `BACKUP_ENCRYPTION_KEY`, `BACKUP_ROOT`, `SESSION_MAX_AGE`, `TRUST_PROXY`, `PASSWORD_BREACH_CHECK` (siehe `.env.example`).
Betrieb nach dem Update: Alle Benutzer melden sich einmal neu an (Access-Tokens ohne Audience gelten nicht mehr). Webhook-Empfänger prüfen die neue Signatur (`X-ApiCore-Timestamp`.`X-ApiCore-Delivery`.Body). Im Wabenhain-Schlüssel die Server-IP als erlaubte Adresse eintragen.