Severity by source
AV:N/AC:H/PR:H/UI:N/S:C/C:N/I:H/A:L
AC:L chosen over vendor AC:H because crafting a path-traversal theme name is straightforward with no attacker-uncontrollable conditions; PR:H retained as staff authentication is required; S:C reflects writes escaping the uploads directory boundary.
Primary rating from Vendor (https://github.com/TryGhost/Ghost).
CVSS VectorVendor: https://github.com/TryGhost/Ghost
Lifecycle Timeline
2DescriptionCVE.org
Impact
A vulnerability in custom themes allowed a staff user to write files outside of the uploads directory. This could be used to alter the behavior of the installation.
Vulnerable versions
This vulnerability is present in Ghost from v0.10.0 up to v6.54.0.
Patches
v6.54.1 contains a fix for this issue.
How to update
For self-hosters using Docker, find Docker's official Ghost image here. Updating a Docker-based Ghost instance is documented here.
If your Ghost is a Ghost-CLI install see our documentation on updating it to the latest version here.
References
Ghost thanks Stephen Sims, Off By One Security for disclosing this vulnerability responsibly.
For more information
If you have any questions or comments about this advisory, email Ghost at [security@ghost.org](mailto:security@ghost.org).
AnalysisAI
Path traversal in Ghost CMS theme upload (CWE-22) allows an authenticated staff-level user to write arbitrary files outside the designated uploads directory, potentially altering the behavior of the entire Ghost installation. Affected versions span v0.10.0 through v6.54.0 of the npm/ghost package - a wide range covering essentially all modern deployments. No public exploit code or CISA KEV listing exists at time of analysis; however, the CVSS Scope:Changed metric reflects that a successful write can affect components beyond the theme storage boundary, elevating the real-world impact above the moderate base score suggests.
Technical ContextAI
Ghost is a Node.js headless CMS distributed as the npm package pkg:npm/ghost. The vulnerability exists in two components: ghost/core/core/server/services/themes/storage.js, which processes incoming theme names, and ghost/core/core/server/adapters/storage/LocalStorageBase.ts, the shared storage adapter responsible for resolving and writing files to disk. The root cause (CWE-22: Improper Limitation of a Pathname to a Restricted Directory) is the absence of boundary validation on theme names and resolved file paths - a theme archive with a name containing ../ sequences would cause path.join() to resolve a destination outside content/themes/. The patch (commit fbaa92327e52607036a1e42204c9eadcc751d82c) adds two independent controls: a regex /^[./]*$/ in themes/storage.js to reject names composed entirely of path traversal characters, and a path.resolve() prefix check in LocalStorageBase.ts ensuring the resolved output path starts within the declared target directory.
RemediationAI
Upgrade Ghost to v6.54.1 or later, which contains the complete fix (commit fbaa92327e52607036a1e42204c9eadcc751d82c). For Docker deployments, update the official ghost image following https://docs.ghost.org/install/docker#updating-ghost; for Ghost-CLI installations, follow https://docs.ghost.org/update. Vendor-released patch version v6.54.1 is independently confirmed via the GitHub release tag. If immediate patching is not feasible, restrict staff-role membership to fully trusted users as a compensating control, since the attack requires an authenticated staff session - note this does not eliminate the vulnerability but reduces the attacker population. There is no configuration switch to disable theme uploads without broader functional impact to Ghost's customization workflow.
An issue was discovered in Appsmith before 1.52. Rated critical severity (CVSS 9.8), this vulnerability is remotely expl
runc through version 1.0-rc6 (used in Docker before 18.09.2) contains a container escape vulnerability that allows attac
Netmaker makes networks with WireGuard. Rated high severity (CVSS 7.5), this vulnerability is remotely exploitable, no a
Unauthenticated remote code execution in Marimo ≤0.20.4 allows attackers to execute arbitrary system commands via the `/
The News & Blog Designer Pack - WordPress Blog Plugin - (Blog Post Grid, Blog Post Slider, Blog Post Carousel, Blog Post
Path traversal in JFrog Artifactory (CWE-22) enables an authenticated low-privilege user to write data outside the inten
Docker 1.3.2 allows remote attackers to execute arbitrary code with root privileges via a crafted (1) image or (2) build
Remote code execution in Gogs through 0.14.2 allows authenticated users (and unauthenticated attackers on default-config
Remote code execution in Flowise before 3.1.2 allows any authenticated user (or API caller with chatflow view/update per
Remote code execution in NocoBase Workflow Script Node (npm @nocobase/plugin-workflow-javascript) allows authenticated l
Docker Desktop Community Edition before 2.1.0.1 allows local users to gain privileges by placing a Trojan horse docker-c
Vasion Print (formerly PrinterLogic) Virtual Appliance Host prior to version 25.2.169 and Application prior to version 2
Same weakness CWE-22 – Path Traversal
View allSame technique Path Traversal
View allShare
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-52977
GHSA-cjc9-q5gf-327p