case 4727 - logo uploads checked by content, change rights, served sandboxed
Logo upload and delete need change rights on Global (was read rights, which BizAdminRestricted has). The image type is taken from the bytes: PNG, JPEG, GIF, WebP or SVG, anything else refused; the claimed type is not stored. Downloads send nosniff and a sandbox Content-Security-Policy, so an SVG opened by its URL runs no script. F23 fixed (4727 step 1). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -208,7 +208,7 @@ take the next free number; a fixed or accepted finding keeps its ID and changes
|
||||
| F28 | High | **fixed in case 4713** | Users with change rights on Customer (Service, Sales, Accounting) can give customer contact logins any role, BizAdmin and OpsAdmin included |
|
||||
| F33 | High | **fixed in case 4721** | Client renders some record text as HTML without escaping (search results, work-order address dialog, unit warranty info, dialogs) |
|
||||
| F3 | High | **fixed in cases 4712 and 4723** (staff sending to any address kept, by design) | Any logged-in user, customer contacts included, can send arbitrary email through the company's SMTP server |
|
||||
| F23 | Medium | confirmed (code) | Logo upload accepts any content type and the anonymous logo route serves it inline from the app's origin (stored XSS) |
|
||||
| F23 | Medium | **fixed in case 4727** | Logo upload accepts any content type and the anonymous logo route serves it inline from the app's origin (stored XSS) |
|
||||
| F24 | Medium | **fixed in case 4718** | Translation import has no role check: any login can add translations |
|
||||
| F30 | Medium | **fixed in case 4724** | SMTP: the mail server's TLS certificate is never checked |
|
||||
| F31 | Medium | **fixed in case 4724** | The SMTP password is returned to read-only roles (OpsAdminRestricted, BizAdmin, BizAdminRestricted) |
|
||||
@@ -522,6 +522,8 @@ BizAdminRestricted, whose rights on Global are meant to be read-only. Fix: requi
|
||||
no SVG); serve with `X-Content-Type-Options: nosniff` and a restrictive
|
||||
`Content-Security-Policy` (pass 9 looks at headers generally).
|
||||
|
||||
**Fixed in case 4727, step 1 (2026-10-24):** upload and delete need `HasModifyRole(Global)` (BizAdmin); the type is taken from the bytes (PNG, JPEG, GIF, WebP, SVG; anything else refused, the claimed and stored types are ignored); downloads send `nosniff` and `Content-Security-Policy: default-src 'none'; style-src 'unsafe-inline'; sandbox`. SVG is kept (the client accepts any image, so existing customers may have one): the sandbox stops its script when it is opened by URL, `<img>` use is unaffected. Test `LogoSafety`; an SVG with a script was uploaded, served sandboxed, and the original logo restored.
|
||||
|
||||
### F24 Translation import without a role check (pass 5, from code)
|
||||
|
||||
`TranslationController.UploadAsync` (`POST translation/upload`) and `TranslationBiz.ImportAsync`
|
||||
|
||||
Reference in New Issue
Block a user