CVE-2026-69089
published 2026-08-03CVE-2026-69089: Grav CMS 2.0.10 contains a path traversal vulnerability in ImageMedium::watermark(), which passes its unsanitized $image argument to…
PriorityP351high7.5CVSS 3.1
AVNACLPRNUINSUCHINAN
EPSS
0.46%
38.8th percentile
Grav CMS 2.0.10 contains a path traversal vulnerability in ImageMedium::watermark(), which passes its unsanitized $image argument to RocketTheme\Toolbox\ResourceLocator\UniformResourceLocator::findResource(). Because the file:// scheme branch only lexically collapses '..' segments without a realpath/containment check, an editor authoring Markdown image syntax with traversal sequences can cause arbitrary image files outside Grav's media sandbox to be composited into a carrier image, which is then cached and served from a public, unauthenticated URL — disclosing those files to anonymous visitors.
Affected
2 ranges
| Vendor | Product | Version range | Fixed in |
|---|---|---|---|
| getgrav | grav | < 2.0.11 | 2.0.11 |
| getgrav | grav | >= 2.0.10 < 2.0.11 | 2.0.11 |
CVSS provenance
nvdv3.17.5HIGHCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
nvdv4.08.7HIGHCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
Stop checking back — get the weekly exploitation signal.
Every Monday: what got weaponized or added to CISA KEV in the last seven days — each CVE cross-linked to its PoC, Nuclei template, and detection rule. Free, one email a week, unsubscribe in one click.
GHSA
Grav: Path Traversal in ImageMedium::watermark() — arbitrary file disclosure via publicly-cached images
ghsa·2026-09-17
CVE-2026-69089 [HIGH] CWE-22 Grav: Path Traversal in ImageMedium::watermark() — arbitrary file disclosure via publicly-cached images
Grav: Path Traversal in ImageMedium::watermark() — arbitrary file disclosure via publicly-cached images
Reported by: Nihad Huseynli (@nihaddhuseynli (https://github.com/nihaddhuseynli)) — [email protected]
▎ Note: I attempted to report this via [email protected] first, per SECURITY.md, but the email bounced with 550 5.1.1 Address does not exist. Filing directly here instead.
Path Traversal in ImageMedium::watermark() leading to arbitrary file disclosure via publicly-served images
Summary
The watermark media action, documented and allow-listed for use in editor-authored Markdown image syntax, passes its $image argument unsanitized into UniformResourceLocator::findResource(). That resolver only lexically collapses .. segments (no realpath()/containment check) and, for the def
VulDB
getgrav Grav up to 2.0.10 ImageMedium ImageMedium::watermark image path traversal (EUVD-2026-52282)
vuldb·2026-09-01·CVSS 7.5
CVE-2026-69089 [HIGH] getgrav Grav up to 2.0.10 ImageMedium ImageMedium::watermark image path traversal (EUVD-2026-52282)
A vulnerability classified as problematic has been found in getgrav Grav up to 2.0.10. This issue affects the function ImageMedium::watermark of the component ImageMedium. Performing a manipulation of the argument image results in path traversal.
This vulnerability is reported as CVE-2026-69089. The attack is possible to be carried out remotely. No exploit exists.
It is recommended to upgrade the affected component.
GHSA
Grav CMS 2.0.10 contains a path traversal vulnerability in ImageMedium::watermark(), which passes its unsanitized $image argument to RocketTheme\Toolbox\ResourceLocator\UniformResourceLocator::findRes
ghsa_unreviewed·2026-08-03
CVE-2026-69089 [HIGH] CWE-22 Grav CMS 2.0.10 contains a path traversal vulnerability in ImageMedium::watermark(), which passes its unsanitized $image argument to RocketTheme\Toolbox\ResourceLocator\UniformResourceLocator::findRes
Grav CMS 2.0.10 contains a path traversal vulnerability in ImageMedium::watermark(), which passes its unsanitized $image argument to RocketTheme\Toolbox\ResourceLocator\UniformResourceLocator::findResource(). Because the file:// scheme branch only lexically collapses '..' segments without a realpath/containment check, an editor authoring Markdown image syntax with traversal sequences can cause arbitrary image files outside Grav's media sandbox to be composited into a carrier image, which is then cached and served from a public, unauthenticated URL — disclosing those files to anonymous visitors.
No detection rules found.
No public exploits indexed.
No writeups or analysis indexed.
https://github.com/getgrav/grav/commit/b282200a65ce979377963180629babd2335212bahttps://github.com/getgrav/grav/commit/c569a53304cd7d95ff21bffa6fc590adcf0be83dhttps://github.com/getgrav/grav/commit/db8c1fcd63aaaf6d6b244bc6b4cfa5f7b96bbc7fhttps://github.com/getgrav/grav/security/advisories/GHSA-w3f4-8pj2-599whttps://www.vulncheck.com/advisories/grav-cms-before-path-traversal-via-watermarkhttps://github.com/getgrav/grav/security/advisories/GHSA-w3f4-8pj2-599w
2026-08-03
Published