Skip to main content
Vulnerability Database/CVE-2026-105648

CVE-2026-105648: Ghost CMS SSRF Vulnerability

CVE-2026-105648 is a server-side request forgery vulnerability in Ghost CMS that enables unauthenticated attackers to make HTTP requests to internal network hosts. This article covers technical details, affected versions, and remediation.

Published:

CVE-2026-105648 Overview

CVE-2026-105648 is a Server-Side Request Forgery (SSRF) vulnerability in Ghost, a Node.js content management system. The flaw affects Ghost versions from 6.0.9 through 6.64.x and is fixed in version 6.65.0. A validation issue in features such as Webmentions allows an unauthenticated attacker to coerce the Ghost server into making limited HTTP requests to hosts in its internal network under certain network configurations. The vulnerability is tracked under [CWE-184: Incomplete List of Disallowed Inputs].

Critical Impact

Unauthenticated attackers can abuse Webmentions to probe internal network hosts from the Ghost server, though no response data is returned to the attacker.

Affected Products

  • Ghost (Node.js CMS) version 6.0.9 through 6.64.x
  • Self-hosted Ghost deployments with Webmentions functionality enabled
  • Ghost instances reachable from untrusted networks and co-located with internal services

Discovery Timeline

  • 2026-10-05 - CVE-2026-105648 published to NVD
  • 2026-10-06 - Last updated in NVD database
  • Fixed in - Ghost release v6.65.0

Technical Details for CVE-2026-105648

Vulnerability Analysis

Ghost exposes a Webmentions endpoint that accepts a source URL from unauthenticated users and fetches that URL server-side to verify the mention. The validation layer intended to block requests to internal hosts was incomplete, allowing crafted URLs to bypass the filter. The server then issues an outbound HTTP request to a host inside its own network segment. While no response body is returned to the attacker, the request itself can be used to enumerate internal services, trigger side effects on unauthenticated internal APIs, or map network topology. The issue is classified under [CWE-184] because the disallowed-input list did not cover all addresses that resolve to private ranges.

Root Cause

The root cause is an incomplete denylist in the URL validation routine used by Webmentions and related functionality. The validator did not account for all forms of addresses that resolve to internal hosts, such as alternative encodings, DNS rebinding candidates, or network configurations where public-looking hostnames resolve to private IP space. The fix in commit 20d3f792bf4a7c349ee56b746a067550d8684ff5 and pull request #30917 tightens validation of outbound request targets.

Attack Vector

An unauthenticated remote attacker submits a Webmention referencing a source URL that resolves to an internal address reachable by the Ghost server. Ghost fetches the URL to validate the mention, generating an HTTP request against the internal target. The high attack complexity reflects that exploitation depends on the specific network topology around the Ghost instance. See the GitHub Security Advisory GHSA-r7f2-6fj8-6fg2 for the full description.

Detection Methods for CVE-2026-105648

Indicators of Compromise

  • Inbound Webmention requests to /webmentions/receive or related endpoints from unknown sources with source URLs pointing to internal hostnames or private IP ranges.
  • Outbound HTTP connections from the Ghost process to RFC1918 addresses (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16) or link-local addresses (169.254.0.0/16).
  • Unexpected requests from the Ghost server to cloud metadata endpoints such as 169.254.169.254.

Detection Strategies

  • Review Ghost access logs for Webmention submissions whose source parameter contains private IP literals, loopback addresses, or hostnames resolving internally.
  • Correlate inbound Webmention events with outbound connections initiated by the Node.js process in the following seconds.
  • Alert on repeated Webmention submissions from the same source IP, which may indicate internal network enumeration.

Monitoring Recommendations

  • Enable egress logging on the host or network segment running Ghost and baseline normal outbound destinations.
  • Monitor DNS resolutions requested by the Ghost process for domains that return private addresses.
  • Track the Ghost application version across all deployments to ensure patch coverage.

How to Mitigate CVE-2026-105648

Immediate Actions Required

  • Upgrade Ghost to version 6.65.0 or later, which contains the validation fix.
  • Inventory all self-hosted Ghost instances and confirm the running version against the installed package metadata.
  • Restrict egress from the Ghost server so it cannot reach internal management interfaces or cloud metadata services.

Patch Information

The fix is included in Ghost v6.65.0. The code change is available in commit 20d3f792 and pull request #30917. Administrators should review the GitHub Security Advisory GHSA-r7f2-6fj8-6fg2 for upgrade guidance.

Workarounds

  • Disable Webmentions functionality in Ghost configuration until the upgrade is applied.
  • Place the Ghost server in a network segment with no routable access to internal services or cloud metadata endpoints.
  • Deploy an egress proxy that enforces an allowlist of permitted destinations for outbound HTTP requests from Ghost.
bash
# Example iptables rules to block Ghost egress to private ranges and cloud metadata
iptables -A OUTPUT -m owner --uid-owner ghost -d 10.0.0.0/8 -j REJECT
iptables -A OUTPUT -m owner --uid-owner ghost -d 172.16.0.0/12 -j REJECT
iptables -A OUTPUT -m owner --uid-owner ghost -d 192.168.0.0/16 -j REJECT
iptables -A OUTPUT -m owner --uid-owner ghost -d 169.254.169.254/32 -j REJECT

Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

Experience the Most Advanced Cybersecurity Platform

See how the world’s most intelligent, autonomous cybersecurity platform can protect your organization today and into the future.