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:
1 parent
45efb08369
commit
8b6f48b996
2 files changed
+57
-5
No files matched your search
@@ -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.
|
||||
Reference in new issue
Block a user