MEDIUM 5.3

CVE-2026-53949: Ghost CMS Public API Filter Bypass Exposes Password Hashes

Ghost, a popular Node.js-based content management system, contains a flaw in how it validates filter parameters on public API endpoints. Attackers can exploit this weakness to bypass security checks and access private fields that should be hidden, potentially including user password hashes. The severity of the exposure depends on the underlying database: SQLite instances leak complete password hashes, while MySQL instances lose case sensitivity information in hashes, which significantly hampers offline brute-force feasibility. The vulnerability affects Ghost versions 5.46.1 through 6.21.2, and the issue is resolved in version 6.21.2.

Source data · NVD / CISA · public domain

CVSS
3.1 · 5.3 MEDIUM · CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N
Weaknesses (CWE)
CWE-200, CWE-693
Affected products
0 configuration(s)
Published / Modified
2026-06-24 / 2026-06-25

NVD description (verbatim)

Ghost is a Node.js content management system. From 5.46.1 until 6.21.2, the validation applied to filters on the public API endpoints could be partially bypassed, making it possible to reveal private fields via a brute force attack. If SQLite was used as the database password hashes were fully accessible. If MySQL was used as the database the password hashes' case (uppercase / lowercase) would have been lost, which would likely have rendered a further brute force attack on the discovered hashes fruitless. This vulnerability is fixed in 6.21.2.

1 reference(s) · View on NVD →

SEC.co analysis · AI-assisted, reviewed against source

Technical summary

The vulnerability stems from insufficient input validation on filter parameters exposed through Ghost's public API endpoints. An attacker can craft requests that partially circumvent the intended access controls, allowing enumeration and extraction of sensitive fields normally restricted to authenticated users or specific contexts. The attack vector is unauthenticated and requires only network access (CVSS vector AV:N/AC:L/PR:N). The exposure is exacerbated by weak field-level access controls: if the backend uses SQLite, password hashes are returned in full, preserving their cryptographic properties for offline brute-force attacks. With MySQL, the case sensitivity of hash values is stripped during the filtering bypass, which degrades the viability of subsequent password cracking efforts due to reduced search space entropy.

Business impact

For organizations running Ghost with SQLite, this vulnerability creates a direct pathway to credential compromise. A successful attack yields usable password hashes that can be cracked offline, potentially granting attackers administrative or user account access to the CMS and any integrated services. For MySQL deployments, the impact is lower but still concerning: leaked hashes without case sensitivity are less likely to yield credentials quickly, but they confirm user identity and email associations, enabling targeted social engineering. The vulnerability does not allow data modification or system unavailability, but the confidentiality breach poses reputational risk and potential regulatory exposure (GDPR, CCPA) if user personal data is exposed.

Affected systems

Ghost versions from 5.46.1 through 6.21.1 (inclusive) are vulnerable. The fix is available in version 6.21.2. Organizations running Ghost should check their installed version immediately. Deployments using SQLite as the database backend face higher risk due to the complete leakage of password hashes; MySQL users experience reduced but non-zero risk. Any publicly exposed Ghost instances are at immediate risk of enumeration and brute-force attacks.

Exploitability

The attack requires no authentication and no user interaction. An attacker needs only network-level access to the public API endpoints and the ability to craft filter bypass requests. The exploit is straightforward: repeat requests with crafted filter parameters to enumerate private fields and extract sensitive data. No special tools or advanced techniques are required beyond basic HTTP requests. The primary barrier is discovering that the bypass exists and understanding which filter parameters leak which fields—a reconnaissance step that, once accomplished, enables reliable exploitation. The CVSS score of 5.3 (MEDIUM) reflects the ease of exploitation (AC:L, PR:N) balanced against limited impact scope (confidentiality only, no integrity or availability impact).

Remediation

Upgrade Ghost to version 6.21.2 or later immediately. This release includes hardened filter validation that properly blocks attempts to access restricted fields via public API endpoints. Organizations unable to upgrade immediately should consider temporarily disabling public API access if the instance handles sensitive user data, or implementing additional network controls (IP allowlisting, WAF rules) to restrict filter-based queries. Verify that any password hashes extracted during the vulnerability window are invalidated and users are forced to reset passwords.

