From 363874767b0eebacd8aff96a314c46972c607916 Mon Sep 17 00:00:00 2001 From: sysops Date: Thu, 25 Jun 2026 00:31:41 +0200 Subject: [PATCH] fix(PROJ-61): Cross-Tenant Stored XSS via Mandanten-Logo behoben (Sicherheitsbug) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit GET /api/tenants/{id}/logo prüfte nur die Authentifizierung, aber keinen Tenant-Scope — jeder eingeloggte Nutzer konnte das Logo jedes beliebigen Tenants lesen. Kombiniert mit dem bisher erlaubten SVG-Upload (kann eingebettetes JavaScript enthalten) ergab das einen Cross-Tenant Stored-XSS: ein domain_admin konnte ein bösartiges SVG als eigenes Logo hochladen und Opfer aus beliebigen anderen Tenants per direktem Link darauf locken. Fix: tenantAccessAllowed()-Scope-Check beim Logo-Lesepfad (analog PROJ-55), SVG aus erlaubten Upload-Typen entfernt, X-Content-Type-Options: nosniff als Defense-in-Depth ergänzt. Co-Authored-By: Claude Sonnet 4.6 --- features/INDEX.md | 3 +- features/PROJ-61-fix-tenant-logo-xss-idor.md | 53 ++++++++++++++++++++ internal/api/ldap_tenants.go | 2 +- internal/api/tenant_logo_handlers.go | 24 ++++++--- 4 files changed, 73 insertions(+), 9 deletions(-) create mode 100644 features/PROJ-61-fix-tenant-logo-xss-idor.md diff --git a/features/INDEX.md b/features/INDEX.md index 526b8f0..43218f2 100644 --- a/features/INDEX.md +++ b/features/INDEX.md @@ -75,7 +75,8 @@ | PROJ-56 | Last-Entzerrung für Hintergrundjobs (OCR-Zeitfenster, IMAP-Sync-Jitter) | Deployed | [PROJ-56](PROJ-56-last-entzerrung-hintergrundjobs.md) | 2026-06-22 | | PROJ-57 | UTF-8-Encoding-Fix für Mails mit Nicht-UTF-8-Charset | Deployed | [PROJ-57](PROJ-57-utf8-encoding-fix.md) | 2026-06-24 | | PROJ-58 | Indexierung + OCR als Cron-Batch-Jobs (statt Dauerbetrieb) | Deployed | [PROJ-58](PROJ-58-cron-batch-index-ocr.md) | 2026-06-24 | +| PROJ-61 | Fix Cross-Tenant Stored XSS via Mandanten-Logo (Sicherheitsbug) | Deployed | [PROJ-61](PROJ-61-fix-tenant-logo-xss-idor.md) | 2026-06-25 | -## Next Available ID: PROJ-59 +## Next Available ID: PROJ-62 diff --git a/features/PROJ-61-fix-tenant-logo-xss-idor.md b/features/PROJ-61-fix-tenant-logo-xss-idor.md new file mode 100644 index 0000000..e19ae15 --- /dev/null +++ b/features/PROJ-61-fix-tenant-logo-xss-idor.md @@ -0,0 +1,53 @@ +# PROJ-61: Fix Cross-Tenant Stored XSS via Mandanten-Logo (Sicherheitsbug) + +## Status: Deployed +**Created:** 2026-06-25 +**Last Updated:** 2026-06-25 + +## Hintergrund (Security-Audit, 2026-06-25) +Nachtrag zum letzten Audit (docs/security-audit-2026-03-18.md) über alle Commits seit März (PROJ-25–60). Zwei kombinierte Lücken in den Tenant-Logo-Handlern (eingeführt mit Multi-Tenancy-Ausbau): + +1. `POST /api/tenant/logo` (eigener Tenant, `domain_admin` reicht) akzeptiert `image/svg+xml` ohne Sanitisierung. SVG kann `