CVE-2026-58657

Grav - Stored CSS Injection via Markdown Image resize() Action

MEDIUM
4.8
CVSS Score
Published: July 8, 2026 at 01:49 PM UTC
Updated: October 8, 2026 at 04:17 PM UTC
2 products affected across 2 vendorsGravGrav

Using Grav by Grav?

Get instant alerts when new vulnerabilities affect Grav - before attackers find them.

Real-time alertsTrack your software stackFree plan available
Severity
MEDIUM4.8
Exploit prediction
EPSS 0.3%
SSVC
PoC

Description

Grav before 2.0.0 (affected through 2.0.0-rc.9 and the 2.0 branch) contains a stored CSS injection vulnerability in the Markdown image resize() media action. Prior media hardening rejects direct ?style= payloads and unsafe attribute() fallbacks, but the resize() action in Excerpts::processMediaActions() writes caller-controlled values directly into the image's styleAttributes. A lower-privileged content editor who can edit page Markdown can store a crafted image URL with semicolon-delimited CSS declarations in the resize parameters, which are rendered into the final <img style=...> attribute when a higher-privileged reviewer/admin views the page or preview. This does not require JavaScript execution but enables UI redress/overlay and content-manipulation attacks (e.g., a full-viewport fixed overlay). Fixed in 2.0.0.

Affected

Our own answer: ranges merged, affected separated from platform-only, with confidence and review flags.

95%
v < 2.0.0
Affected range stops below 2.0.0, so it looks safe — our inference, not a vendor statement
2.0.0-rc.9 ≤ v < 2.0.02.0.0-rc.9
Vendor states this is fixed in 2.0.0 (unaffected)

SSVC — Action Prioritization

SSVCPoCNot automatablePartial impact

SSVC signals action urgency (what to patch first), separate from CVSS which measures severity.

CVSS

4.8MEDIUMVulnCheck
Vector?

Quick Info

StatusDEFERRED
CWE
CWE-79

Get alerted

Stop reading CVE feeds looking for your own stack

Track the products you run and VulnTracker tells you when a new CVE affects them — with what is known about fixing it, and nothing about the rest.

Free plan, no card