Patch guidance

Apply the upgrade to Ghost 6.21.2 or any subsequent version in a controlled manner. Test in a staging environment first if your instance has custom plugins or integrations that depend on public API behavior. The fix is backward-compatible and does not require configuration changes. After upgrade, verify that API filter functionality still works as expected for legitimate queries while confirming that private field enumeration is blocked. Check your application logs for any suspicious filter-based API requests prior to patching, which may indicate prior exploitation attempts.

Detection guidance

Monitor API access logs for unusual patterns in filter parameters, particularly repeated requests with slight variations to filter clauses that target private fields. Look for requests attempting to filter on email, password_hash, or other sensitive attributes from unauthenticated sources. Network detection can focus on identifying excessive or rapid public API queries with complex filter syntax from a single source IP. Correlate timing of suspicious API activity with any user account compromise reports. If you have database-level logging, review queries for SELECT statements on sensitive columns that do not match your application's expected access patterns.

Why prioritize this

While the CVSS score is MEDIUM (5.3), the practical impact for SQLite deployments elevates this beyond routine patching. The vulnerability is straightforward to exploit, requires no privileges, and directly exposes password hashes. Organizations running Ghost with SQLite should prioritize this patch within days. MySQL deployments can follow normal patch windows but should not delay beyond a few weeks. The absence of KEV designation reflects the recency of disclosure (June 2026) and the fact that no public exploits or active wild exploitation have been documented at time of publication.

Risk score, explained

CVSS 5.3 (MEDIUM) is assigned due to: network-accessible attack vector with low complexity, requiring no privileges or user interaction (CVSS:3.1/AV:N/AC:L/PR:N/UI:N). The impact is limited to confidentiality (C:L); there is no integrity or availability impact (I:N/A:N), and the scope is unchanged (S:U). However, the practical risk is context-dependent: SQLite users face higher real-world risk because exposed hashes are immediately usable for offline cracking. MySQL users face lower real-world risk due to lost case sensitivity. The CVSS score does not differentiate these scenarios and should be considered a baseline; organizations should adjust internal risk ratings based on their database choice.

Frequently asked questions

Does this vulnerability allow attackers to modify or delete data?

No. The vulnerability is a confidentiality issue only. Attackers can read private fields and password hashes, but they cannot modify data, delete content, or take down the service. Integrity and availability are not impacted.

I run Ghost with MySQL. Am I at risk?

Yes, but with lower urgency than SQLite users. Attackers can still extract password hashes and user emails, but the loss of case sensitivity in MySQL hashes makes offline brute-force significantly harder and often impractical. You should still patch within normal update cycles, but this is not an emergency. If users have reused passwords elsewhere, social engineering risk still exists.

How do I know if my Ghost instance was attacked before I patch?

Review your API access logs for GET requests to public endpoints (typically /ghost/api/content/) with unusual filter parameters that reference private fields like 'password_hash' or 'email'. If you see repeated requests from the same IP with slight filter variations, exploitation may have occurred. Check user accounts for unauthorized access or password resets around the time of suspicious API activity.

Does the fix require me to reset all user passwords?

Not automatically, but it is recommended as a precaution if you cannot verify whether exploitation occurred before patching. At minimum, reset passwords for any accounts that showed signs of unauthorized access (unexpected login locations, password reset emails not initiated by users). For other users, enforcing a reset at next login is a reasonable security practice after this type of vulnerability.

This analysis is based on public vulnerability disclosures available as of the publication date. Patch version numbers, affected version ranges, and vendor advisories referenced herein are drawn from official sources and should be verified against the latest Ghost security advisories before deployment. Real-world risk varies based on deployment configuration (SQLite vs. MySQL), network exposure, and whether the instance processes sensitive user data. Organizations should conduct their own risk assessment in the context of their specific environment. No exploit code or weaponized proof-of-concept is provided or endorsed by SEC.co. This vulnerability analysis is provided for informational and defensive security purposes only. Source: NVD (public-domain), retrieved 2026-08-02. Analysis generated by SEC.co (claude-haiku-4-5).