/

CVE-2026-105651

Severity:

HIGH RISK

(7.3)

Stored XSS (CWE-79) in Ghost External Bookmark Images

CVE-2026-105651

Deferred

Vulnerability type

Category:

Stored Cross-Site Scripting

CWE:

CWE-79, CWE-434

Impact:

Administrative Session Compromise

Severity:

HIGH RISK

(7.3)

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 could store non-image files retrieved from external websites as bookmark icons or thumbnails. A staff user, including a Contributor, could potentially use this behavior to host arbitrary HTML on the Ghost site's domain, which may compromise other staff members' administrative sessions when the content is viewed.

Ghost could store non-image files retrieved from external websites as bookmark icons or thumbnails. A staff user, including a Contributor, could potentially use this behavior to host arbitrary HTML on the Ghost site's domain, which may compromise other staff members' administrative sessions when the content is viewed.

Affected context

The issue occurs in Ghost bookmark cards when externally fetched content is accepted and stored as an icon or thumbnail without sufficiently enforcing the expected image type. Deployments within the affected release range may be at risk when staff users can create or edit bookmark cards and other staff users subsequently view the resulting content in an administrative context.

The issue occurs in Ghost bookmark cards when externally fetched content is accepted and stored as an icon or thumbnail without sufficiently enforcing the expected image type. Deployments within the affected release range may be at risk when staff users can create or edit bookmark cards and other staff users subsequently view the resulting content in an administrative context.

Exploit preconditions

  • Attack surface: Bookmark card creation and external resource retrieval
  • Required access: Authenticated staff access sufficient to create or modify bookmark cards
  • Trigger point: Processing and later rendering of an externally fetched bookmark icon or thumbnail
  • Why exploitation is possible: Content that is not a valid image can be stored and served from the site's origin, allowing browser-interpreted markup to reach other staff users
  • Attack surface: Bookmark card creation and external resource retrieval
  • Required access: Authenticated staff access sufficient to create or modify bookmark cards
  • Trigger point: Processing and later rendering of an externally fetched bookmark icon or thumbnail
  • Why exploitation is possible: Content that is not a valid image can be stored and served from the site's origin, allowing browser-interpreted markup to reach other staff users

Why this happens

The underlying flaw is insufficient validation of externally retrieved content before it is stored and served as a bookmark image. The application appears to rely on the requested resource's role or URL rather than enforcing its actual media type and safe rendering behavior. This maps primarily to CWE-79: Improper Neutralization of Input During Web Page Generation, because attacker-influenced content can become executable browser markup, and secondarily to CWE-434: Unrestricted Upload of File with Dangerous Type, because non-image content is accepted in an image-oriented storage path.

The underlying flaw is insufficient validation of externally retrieved content before it is stored and served as a bookmark image. The application appears to rely on the requested resource's role or URL rather than enforcing its actual media type and safe rendering behavior. This maps primarily to CWE-79: Improper Neutralization of Input During Web Page Generation, because attacker-influenced content can become executable browser markup, and secondarily to CWE-434: Unrestricted Upload of File with Dangerous Type, because non-image content is accepted in an image-oriented storage path.

Potential impact

  • An attacker may host arbitrary HTML under the Ghost site's origin
  • Other staff users' administrative sessions could be exposed or compromised
  • Administrative actions could be performed in a victim's browser context
  • Site content, settings, or integrations could be modified
  • The Ghost instance could be used to distribute trusted-origin phishing content
  • An attacker may host arbitrary HTML under the Ghost site's origin
  • Other staff users' administrative sessions could be exposed or compromised
  • Administrative actions could be performed in a victim's browser context
  • Site content, settings, or integrations could be modified
  • The Ghost instance could be used to distribute trusted-origin phishing content

General mitigation guidance

Mitigation generally focuses on enforcing content-type and content-signature restrictions at every external-fetch and storage boundary.

Common defensive patterns include:

  • Accepting only explicitly allowlisted image formats for bookmark media
  • Validating response headers, file signatures, size limits, and decoded content before storage
  • Serving user-controlled media from an isolated origin or non-scriptable storage domain
  • Applying restrictive Content Security Policy and response headers
  • Encoding or sanitizing content according to its actual output context
  • Limiting staff privileges and separating content-authoring permissions from administrative capabilities
  • Preventing browsers from interpreting stored media as active HTML

Mitigation generally focuses on enforcing content-type and content-signature restrictions at every external-fetch and storage boundary.

Common defensive patterns include:

  • Accepting only explicitly allowlisted image formats for bookmark media
  • Validating response headers, file signatures, size limits, and decoded content before storage
  • Serving user-controlled media from an isolated origin or non-scriptable storage domain
  • Applying restrictive Content Security Policy and response headers
  • Encoding or sanitizing content according to its actual output context
  • Limiting staff privileges and separating content-authoring permissions from administrative capabilities
  • Preventing browsers from interpreting stored media as active HTML

How teams detect issues like this

Organizations can look for this class of issue through:

  • Static analysis and code review rules covering external fetches, MIME-type validation, and file storage
  • Review signals where image fields accept arbitrary URLs or persist responses without signature checks
  • Tests that submit non-image content through image and thumbnail workflows
  • Monitoring for unusual bookmark-card creation, external resource domains, and unexpected response types
  • Policy enforcement requiring media isolation, restrictive content headers, and allowlisted formats

Automated security review tools may help identify unsafe content-handling and stored XSS patterns, but should be supplemented with focused integration testing.

Organizations can look for this class of issue through:

  • Static analysis and code review rules covering external fetches, MIME-type validation, and file storage
  • Review signals where image fields accept arbitrary URLs or persist responses without signature checks
  • Tests that submit non-image content through image and thumbnail workflows
  • Monitoring for unusual bookmark-card creation, external resource domains, and unexpected response types
  • Policy enforcement requiring media isolation, restrictive content headers, and allowlisted formats

Automated security review tools may help identify unsafe content-handling and stored XSS patterns, but should be supplemented with focused integration testing.

Sources

SourceLink
github.comgithub.com/TryGhost/Ghost/commit/b41fe3f2c399cef058e6b487782a0b2263e86c03
github.comgithub.com/TryGhost/Ghost/issues/30761
github.comgithub.com/TryGhost/Ghost/releases/tag/v6.64.0
github.comgithub.com/TryGhost/Ghost/security/advisories/GHSA-347q-26qq-h2p6

Frequently asked

questions

A staff user with permission to create or modify bookmark cards may be able to introduce the problematic content. The effect generally depends on another staff user viewing the affected content.

It does not necessarily require full administrator privileges. The reported behavior includes staff roles such as Contributors, provided they can create bookmark cards.

Enforce strict image-type validation before storage, reject non-image responses, and serve stored media from a context where it cannot execute as same-origin HTML.

Treat externally fetched content as untrusted, validate it by decoded content rather than URL or filename, isolate user-controlled media, and test all rendering paths for stored script execution.

A staff user with permission to create or modify bookmark cards may be able to introduce the problematic content. The effect generally depends on another staff user viewing the affected content.

It does not necessarily require full administrator privileges. The reported behavior includes staff roles such as Contributors, provided they can create bookmark cards.

Enforce strict image-type validation before storage, reject non-image responses, and serve stored media from a context where it cannot execute as same-origin HTML.

Treat externally fetched content as untrusted, validate it by decoded content rather than URL or filename, isolate user-controlled media, and test all rendering paths for stored script execution.

Find out what's already
exploitable in your codebase.