CVE-2026-55466: Snipe-IT: Stored XSS via inline-served attachment

Published Jul 10, 2026
·
Updated

Impact A low-privilege user can store an active-content payload as an asset attachment and have it served inline, same-origin, with an active Content-Type, achieving stored XSS. The application sanitizes uploads only when PHP finfo detects image/svg+xml. By submitting an XHTML document whose finfo MIME is text/xml (an allowed extension), the svg-sanitize branch is skipped, the <script> is stored raw, and the inline-serve path returns it as text/xml; charset=utf-8 with Content-Disposition: inline — which the browser renders as a live XHTML document and executes. The dedicated StorageHelper::allowSafeInline() whitelist that should have constrained inline-renderable types is never wired into the serve path.

Details Vulnerable code — sanitizer keyed on finfo MIME app/Http/Requests/UploadFileRequest.php:46-53

php $extension = $file->getClientOriginalExtension(); $filename = $nameprefix.'-'.strrandom(8).'-'.strslug(...).'.'.$file->guessExtension(); ... if ($file->getMimeType() === 'image/svg+xml') { $uploadedfile = $this->handleSVG($file); // svg-sanitize fires } else { $uploadedfile = filegetcontents($file); // stored RAW — no sanitization }

Vulnerable code — inline serve, no allowSafeInline() app/Http/Controllers/UploadedFilesController.php:103

php if (request('inline') == 'true') { $headers = ['Content-Disposition' => 'inline']; return Storage::download($path.$log->filename, $log->filename, $headers); }

StorageHelper::allowSafeInline() (app/Helpers/StorageHelper.php:88) exists to whitelist inline-renderable types but is not called here. The validation rule (UploadFileRequest::rules()) is mimes: over config('filesystems.alloweduploadextensionsforvalidator'), which includes svg, xml, and txt — so a text/xml file passes validation and bypasses the SVG sanitizer simultaneously.

POC 1. From a fresh install, as a user with only assets.view + assets.files targeting any existing asset created by admin 2. click on the asset created by admin and upload files. 3. create a XML file with the following payload and upload it.

xml <?xml version="1.0"?> <html xmlns="http://www.w3.org/1999/xhtml"> <head><script>alert(document.cookie)</script></head> <body>hi</body> </html>

4. Noticed that it did not receive any error and the file was uploaded. 5. Now, can just get the URL and view it. (need to add the inline=true). image.png

Notice that the XSS was able to request document.cookie. This means that it is possible for low privilege user to perform XSS and perform privilege escalation to admin.

Other sources

Snipe-IT is an IT asset/license management system. Prior to 8.6.2, UploadFileRequest sanitizes SVG content only when PHP finfo reports image/svg+xml and UploadedFilesController serves attachments inline without using StorageHelper::allowSafeInline(), allowing a low-privilege user to upload active XHTML or XML content that is later served same-origin and executes JavaScript in a viewer’s browser. This issue is fixed in version 8.6.2.

MITRE

Affected Software

3 affected componentsFixes available
Snipe-IT Snipe-IT<8.6.2
Snipeitapp Snipe-it<8.6.2
composer/snipe/snipe-it<=8.6.1
8.6.2

Remediation

Recommended actions to resolve this vulnerability, in priority order.

  1. Upgrade

    Upgrade composer/snipe/snipe-it to a version that resolves this vulnerability.

    Fixed in 8.6.2
  2. Upgrade

    Upgrade Snipe-IT to a version that resolves this vulnerability.

    Fixed in 8.6.2
  3. Configuration

    On the inline-serving code path (UploadedFilesController.php:103), ensure the controller calls StorageHelper::allowSafeInline() to restrict which content types may be served inline; the material states this whitelist exists but is not wired into the serve path, enabling stored XSS.

    app/Http/Controllers/UploadedFilesController.php inline serving logic = Use StorageHelper::allowSafeInline() on the inline serve path (and ensure inline=true is constrained by the whitelist instead of serving raw uploaded XML/XHTML).
  4. Configuration

    Update upload validation/sanitization so that bypasses caused by finfo MIME detection and allowed inline-serving are prevented (material: sanitizes SVG only when PHP finfo reports image/svg+xml; text/xml passes mimes validation and skips sanitization).

    app/Http/Requests/UploadFileRequest.php upload sanitization gating = Do not rely only on PHP finfo MIME 'image/svg+xml' to decide whether SVG/XML content is sanitized; ensure that the sanitizer is applied for uploaded types that may be rendered inline (including text/xml/xhtml that can be served inline).

Event History

Jul 10, 2026
CVE Published
via MITRE·07:37 PM
Data Sourced
via MITRE·07:37 PM
DescriptionWeakness
Data Sourced
via NVD·08:16 PM
RemedyDescriptionSeverityWeaknessAffected Software
Aug 28, 2026
Advisory Published
via GitHub·05:59 PM
Data Sourced
via GitHub·05:59 PM
DescriptionSeverityWeaknessAffected Software

Frequently Asked Questions

1

What is the severity of CVE-2026-55466?

The severity of CVE-2026-55466 is classified as medium with a CVSS score of 6.2.

2

How do I fix CVE-2026-55466?

To fix CVE-2026-55466, update Snipe-IT to version 8.6.2 or later.

3

What type of vulnerability is CVE-2026-55466?

CVE-2026-55466 is a stored cross-site scripting (XSS) vulnerability.

4

What are the potential consequences of CVE-2026-55466?

CVE-2026-55466 allows low-privilege users to upload malicious SVG files that can execute scripts in the context of other users.

5

Who is affected by CVE-2026-55466?

Any installations of Snipe-IT prior to version 8.6.2 are affected by CVE-2026-55466.

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2026 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203