Skip to main content

Ghost CMS CVE-2026-105651

| EUVDEUVD-2026-92761 HIGH
Cross-site Scripting (XSS) (CWE-79)
2026-10-05 GitHub_M GHSA-347q-26qq-h2p6
7.3
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Authenticate as low-privileged Contributor
  2. Delivery
    Create bookmark card to attacker-controlled URL
  3. Exploit
    Ghost stores HTML as icon/thumbnail on site domain
  4. Execution
    Admin views post and HTML executes in-origin
  5. Impact
    Steal 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

Requires an authenticated Ghost staff account of any level, explicitly including the lowest Contributor role (PR:L), on a version from 5.94.0 up to but not including 6.64.0. The attacker must use the bookmark-card creation feature and control an external website that returns non-image content (e.g. HTML) at the og:image/favicon URLs - Ghost pre-fix trusted the URL extension to set the stored file's Content-Type rather than validating file contents. Exploitation is LIMITED by: (1) needing a valid staff credential, (2) UI:R - a victim admin/staff user must subsequently load the post or editor containing the card for the stored HTML to execute, and (3) it is remediated in 6.64.0, which validates fetched bytes with the file-type library against the image-upload allowlist.

Impact

This is a moderately serious, authenticated stored-XSS issue (CWE-79) rather than a drive-by critical. The vendor CVSS vector (CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:U/C:H/I:H/A:N = 7.3) correctly captures the key constraints: network-reachable but requiring low privileges (PR:L) and victim interaction (UI:R). The crucial real-world mitigator is the PR:L requirement - the attacker must already hold a valid staff account. The notable risk amplifier, confirmed by the description and commit, is that the LOWEST-privilege staff role (Contributor) can trigger it, so the trust boundary crossed (Contributor → Admin session takeover) is a genuine privilege-escalation path within the CMS. The attacker-controlled HTML is served from the site's OWN domain, which defeats same-origin protections and makes admin session/cookie theft realistic - I assess this warrants a scope change (S:C), which would push the score higher than the vendor's S:U-based 7.3. No EPSS score, KEV listing, or POC was supplied in the input; absence of these signals means there is no evidence of active exploitation or mass scanning, consistent with an auth-gated XSS that requires a multi-step social/interaction chain. Net: a real priority for any Ghost instance that grants Contributor accounts to semi-trusted authors, but lower urgency for single-operator or trusted-team blogs.

Exploit ScenarioDerived

A malicious or compromised Contributor creates a bookmark card pointing at an attacker-controlled site whose og:image/favicon links return HTML (not a real image); Ghost fetches and stores that HTML as the card's icon/thumbnail under the site's own domain. When an Administrator later views the post or editor, the stored HTML executes as the site's origin and can hijack the admin's authenticated session. No public exploit was provided in the input, though the fix commit includes a test demonstrating the exact non-image-stored-as-image technique.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 0.3% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Oct 05, 2026

Stored cross-site scripting in Ghost CMS versions 5.94.0 through 6.63.x lets any staff user - including the lowest-privileged Contributor role - plant arbitrary HTML on the site's own domain through the bookmark-card feature. When a bookmark card was created, Ghost fetched the remote page's og:image and favicon URLs, trusted the URL file extension to decide the Content-Type of the stored file, and served the resulting file from the Ghost origin; an attacker-controlled source could therefore return HTML that Ghost saved and later served as an image, executing in the context of the site's domain. Because a victim staff member or administrator must subsequently open the post or editor containing the crafted card, this is an authenticated (CVSS PR:L), user-interaction-dependent stored XSS with scope change (S:C), rated 7.3; it is fixed in Ghost 6.64.0, and no public exploit code or active exploitation has been identified at time of analysis.

RemediationAI

