Severity by source
AV:N/AC:L/PR:N/UI:N/S:C/C:N/I:L/A:N
SSRF to internal services creates realistic confidentiality exposure (C:L rather than vendor C:N); all other metrics retain the network-accessible, zero-auth, scope-changed baseline.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
2DescriptionCVE.org
Ghost is a Node.js content management system. From 6.0.9 until 6.21.1, when making an external request, it is possible to bypass the IP filter that ensures the request isn't going to an internal service using an IPv6 literal which maps to a private IPv4 address. This vulnerability is fixed in 6.21.1.
AnalysisAI
Server-side request forgery (SSRF) filter bypass in Ghost CMS 6.0.9 through 6.21.0 allows remote unauthenticated attackers to direct the application to reach internal network services by supplying IPv6 literals that map to private IPv4 addresses, circumventing Ghost's outbound IP blocklist. The root cause is CWE-184 (Incomplete List of Disallowed Inputs): the filter validates against RFC 1918 private ranges but does not normalize IPv6-mapped IPv4 notation before comparison. No public exploit code has been identified at time of analysis, and no CISA KEV listing exists; Ghost 6.21.1 resolves the issue.
Technical ContextAI
Ghost's outbound HTTP request subsystem implements an application-layer IP blocklist to prevent SSRF by rejecting connections to RFC 1918 private IPv4 ranges (10.x, 172.16-31.x, 192.168.x). The bypass exploits CWE-184 - an incomplete disallowed-input list - because the filter does not normalize IPv6-mapped IPv4 addresses before evaluation. The IPv6 dual-stack representation embeds IPv4 addresses as ::ffff:a.b.c.d (e.g., ::ffff:192.168.1.1 or ::ffff:169.254.169.254); when Node.js resolves such a literal, the underlying TCP socket connects to the corresponding private IPv4 host without triggering the blocklist. The affected CPE is cpe:2.3:a:tryghost:ghost:*:*:*:*:*:*:*:*, spanning versions 6.0.9 through 6.21.0. This is a well-understood class of SSRF bypass documented against dual-stack environments and IPv6-aware runtimes.
RemediationAI
Upgrade Ghost to version 6.21.1 or later; this is the vendor-confirmed patched release per advisory GHSA-wvp2-4qqp-4h3r (https://github.com/TryGhost/Ghost/security/advisories/GHSA-wvp2-4qqp-4h3r). If immediate upgrade is not feasible, apply network-layer egress filtering on the Ghost application server to block outbound TCP connections to all RFC 1918 ranges (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16) and the cloud metadata address 169.254.169.254, regardless of how the destination is specified at the application layer; this compensates for the application-filter bypass without requiring code changes. Note that network-level egress restrictions may break legitimate Ghost integrations if any configured webhooks or external content sources resolve to private addresses - audit outbound integrations before applying.
A vulnerability in the NuPoint Unified Messaging (NPM) component of Mitel MiCollab through 9.8 SP1 FP2 (9.8.1.201) could
FortiOS and FortiProxy contain an authentication bypass via the Node.js websocket module allowing unauthenticated remote
Denial of service against HTTP/2 server implementations allows remote unauthenticated attackers to exhaust server resour
Eval injection vulnerability in the internals.batch function in lib/batch.js in the bassmaster plugin before 1.5.2 for t
Flowise version 3.0.5 contains a remote code execution vulnerability in the CustomMCP node. The mcpServerConfig paramete
Node.js 8.5.0 before 8.6.0 allows remote attackers to access unintended files, because a change to ".." handling was inc
An issue was discovered in the node-serialize package 0.0.4 for Node.js. Rated critical severity (CVSS 9.8), this vulner
OpenSSL before 0.9.8za, 1.0.0 before 1.0.0m, and 1.0.1 before 1.0.1h does not properly restrict processing of ChangeCiph
Directory traversal vulnerability in the st module before 0.2.5 for Node.js allows remote attackers to read arbitrary fi
Multiple SQL injection vulnerabilities in the Manage Accounts page in the AccountManagement.asmx service in the Solarwin
The JS-YAML module before 2.0.5 for Node.js parses input without properly considering the unsafe !!js/function tag, whic
The AES-NI implementation in OpenSSL before 1.0.1t and 1.0.2 before 1.0.2h does not consider memory allocation during a
Same weakness CWE-184 – Incomplete List of Disallowed Inputs
View allSame technique Authentication Bypass
View allShare
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-39025
GHSA-wvp2-4qqp-4h3r