Summary
Ghost versions from 4.0.0 through before 6.63.0 contain a content API access-control vulnerability that can expose gated post content to unauthenticated visitors. An attacker may bypass publication restrictions by directly querying the API for content that should require authorization.
Affected context
The issue occurs in Ghost deployments where gated or access-restricted posts are exposed through the Content API without equivalent authorization enforcement at the API layer. It is relevant when content restrictions are expected to apply to unauthenticated requests and the API response path does not consistently verify the visitor's entitlement.
Exploit preconditions
- Attack surface: Ghost Content API endpoints serving post content
- Required access: Network access to the relevant Ghost instance; no authentication may be required
- Trigger point: A direct request for a gated or restricted post through the Content API
- Why exploitation is possible: The API does not consistently enforce the content restriction before returning the requested post
Why this happens
The underlying issue is an authorization failure in which the Content API treats a content request as sufficient grounds for disclosure without verifying whether the requester is entitled to view the post. This maps to CWE-863, Incorrect Authorization, because access-control decisions are not applied consistently to a protected resource. The insecure pattern is exposing a backend content interface whose authorization policy is weaker than the policy applied by the user-facing application.
Potential impact
- Unauthenticated users may access gated posts
- Restricted editorial, commercial, or member-only content could be disclosed
- Organizations may lose control over content licensing or subscription boundaries
- Exposed content could be copied, indexed, or redistributed
General mitigation guidance
Mitigation generally focuses on enforcing authorization at every API path that can return protected content. Secure-by-default designs should deny access unless the requester's identity and entitlement have been verified, avoid relying solely on client-side gating, and keep public and restricted content representations separate. Content access decisions should use server-side policy checks, minimize trust in request parameters, and run under least-privilege service permissions. Consistent authorization behavior should also be maintained across direct API requests, rendered pages, cached responses, and alternate content formats.
How teams detect issues like this
- Review Content API handlers for missing or inconsistent authorization checks
- Use static analysis and code review rules to identify sensitive resource lookups that return data before entitlement validation
- Test unauthenticated requests against gated content and compare API responses with authenticated, entitled requests
- Monitor API access logs for repeated direct requests targeting restricted posts
- Enforce policies requiring server-side authorization checks for every protected content endpoint
- Automated security testing and code-review tools may help identify authorization gaps during development

