Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate as staff user
-
DeliveryUpload crafted script file to local storage
-
ExploitFile served with executable content type on site domain
-
ExecutionLure/wait for admin to load URL
-
PersistScript runs in victim's session
-
ImpactHijack admin session and escalate privileges
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Output encoding, context-aware escaping
MITRE ATT&CK
2 techniques across 2 tactics: Initial Access, Execution The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires: (1) the site must use Ghost's DEFAULT local storage adapter - sites on S3 or other cloud adapters are not affected because those store and serve an inert content type; (2) the attacker must be an authenticated staff user with file-upload privileges; and (3) a victim staff/admin user must load the uploaded file's URL in their browser (UI:R). The attack is limited to the window of Ghost versions 6.22.1 through 6.63.x and is neutralized in 6.64.0, which forces an inert content type plus nosniff. The requirement for staff-level authentication and victim interaction is the primary limiting factor; this is not exploitable by unauthenticated or anonymous visitors. |
| Impact | This is a stored XSS flaw (CWE-79) in Ghost CMS carrying a vendor/NVD CVSS of 7.3 (CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:U/C:H/I:H/A:N). The network vector and low complexity are real, but two factors meaningfully constrain actual risk: PR:L means the attacker must already be an authenticated staff user, and UI:R means a second staff user must load the malicious file. No EPSS score, CISA KEV listing, or public POC was provided, so there is no public exploit identified at time of analysis and no evidence of active or widespread exploitation. The signals are internally consistent - the CVSS vector matches the description (authenticated upload, victim interaction, confidentiality/integrity impact on admin sessions, no availability impact). Realistically this is a privilege-escalation/lateral-movement primitive among staff accounts rather than an unauthenticated internet-facing RCE: a genuine issue to patch, but closer to a mid-tier priority than an emergency given the authentication and interaction prerequisites. The one condition worth verifying is the storage adapter: the flaw only affects sites on the default local storage adapter (S3/cloud adapters already set an inert content type), so exposure depends on deployment configuration. |
| Exploit ScenarioDerived | A malicious or compromised staff user on a Ghost site using the default local storage adapter uploads a crafted file (e.g. an HTML or JS payload) that Ghost serves with an executable content type derived from its extension. When another staff user - such as an administrator - visits the attacker-controlled URL on the site's own domain, the script executes in their browser context and can hijack their admin session. No public exploit code is identified at time of analysis, but the technique is straightforward for anyone with staff upload access. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 05, 2026
Stored cross-site scripting in Ghost CMS 6.22.1 through 6.63.x lets an authenticated staff user with upload privileges host a browser-executable file on the site's own domain when the default local storage adapter is in use, potentially compromising other staff members' admin sessions. The flaw arises because the local storage adapter serves uploaded files with a Content-Type derived from the file extension instead of the inert type Ghost applies elsewhere, and it requires a victim staff or admin user to load the uploaded file's URL (CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:U/C:H/I:H/A:N, base 7.3). Sites using S3 or other cloud storage adapters are not affected, and the issue is fully neutralized in 6.64.0; there is no public exploit identified at time of analysis and no confirmed active exploitation (not in CISA KEV).
RemediationAI
Vendor-released patch: upgrade Ghost to 6.64.0 (https://github.com/TryGhost/Ghost/releases/tag/v6.64.0), which forces the inert, non-executable content type for locally stored uploaded files and adds X-Content-Type-Options: nosniff as implemented in commit 58669d5c8b898f8b69c1287c2779b29ecc7eb918 and pull request https://github.com/TryGhost/Ghost/pull/30762; consult the vendor advisory at https://github.com/TryGhost/Ghost/security/advisories/GHSA-gfjp-2p8f-94qv for the authoritative guidance. If upgrading immediately is not possible, consider migrating file storage to an S3 or other cloud storage adapter, which already serves an inert Content-Type and fully removes the exposure (trade-off: requires object-storage infrastructure, credentials, and re-pointing existing content URLs). As a compensating control, configure the reverse proxy or CDN in front of Ghost to force an inert Content-Type (for example text/plain or application/octet-stream) and add X-Content-Type-Options: nosniff for the upload-serving path such as /content/files/* (trade-off: legitimate inline rendering of uploaded images, PDFs, or SVG assets may break, so scope the rule to executable extensions like .html, .htm, .svg, and .js where possible). Additionally, tighten the blast radius by restricting file-upload permissions to the minimum set of trusted staff and auditing existing uploads in the content/files directory for attacker-supplied HTML, SVG, or JavaScript; note that since exploitation requires a victim to open the uploaded file's URL, staff awareness and restricting who can upload are mitigations but not substitutes for patching, and all previously uploaded malicious files should be deleted after the upgrade.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in npm
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
Ghost is a Node.js content management system that abstracts file storage behind pluggable adapters, with a local filesystem adapter as the default and S3-style cloud adapters as alternatives. In the affected architecture, the files upload endpoint resolves an inert content type per file (for example mapping .html to text/plain and .svg to application/octet-stream) and cloud adapters persist that type as object metadata so it is returned on serving; the local adapter extends LocalStorageBase, which had no place to store such metadata and therefore let the underlying send/express.static logic derive the response Content-Type from the file extension. As a result an uploaded .html or .svg file was served from the site's own origin with a browser-executable MIME type, turning the CMS into a same-origin script host and creating a classic stored XSS condition (CWE-79) whose impact is amplified because the injected script runs on the domain that holds staff admin session cookies. The upstream fix adds a setServeHeaders hook to LocalStorageBase that sets X-Content-Type-Options: nosniff, and overrides it in LocalFilesStorage to call getStorageContentType so the inert type is re-resolved at serve time, matching the behavior cloud adapters already had. The vulnerability class is improper neutralization of user-controlled input in a web page (stored/persistent XSS via file upload and content-type confusion), and exploitation is bounded by the storage backend, the attacker's staff-level privileges, and the victim's required interaction.
Know when Ghost gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:N/AC:L/PR:L/UI:R/S:U/C:H/I:H/A:N
Authenticated staff upload (PR:L) and a victim staff user must load the file (UI:R); network-served with low complexity on the default adapter, yielding session compromise (C:H/I:H) but no availability impact.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
2DescriptionCVE.org
Ghost is a Node.js content management system. From 6.22.1 until 6.64.0, Ghost restricted the content type used to serve uploaded files to prevent browsers from executing them. On sites using the default local storage adapter, this restriction was not applied, so files uploaded by any staff user were served with a content type derived from their file extension. This could be used to host scripts on the site's domain, possibly resulting in compromise of other staff users' admin sessions. This issue is fixed in version 6.64.0.
Articles & Coverage 2
Technical POC Analysis
Evidence caveat: the supplied evidence is the GHSA-gfjp-2p8f-94qv advisory text only.
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
Ghost CMS versions 6.22.1 through 6.63.x contain a stored cross-site scripting flaw that can let an authenticated staff user with upload privileges place a browser-executable file on the organization's own domain, potentially compromising other staff or administrator sessions. The issue affects only sites using the default local storage adapter; sites using S3 or other cloud storage adapters are not affected. Vendor-released patch: 6.64.0 fully neutralizes the flaw, and there is no public exploit identified at time of analysis, but leadership should prioritize remediation because admin session compromise could lead to unauthorized content, data, or access changes.
Apply vendor patch.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Cross-Site Scripting occurs when an application accepts untrusted data and sends it to a web browser without proper validation or encoding.
Ghost CMS versions 5.105.0-5.130.5 and 6.0.0-6.10.3 contain an authentication bypass in their two-factor authentication
Arbitrary code execution in Ghost CMS versions 0.7.2 through 6.19.0 allows authenticated attackers with theme upload pri
An arbitrary file upload vulnerability in the file upload module of Ghost CMS v4.42.0 allows attackers to execute arbitr
An arbitrary file upload vulnerability in the file upload module of Ghost v4.39.0 allows attackers to execute arbitrary
SQL injection in Ghost CMS versions 3.24.0 through 6.19.0 allows unauthenticated attackers to read arbitrary database da
Ghost through 5.85.1 allows remote attackers to bypass an authentication rate-limit protection mechanism by using many X
Ghost through 5.76.0 allows stored XSS, and resultant privilege escalation in which a contributor can take over any acco
Ghost before 5.82.0 allows CSV Injection during a member CSV export. Rated high severity (CVSS 8.8), this vulnerability
Server-side request forgery (SSRF) vulnerability in Ghost CMS < 3.10.0 allows an attacker to scan local or external netw
Ghost before 5.42.1 allows remote attackers to read arbitrary files within the active theme's folder via /assets/built%2
Ghost is a Node.js CMS. Rated medium severity (CVSS 6.8), this vulnerability is remotely exploitable, no authentication
Ghost is an open source content management system. Rated medium severity (CVSS 6.5), this vulnerability is remotely expl
EUVD-2026-92770
GHSA-gfjp-2p8f-94qv
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB