
CVE-2026-23499 - Saleor vulnerable to stored XSS via Unrestricted File Upload
| Field | Details |
|---|---|
| CVE ID | CVE-2026-23499 |
| Severity | HIGH |
| Advisory | View Advisory |
| Discovered by | Lukasz Rybak |
Saleor allowed authenticated staff users or Apps to upload arbitrary files, including malicious HTML and SVG files containing Javascript. Depending on the deployment strategy, these files may be served from the same domain as the dashboard without any restrictions leading to the execution of malicious scripts in the context of the user's browser.
Malicious staff members could craft script injections to target other staff members, possibly stealing their access and/or refresh tokens.
You are impacted if:
example.com/dashboard/ and media are under example.com/media/ - you are not impact if media files are hosted in a different domain, e.g., media.example.com.Content-Disposition: attachment header for the media files.Saleor Cloud users are not impacted.
This issue has been patched in versions: 3.22.27, 3.21.43, and 3.20.108.
IMPORTANT: if you believe you are impacted, or if you are unsure or want to verify, you should run the following command:
$ ./manage.py remove_invalid_files
This scans all uploaded files (in the media storage, e.g., the filesystem, a S3 bucket, etc.). You should look for unexpected files, if you see differences, then either:
./manage.py remove_invalid_files --apply)We strongly recommend upgrading to the latest versions, in case of inability to upgrade straight away, a possible workarounds are:
Content-Security-Policy for media files, such as Content-Security-Policy: default-src 'none'; base-uri 'none'; frame-ancestors 'none'; form-action 'none';main patch: https://github.com/saleor/saleor/commit/b3cb27b3fe96dae3c879063e56d32a9398eabd24This vulnerability was reported by Łukasz Rybak.
This CVE was responsibly disclosed following coordinated vulnerability disclosure practices. The information provided here is for educational and defensive purposes only.