Privilege Escalation in Ghost CMS
TL;DR
A Contributor, the role with the lowest privileges in Ghost CMS, can create an article containing attacker-controlled JavaScript executable content. When an Owner previews or views that article, the injected script executes in the Owner’s browser and changes the Owner’s account email to an attacker-controlled address. The attacker can then request a password reset magic link sent to that email, complete the reset, and gain full Owner privileges - achieving account takeover.
Local setup
- Node Version: v22.12.0
- Ghost-CLI Version: 1.28.3
- Ghost Version: 6.3.1
- Mailpit (v1.27.10)