CVE-2026-61607 Grav API Plugin: Stored XSS via SVG Upload - API Media Pipeline Bypasses Sanitizer
An attacker with media write permissions can upload malicious SVGs to execute JavaScript in victim browsers, stealing sessions and performing actions.
- Exploited in the wild
- Not known
- Login needed
- Any signed-in user
- Attackable
- Over the internet
- Victim action needed
- A user has to click or open something
- Fix
- None listed
What is CVE-2026-61607?
CVE-2026-61607 is a medium-severity cross-site scripting vulnerability in getgrav grav-plugin-api, published on 19 Aug 2026. Any signed-in user can exploit it over the network, and only if a user opens a file or follows a link.
Official description
Grav API Plugin is a RESTful API for Grav CMS that provides full headless access to your site's content. Prior to 1.0.2, the Grav API plugin POST /api/v1/media pipeline in HandlesMediaUploads::processUploadedFile() validates an SVG filename extension but does not invoke Security::sanitizeSVG(). An attacker with api.media.write permission can store an SVG containing JavaScript, and the server returns the file as Content-Type: image/svg+xml so the script executes when a victim opens it, allowing session data theft and authenticated actions. This issue is fixed in version 1.0.2.
Weakness: CWE-79
Which versions are affected by CVE-2026-61607?
How do I fix CVE-2026-61607?
No fix has been published for CVE-2026-61607 yet. Limit exposure of the affected software until one is available.
Escape output for the context it lands in and set a strict Content Security Policy. Upgrading the affected component is the real fix. More about Cross-site scripting.
Is CVE-2026-61607 being exploited?
It is not confirmed as exploited in the wild, but public exploit code for CVE-2026-61607 exists.