ai-kanban: Security-Folgetickets SEC-01 bis SEC-05 #359

Closed
patrick wants to merge 0 commits from chore/ai-kanban-security-folgetickets into main
pull from: chore/ai-kanban-security-folgetickets
Owner

Folgetickets aus dem Security-Review (Fable 5.1, main-Branch) fuer ai-kanban. Neues Epic "🔒 Sicherheit".

  • SEC-01 (hoch): Tenant-Kontext aus Client-Body/Pfad, kein verdrahteter Tenant-Verifier
  • SEC-02 (hoch): Datenresidenz-Freigabe ohne Berechtigungspruefung, kein Audit-Eintrag
  • SEC-03 (hoch): Quota-Enforcement auf keinem HTTP-Pfad tatsaechlich wirksam
  • SEC-04 (mittel): kein Body-Limit/Security-Header, rohe Fehlermeldungen an Client
  • SEC-05 (mittel): Inferenz-Ergebnisse dauerhaft gespeichert, kein DSGVO-Loeschpfad

Jedes Ticket mit Datei:Zeile-Beleg, konkretem Angriffsszenario, Akzeptanzkriterien und Pruefungen, die den Angriff vor dem Fix real nachstellen.

Nur Board-/Ticketdaten, keine Code-Aenderung in dieser PR.

Kein Merge, kein Deploy.

🤖 Generated with Claude Code

Folgetickets aus dem Security-Review (Fable 5.1, main-Branch) fuer ai-kanban. Neues Epic "🔒 Sicherheit". - SEC-01 (hoch): Tenant-Kontext aus Client-Body/Pfad, kein verdrahteter Tenant-Verifier - SEC-02 (hoch): Datenresidenz-Freigabe ohne Berechtigungspruefung, kein Audit-Eintrag - SEC-03 (hoch): Quota-Enforcement auf keinem HTTP-Pfad tatsaechlich wirksam - SEC-04 (mittel): kein Body-Limit/Security-Header, rohe Fehlermeldungen an Client - SEC-05 (mittel): Inferenz-Ergebnisse dauerhaft gespeichert, kein DSGVO-Loeschpfad Jedes Ticket mit Datei:Zeile-Beleg, konkretem Angriffsszenario, Akzeptanzkriterien und Pruefungen, die den Angriff vor dem Fix real nachstellen. Nur Board-/Ticketdaten, keine Code-Aenderung in dieser PR. Kein Merge, kein Deploy. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
patrick added 76 commits 2026-10-17 13:20:28 +02:00
security-threat-model-Skill gegen Core, DMS, Mail, Archive, Workflow, AI
und Connect durchlaufen. SICHERHEITSKONZEPT.md um Abschnitte 13-19
erweitert (ein Threat Model je Board), 33 neue Tickets in je einer neuen
Welle pro Board angelegt.

Wiederkehrende Lücken: modulübergreifende Rückkanäle/Registrierungen
vertrauten dem Tenant-Kontext des aufrufenden Moduls ohne unabhängige
Core-Registry-Prüfung; "unveränderlich"/"append-only" war teils nur
Anwendungskonvention statt technischer DB-Durchsetzung.

nexarch-state.json gesamtsumme neu berechnet (390 Tickets, 997 PT).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QPsyieCYwvbUBsnN598SbP
Vollständiger Projektstand aus vorherigen Sessions erstmals eingecheckt:
sieben Kanban-Boards (core, dms, mail, archive, workflow, ai, connect) mit
allen Tickets, migration-kanban, sowie Konzeptdokumente (PRODUKTARCHITEKTUR,
SICHERHEITSKONZEPT-Update, MIGRATIONSKONZEPT, SKALIERUNGSKONZEPT,
STORAGE-KONZEPT, SAAS-BETRIEBSMODELL, UI-UX-KONZEPT, LIZENZMODELL, ROADMAP,
USP, VERGLEICHSPROJEKTE, PROXMOX-DEPLOYMENT, DEVLOG).

code/ (eigenständiges Go-Repo) und dms-kanban.zip (Alt-Export) bewusst
ausgeschlossen (.gitignore).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
CMP-04, QA-01, CMP-01, CMP-03, ANA-01, QA-06, ANA-02, ANA-03, BAK-09,
BAK-10 - Code+Tests gepusht als PRs #1-#11 in scripte/nexarch (Gitea),
noch nicht gemergt.