Vendor-released patch: upgrade Ghost CMS to version 6.64.0 or later (https://github.com/TryGhost/Ghost/releases/tag/v6.64.0), which validates fetched bookmark bytes with the file-type library against the image-upload allowlist as shown in commit b41fe3f2c399cef058e6b487782a0b2263e86c03; see the advisory at https://github.com/TryGhost/Ghost/security/advisories/GHSA-347q-26qq-h2p6 for the official guidance. Where an immediate upgrade is not possible, restrict the attack surface rather than relying on generic hardening: audit staff accounts and temporarily remove or demote Contributor-role users, since the vulnerable code path requires only the lowest staff privilege (side effect: legitimate contributors cannot publish); disable or refuse bookmark-card usage in posts until patched (side effect: editorial workflow disruption, and existing cards remain in the database); and inspect the Ghost content/images directory for stored files whose extension does not match their magic bytes, removing any HTML or script payloads that were previously planted (side effect: broken bookmark icons for affected posts). Deploying a Content-Security-Policy that blocks inline and external script execution on the Ghost origin reduces the impact of any already-stored payload but does not remove the underlying storage flaw, so it should be treated only as defence in depth. Because exploitation requires a victim staff user to open the crafted post or editor, prioritizing admin-session protection (short session lifetimes, MFA, and re-authentication for sensitive actions) meaningfully lowers residual risk while patching is staged. No POC or active exploitation is known, so remediation can follow a normal patch cadence rather than emergency response.

Affected VersionsENISA

Ghost 5.94.0, < 6.64.0

Affected Packages

npm ghost fix: 6.64.0

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; the flaw lives in ghost/core/core/server/services/oembed/oembed-service.js, the service that resolves oEmbed/bookmark metadata for the editor's bookmark card. When Ghost parsed a remote page it collected the og:image (thumbnail) and link rel=icon (icon) URLs, fetched them via the external-request helper, and stored the bytes in the site's image directory. The pre-fix code derived the stored file's extension - and therefore the Content-Type later served by the web server/NAS handler - from the attacker-controlled URL path rather than from the payload itself. The supporting unit tests in the fix deliberately serve HTML bodies with a lying 'content-type: image/png' header to demonstrate that the upstream response Content-Type was also untrusted. The remediation commit b41fe3f2c399cef058e6b487782a0b2263e86c03 adds a detectFileType helper that dynamically imports the file-type library, inspects the fetched buffer's magic bytes, assigns the extension from the detected type, and then enforces Ghost's existing uploads.images.extensions allowlist (SVG, which file-type never reports, continues to be handled by the separate rasterization path). This is a classic CWE-79 stored cross-site scripting issue rooted in insufficient validation of file content before storing and serving it from a trusted origin. Reported through GitHub, tagged XSS/Node.js/Ghost, with CPE cpe:2.3:a:tryghost:ghost confirming the vendor is TryGhost.

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

Vendor (GitHub_M) PRIMARY 7.3 HIGH
AV:N/AC:L/PR:L/UI:R/S:U/C:H/I:H/A:N
vuln.today AI 8.7 HIGH

Low-privileged Contributor (PR:L) stores HTML served from the site's own origin; execution in a victim admin's browser crosses a security authority, so S:C, with C:H/I:H for session takeover and A:N.

3.1 AV:N/AC:L/PR:L/UI:R/S:C/C:H/I:H/A:N
4.0 AV:N/AC:L/AT:N/PR:L/UI:P/VC:H/VI:H/VA:N/SC:H/SI:H/SA:N

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
Low
Privileges Required
Low
User Interaction
Required
Scope
Unchanged
Confidentiality
High
Integrity
High
Availability
None

Lifecycle Timeline

2
Patch available
Oct 05, 2026 - 21:02 EUVD
CVE Published
Oct 05, 2026 - 19:09 cve.org
HIGH 7.3

DescriptionCVE.org

Ghost is a Node.js content management system. From 5.94.0 until 6.64.0, when creating a bookmark card, Ghost could store non-image files fetched from an external website as bookmark icons or thumbnails. This allowed any staff user, including Contributors, to host arbitrary HTML on the site's domain, possibly resulting in compromise of other staff users' admin sessions. This issue is fixed in version 6.64.0.

Technical POC Analysis

Bug class: CWE-79 (stored XSS), with the advisory also assigning CWE-434 (unrestricted upload of file with dangerous type).

Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.

Executive ViewAI

Why It Matters

A stored cross-site scripting flaw in Ghost CMS versions 5.94.0 through 6.63.x lets any staff account, including the lowest-privileged Contributor role, plant attacker-controlled content that executes in the browsers of the editors and administrators who later open the affected post. Because the malicious payload is stored and served from the organization's own public domain, a successful attack could enable administrative session theft, unauthorized publishing, site defacement, or compromise of readers who visit the site. Leadership should treat this as a brand-trust and content-integrity risk affecting everyone who publishes on, administers, or consumes the affected Ghost properties.

Business Impact: High
Compensating Controls

Apply vendor patch.

Threat Intelligence Overview

EPSS Score
0.3%
Top 79% exploitable
Prevalence
Medium
popular self-hosted Node.js CMS, common but far from ubiquitous
Threat Intel
1
1 source
Data Quality
5 sources
Confidence: Medium
EUVD NVD CVE.org EPSS Vulnrichment GHSA GitHub

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.

SignalValue
Severity HIGH
CISA KEV No
Public POC No
EPSS 0.3%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision
Scheduled
Exploitation
None
System Exposure· derived
Open
Automatable
No
Human Impact
High
Technical Impact
Total

Priority Score

36
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +36
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Cross-Site Scripting occurs when an application accepts untrusted data and sends it to a web browser without proper validation or encoding.

More in Ghost

View all
CVE-2026-22594 HIGH POC
8.1 Jan 10

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

CVE-2026-29053 HIGH POC
7.6 Mar 05

Arbitrary code execution in Ghost CMS versions 0.7.2 through 6.19.0 allows authenticated attackers with theme upload pri

CVE-2022-28397 CRITICAL POC
9.8 Apr 12

An arbitrary file upload vulnerability in the file upload module of Ghost CMS v4.42.0 allows attackers to execute arbitr

CVE-2022-27139 CRITICAL POC
9.8 Apr 12

An arbitrary file upload vulnerability in the file upload module of Ghost v4.39.0 allows attackers to execute arbitrary

CVE-2026-26980 CRITICAL POC
9.4 Feb 20

SQL injection in Ghost CMS versions 3.24.0 through 6.19.0 allows unauthenticated attackers to read arbitrary database da

CVE-2024-34451 CRITICAL POC
9.1 Jun 16

Ghost through 5.85.1 allows remote attackers to bypass an authentication rate-limit protection mechanism by using many X

CVE-2024-23724 CRITICAL POC
9.0 Feb 11

Ghost through 5.76.0 allows stored XSS, and resultant privilege escalation in which a contributor can take over any acco

CVE-2024-34448 HIGH POC
8.8 May 22

Ghost before 5.82.0 allows CSV Injection during a member CSV export. Rated high severity (CVSS 8.8), this vulnerability

CVE-2020-8134 HIGH POC
8.1 Mar 20

Server-side request forgery (SSRF) vulnerability in Ghost CMS < 3.10.0 allows an attacker to scan local or external netw

CVE-2023-32235 HIGH POC
7.5 May 05

Ghost before 5.42.1 allows remote attackers to read arbitrary files within the active theme's folder via /assets/built%2

CVE-2021-29484 MEDIUM POC
6.8 Apr 29

Ghost is a Node.js CMS. Rated medium severity (CVSS 6.8), this vulnerability is remotely exploitable, no authentication

CVE-2023-40028 MEDIUM POC
6.5 Aug 15

Ghost is an open source content management system. Rated medium severity (CVSS 6.5), this vulnerability is remotely expl

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy