/

CVE-2026-105650

Severity:

HIGH RISK

(8.1)

Stored Cross-Site Scripting (CWE-79) in Ghost CMS Platform

CVE-2026-105650

Deferred

Vulnerability type

Category:

Stored Cross-Site Scripting

CWE:

CWE-79, CWE-184

Impact:

Administrative Session Compromise

Severity:

HIGH RISK

(8.1)

CVSS version:

3.1

Catch this CVE while code is being written

Detect vulnerable code directly in pull requests, so CVEs are fixed before merge.

Summary

Ghost can store attacker-controlled scripts when content embeds a URL from an untrusted website. Those scripts may execute in the editor, on published pages, or in newsletter emails, potentially compromising a staff user's administrative session.

Ghost can store attacker-controlled scripts when content embeds a URL from an untrusted website. Those scripts may execute in the editor, on published pages, or in newsletter emails, potentially compromising a staff user's administrative session.

Affected context

The issue can occur in Ghost installations that process externally controlled URL embeds and persist the resulting content. Risk is higher when untrusted embedded content is rendered in privileged editor interfaces, published pages, or newsletter messages viewed by staff members.

The issue can occur in Ghost installations that process externally controlled URL embeds and persist the resulting content. Risk is higher when untrusted embedded content is rendered in privileged editor interfaces, published pages, or newsletter messages viewed by staff members.

Exploit preconditions

  • Attack surface: Post-content processing and rendering of embedded URLs
  • Required access: Ability to submit or cause attacker-controlled URL content to be embedded
  • Trigger point: Content rendering in the Ghost editor, published site, or newsletter email
  • Why exploitation is possible: Insufficiently constrained or sanitized embedded content can retain executable script elements that later run in a trusted origin
  • Attack surface: Post-content processing and rendering of embedded URLs
  • Required access: Ability to submit or cause attacker-controlled URL content to be embedded
  • Trigger point: Content rendering in the Ghost editor, published site, or newsletter email
  • Why exploitation is possible: Insufficiently constrained or sanitized embedded content can retain executable script elements that later run in a trusted origin

Why this happens

The vulnerability is caused by incomplete validation or sanitization of attacker-controlled embedded content before it is stored and rendered.

This maps primarily to CWE-79: Improper Neutralization of Input During Web Page Generation, because executable content is not reliably neutralized in every output context. It is also associated with CWE-184: Incomplete List of Disallowed Inputs, where filtering relies on an incomplete set of unsafe schemes, elements, attributes, or rendering contexts.

The vulnerability is caused by incomplete validation or sanitization of attacker-controlled embedded content before it is stored and rendered.

This maps primarily to CWE-79: Improper Neutralization of Input During Web Page Generation, because executable content is not reliably neutralized in every output context. It is also associated with CWE-184: Incomplete List of Disallowed Inputs, where filtering relies on an incomplete set of unsafe schemes, elements, attributes, or rendering contexts.

Potential impact

  • An attacker may execute script in a staff member's browser session
  • Administrative session information could be exposed or misused
  • Unauthorized actions could be performed with the victim's privileges
  • Published pages or newsletters could deliver malicious content to readers
  • Content integrity and site administration could be compromised
  • An attacker may execute script in a staff member's browser session
  • Administrative session information could be exposed or misused
  • Unauthorized actions could be performed with the victim's privileges
  • Published pages or newsletters could deliver malicious content to readers
  • Content integrity and site administration could be compromised

General mitigation guidance

Mitigation generally focuses on treating all externally sourced embeds as untrusted and applying context-aware output controls.

Common defensive patterns include:

  • Sanitizing stored content with an allowlist-based HTML and URL policy
  • Rejecting unsafe schemes, elements, attributes, and embed sources by default
  • Applying context-specific encoding for editor, web, and email rendering
  • Avoiding direct insertion of untrusted markup into privileged interfaces
  • Restricting administrative session privileges and strengthening session protections
  • Using content security policies and other browser controls as defense in depth
  • Requiring explicit trust decisions for external embed providers

Mitigation generally focuses on treating all externally sourced embeds as untrusted and applying context-aware output controls.

Common defensive patterns include:

  • Sanitizing stored content with an allowlist-based HTML and URL policy
  • Rejecting unsafe schemes, elements, attributes, and embed sources by default
  • Applying context-specific encoding for editor, web, and email rendering
  • Avoiding direct insertion of untrusted markup into privileged interfaces
  • Restricting administrative session privileges and strengthening session protections
  • Using content security policies and other browser controls as defense in depth
  • Requiring explicit trust decisions for external embed providers

How teams detect issues like this

Organizations can look for this issue through:

  • Static analysis of URL-embed, HTML-sanitization, and DOM-rendering code paths
  • Code review signals involving direct insertion of stored content into HTML or email templates
  • Tests containing unsafe schemes, event-handler attributes, malformed markup, and nested encoding cases
  • Monitoring content and outbound email pipelines for unexpected script-bearing markup
  • Policy enforcement requiring allowlisted embed sources and context-aware sanitization

Automated application security testing and code review tools may help identify incomplete filtering, but should be supplemented with manual review of each rendering context.

Organizations can look for this issue through:

  • Static analysis of URL-embed, HTML-sanitization, and DOM-rendering code paths
  • Code review signals involving direct insertion of stored content into HTML or email templates
  • Tests containing unsafe schemes, event-handler attributes, malformed markup, and nested encoding cases
  • Monitoring content and outbound email pipelines for unexpected script-bearing markup
  • Policy enforcement requiring allowlisted embed sources and context-aware sanitization

Automated application security testing and code review tools may help identify incomplete filtering, but should be supplemented with manual review of each rendering context.

Sources

SourceLink
github.comgithub.com/TryGhost/Ghost/commit/d23d552e257e2696c60293bc5cd7898a49d6bd1f
github.comgithub.com/TryGhost/Ghost/pull/30763
github.comgithub.com/TryGhost/Ghost/releases/tag/v6.64.0
github.comgithub.com/TryGhost/Ghost/security/advisories/GHSA-v3xr-g6p2-fvgv

Frequently asked

questions

It may be exploitable through content submission or URL-embedding functionality when an attacker can influence content that Ghost stores and later renders.

Not necessarily. The key requirement is the ability to introduce or influence an attacker-controlled embedded URL. The resulting impact depends on which users view the affected content.

Apply strict allowlist-based sanitization and context-aware output encoding before storing or rendering embedded content, while treating external URLs as untrusted by default.

Test every rendering context, restrict embed sources and URL schemes, avoid unsafe markup insertion, and use browser security controls as defense in depth.

It may be exploitable through content submission or URL-embedding functionality when an attacker can influence content that Ghost stores and later renders.

Not necessarily. The key requirement is the ability to introduce or influence an attacker-controlled embedded URL. The resulting impact depends on which users view the affected content.

Apply strict allowlist-based sanitization and context-aware output encoding before storing or rendering embedded content, while treating external URLs as untrusted by default.

Test every rendering context, restrict embed sources and URL schemes, avoid unsafe markup insertion, and use browser security controls as defense in depth.

Find out what's already
exploitable in your codebase.