From f8ea417799f4caefd7d0b8db534aaf304e6bbaec Mon Sep 17 00:00:00 2001 From: Test User Date: Fri, 17 Apr 2026 06:45:06 +0000 Subject: [PATCH] fix(GRO-642): sanitize logo MIME type to prevent XSS in data URL rendering Add ALLOWED_LOGO_TYPES allowlist check before constructing data URL from user-controlled logoBase64 and logoMimeType fields. Only MIME types that the API explicitly accepts (image/png, image/jpeg, image/gif, image/webp, image/svg+xml) can be rendered as data URLs. Co-Authored-By: Paperclip --- apps/web/src/pages/Settings.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/apps/web/src/pages/Settings.tsx b/apps/web/src/pages/Settings.tsx index 5ccb943..291b5e1 100644 --- a/apps/web/src/pages/Settings.tsx +++ b/apps/web/src/pages/Settings.tsx @@ -27,6 +27,8 @@ interface AuthProviderForm { const REDACTED = "••••••••"; +const ALLOWED_LOGO_TYPES = new Set(["image/png", "image/jpeg", "image/gif", "image/webp", "image/svg+xml"]); + interface CurrentUser { id: string; name: string; @@ -326,7 +328,7 @@ issuerUrl: authForm.issuerUrl, if (!loaded) return

Loading settings...

; - const logoSrc = form.logoUrl ?? (form.logoBase64 && form.logoMimeType ? `data:${form.logoMimeType};base64,${form.logoBase64}` : null); + const logoSrc = form.logoUrl ?? (form.logoBase64 && form.logoMimeType && ALLOWED_LOGO_TYPES.has(form.logoMimeType) ? `data:${form.logoMimeType};base64,${form.logoBase64}` : null); return (