Logo-upload vertrouwde browser-gerapporteerd MIME-type #92

Closed
opened 2026-05-26 18:23:28 +00:00 by jesse-a · 1 comment
Owner

Severity: MEDIUM

uploadLogo() in src/app/actions/settings.ts vertrouwde file.type blindelings. Een aanvaller kon een PHP-bestand met Content-Type: image/png-header uploaden. De server stuurt nosniff-headers dus directe XSS was niet exploiteerbaar, maar het is geen sterke verdediging.

Fix: magic-bytes-verificatie. PNG (89 50 4E 47 0D 0A 1A 0A) en JPG (FF D8 FF) headers worden gelezen en vergeleken met het beweerde MIME-type. Mismatch → upload geweigerd. logoMimeType in DB wordt overschreven met het FEITELIJK gedetecteerde type.

Files: src/app/actions/settings.ts

**Severity: MEDIUM** `uploadLogo()` in `src/app/actions/settings.ts` vertrouwde `file.type` blindelings. Een aanvaller kon een PHP-bestand met `Content-Type: image/png`-header uploaden. De server stuurt `nosniff`-headers dus directe XSS was niet exploiteerbaar, maar het is geen sterke verdediging. **Fix**: magic-bytes-verificatie. PNG (`89 50 4E 47 0D 0A 1A 0A`) en JPG (`FF D8 FF`) headers worden gelezen en vergeleken met het beweerde MIME-type. Mismatch → upload geweigerd. `logoMimeType` in DB wordt overschreven met het FEITELIJK gedetecteerde type. **Files**: src/app/actions/settings.ts
Author
Owner

Opgelost in commit fbc8fdf.

Opgelost in commit fbc8fdf.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
jesse-a/OpenCRM#92
No description provided.