Nicht angefasst: QA-02/QA-03/QA-05/QA-07/CMP-05 haengen von RET-03/
CMP-02/CMP-06/CMP-07 ab, die nur in einem aelteren, nie mit dem hier
fortgefuehrten Strang zusammengefuehrten Branch existieren (siehe
Claude-Memory project_nexarch_archive_branch_split). CSV/HTML-Spiegel
dieses Boards bewusst nicht mitaktualisiert (Bookkeeping, nicht Teil
eines Tickets).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Gegenstueck zu DMS INT-14, dessen Verzeichniszuordnung bisher in einer lokalen Datei liegt.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
INT-19 (Mobile Erfassung) war seit INT-17-ENTSCHEIDUNG.md als
zurückgestellter Kanal vorgemerkt, jetzt zur Umsetzung ausformuliert.
INT-21 haelt die vom Nutzer gewuenschte native Android-App als
eigenstaendiges, spaeter auszuarbeitendes Vorhaben fest (Build-Host 236
mit vorhandenem Android-SDK bestaetigt), ohne INT-19 zu ersetzen.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Nutzerentscheidungen 2026-09-26 eingearbeitet: Token-Auth (Login +
langlebiges Zugriffstoken), internes APK-Hosting statt Play Store,
Offline-Warteschlange mit automatischer Nachreichung. Baut auf INT-19
und der bestehenden DOC-01-Upload-API auf. Build ausschließlich auf
Host 236 (Android-SDK dort vorhanden), nichts auf der
Entwicklungsmaschine installieren.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Über 20 einzelne web/-Apps ohne gemeinsame Navigation entstanden.
SHL-02 verlinkt sie über eine rechte-/feature-flag-gesteuerte
Portal-Startseite, ohne die Module selbst zu verändern.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Aus INT-21 (Android-App) entstandener Bedarf: Client kennt nur eine
Server-Grundadresse, muss echte Modul-Endpunkte ermitteln koennen.
Bisher nirgends vorhanden. Nutzerentscheidung: fuer INT-21 vorerst
bei zwei manuell eingegebenen Feldern bleiben, Discovery als eigenes,
spaeteres Ticket.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Beim SHL-02-Portal-Ausbau entdeckt: policy_rules-Katalog nur fuer DMS
befuellt, Portal nutzte erfundene Platzhalter fuer Mail/Workflow/AI/
Connect/Core-Admin. RBAC-12 legt echte, granulare Rechte fuer diese
fuenf Module an, analog zum bestehenden dms.*-Muster.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
War seit INT-17-ENTSCHEIDUNG.md als zurückgestellter Kanal
vorgemerkt, jetzt zur Umsetzung freigegeben und ausformuliert,
analog zu INT-19s Aufbau.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Beide QA-15-Befunde waren als 'zu riskant/geringer Nutzen fuer den
Aufwand' zurueckgestellt, jetzt vom Nutzer zur Umsetzung freigegeben.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
CMP-01, CMP-03, CMP-04, CMP-05, ANA-01, ANA-02, ANA-03, RET-11, RET-12,
BAK-09, BAK-10, QA-01, QA-06 waren laengst gemergt, Board stand noch auf
Backlog. Gegen git log (archive/-Pfad, Titelabgleich) verifiziert.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Vier echte Backlog-Tickets implementiert, getestet, Branch gepusht,
PR offen (kein Merge): QA-02 (#309), QA-03 (#308), QA-07 (#310),
QA-05 (#311, Gesamtabnahme, bedingte Freigabe).

Echter Fund: WORM-Storage-Object-Lock (chattr +i) auf allen bisher
geprueften Hosts (131, 204) strukturell nicht nachweisbar (LXC/ZFS),
fail-closed, STORAGE-KONZEPT.md widerspricht RET-11 bzgl. ZFS --
als offenes Restrisiko dokumentiert, nicht geloest.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
RET-15 (echter chattr-faehiger-Host-Nachweis), RET-16 (STORAGE-KONZEPT.md
Widerspruch ZFS/WORM klaeren), CMP-08 (eDiscovery Ende-zu-Ende-Nachweis
gegen echte DMS/Mail-Instanzen) -- alle drei aus den Empfehlungen des
QA-05-Abnahmeprotokolls (PR #311), nur angelegt, nicht implementiert.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Nach PR #312 (RET-11-Nachtrag): nicht ZFS verhindert chattr +i, sondern
unprivilegierte LXC-Container (CAP_LINUX_IMMUTABLE nicht namespace-bewusst,
Kernel-Design). Tickettexte entsprechend korrigiert.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
20 stale Backlog-Eintraege (ENG-01..06/08, ERP-01..04, DAT-01..03,
M365-01..03, DMS2-01..03, API-02, QA-01) waren laengst gemergt.

ENG-10 (Kill-Switch/Ausfallisolation) war bereits implementiert+gemergt
(PR #225, 2026-09-27), fehlte aber komplett im Board -- nachgetragen.

Batch 1 dieser Session umgesetzt, PR offen (kein Merge): ENG-07 (#313),
API-01 (#318), API-03 (#316), QA-02 (#315), QA-03 (#317), QA-07 (#314).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
PR offen (kein Merge): QA-04 (#320, echter KEK-Rotations-Fund+Fix),
QA-06 (#319), QA-08 (#321, 0 Verstoesse, Bildschirmleser-Luecke wie UX-06).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
PR #322, bedingte Freigabe mit 7 dokumentierten Restrisiken.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Fuenf Tickets fuer verifizierte Security-Befunde (main-Branch, Fable 5.1):
K1 fehlende Authentifizierung/Tenant-Verifikation, H12 Zip-Bomb im
DMS2-Import, H15 fehlendes Append-only in Connect-Migrationen, M16
Fremdsystem-Antwortkoerper in last_error, M17 tenant-ungebundene
Store-Methoden (IDOR). Neues Epic "Sicherheit" angelegt, Board auf
Backlog, Welle 8.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Verifizierte Befunde (main, Fable 5.1, Datei:Zeile-Belege): Approver-Impersonation
ueber X-User-Id auf allen Fach-APIs (SEC-01), nicht verdrahtetes Vier-Augen-Prinzip
mit fail-open (SEC-02), schreibbare Routing-Regeln ohne Rollenpruefung und
Rueckkanal ohne Service-Auth (SEC-03), Dedupe-Key-Vergiftung durch abgelehnte
Fremd-Tenant-Events (SEC-04), rohe DB-Fehler in HTTP-Antworten (SEC-05) und
fehlende Append-only-Durchsetzung bei mehreren Protokolltabellen (SEC-06).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Verifizierte Befunde aus Security-Review (main, Fable 5.1): RBAC via
Client-Header statt verifizierter Identitaet, fehlende Tenant-Validierung
in kennzahlenapi, TOCTOU bei Legal Hold vs. Destroy, wormstore ohne
Legal-Hold-Pruefung, fehlende Tenant-Bindung bei moduleadapter-Registrierung,
Append-only-Luecken bei mehreren Archive-Tabellen.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Legt 9 Tickets (SEC-01..SEC-09) für verifizierte Security-Review-Befunde
(H3-H5, M5-M10) auf dem core-kanban-Board an: Revocation-Durchsetzung,
2FA-Downgrade-Schutz, resync-api Tenant-Bindung, Passwort-Policy,
kek-api Audit-Anbindung, HS256-Tenant-Bindung, Superadmin-Identitaet,
statuspage-devserver CORS, X-Forwarded-For Rate-Limit-Bypass.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Legt 7 Tickets für verifizierte Security-Befunde (Fable 5.1, main, Datei:Zeile-Belege)
im neuen Epic "Sicherheit" an: unauthentifizierter Vernichtungs-Rückruf, Mail-Postfach-
verwaltung ohne Rollenprüfung, Guard-Lücken bei Trash/Folders/Triggers, Virenscan nicht
standardmäßig eingereiht, unbegrenztes Upload-Limit, TENANT_SLUG-Lücke im Modul-Verifier,
ALLOW_CALLER_IDENTITY-Auth-Bypass. Alle als Backlog auf board.csv/board.json übernommen.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Fuenf verifizierte Befunde (main, Fable 5.1, Datei:Zeile) aus dem aktuellen
Security-Review als Tickets im neuen Epic "Sicherheit" angelegt: fehlender
Tenant-Verifier (SEC-01), ungeprüfte Datenresidenz-Freigabe (SEC-02),
wirkungsloses Quota-Enforcement (SEC-03), fehlende Security-Header/Body-Limit
(SEC-04) und fehlender DSGVO-Löschpfad für Inferenz-Ergebnisse (SEC-05).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Author
Owner

Branch ohne gemeinsame Historie zu main (orphan) und enthaelt nur Tickets fuer ein inzwischen aus main entferntes Kanban-Board (PR #367). Kein Merge-Wert mehr, geschlossen.

Branch ohne gemeinsame Historie zu main (orphan) und enthaelt nur Tickets fuer ein inzwischen aus main entferntes Kanban-Board (PR #367). Kein Merge-Wert mehr, geschlossen.
patrick closed this pull request 2026-10-19 12:33:55 +02:00

Pull request closed

Please reopen this pull request to perform a merge.
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: scripte/nexarch#359