CVE-2026-26980
JavaScript vulnerability analysis and mitigation

Overview

CVE-2026-26980 is a SQL injection vulnerability in Ghost CMS's Content API that allows unauthenticated attackers to read arbitrary data from the database. It affects Ghost versions 3.24.0 through 6.19.0 (Node.js package) and was disclosed on February 16, 2026, with the patch released the same day. The vulnerability was discovered by Nicholas Carlini using Claude (Anthropic's AI) and reported responsibly to the Ghost team. The GitHub Security Advisory assigns a CVSS v3.1 score of 9.4 (Critical), while NVD records a base score of 7.5 (High) (GitHub Advisory, Ghost Security Advisory).

Technical details

The root cause is improper neutralization of special elements in an SQL command (CWE-89), specifically in the slug filter ordering logic of Ghost's Content API. The vulnerable code in slug-filter-order.js directly interpolated user-supplied slug values into a raw SQL CASE statement without parameterization — e.g., constructing WHEN \table`.`slug` = '${slug}' THEN ${index}— allowing an attacker to inject arbitrary SQL via thefilterquery parameter using a payload likeslug:[ in a Content API request. Because the Content API key is public by design, no authentication or special privileges are required to reach the vulnerable endpoint. The fix switched to parameterized query bindings (?placeholders with a separatebindingsarray), preventing user input from being interpreted as SQL ([GitHub Commit](https://github.com/TryGhost/Ghost/commit/30868d632b2252b638bc8a4c8ebf73964592ed91), [GitHub Advisory](https://github.com/advisories/GHSA-w52v-v783-gw97)). Multiple public PoC repositories exist, includinggithub.com/vognik/CVE-2026-26980, github.com/dinosn/ghost-cve-2026-26980, and github.com/EQSTLab/CVE-2026-26980`, and the vulnerability has been added to Exploit-DB (EDB-52555) and Sploitus.

Impact

Successful exploitation allows an unauthenticated remote attacker to read arbitrary data from the Ghost database, including API keys, staff user credentials, subscriber email addresses, and other sensitive site content. Because the vulnerability exposes API keys, attackers can subsequently authenticate as administrators or staff, enabling further compromise such as content injection, site defacement, or lateral movement within the hosting environment. In the wild, attackers exploited this flaw to inject malicious ClickFix scripts into over 700 Ghost-powered websites — including education and technology sector sites — turning them into malware distribution platforms targeting site visitors (GitHub Advisory, BleepingComputer, xlab Qianxin).

Exploitability

This vulnerability is actively exploited in the wild, with mass exploitation campaigns documented in May 2026 compromising over 700 self-hosted Ghost CMS instances to deliver ClickFix malware to site visitors (BleepingComputer, SecurityWeek). Multiple public PoC exploits are available on GitHub and Exploit-DB, and Nuclei templates have been published for automated scanning (GitHub Advisory). The EPSS score is approximately 56.7% (98th percentile) per the GitHub Advisory, indicating a very high probability of exploitation. No specific threat actor attribution has been confirmed, though competing threat actors were observed targeting the same vulnerable sites (xlab Qianxin). CISA KEV catalog status is not confirmed in available sources.

Exploitation steps

  1. Reconnaissance: Identify internet-facing Ghost CMS instances running versions 3.24.0–6.19.0 using Shodan, Censys, or Nuclei templates targeting the Ghost Content API endpoint (e.g., /ghost/api/content/).
  2. Obtain Content API key: Retrieve the public Content API key from the Ghost site's frontend JavaScript or configuration (it is publicly accessible by design).
  3. Craft malicious filter parameter: Construct a Content API request with a SQL injection payload in the filter query parameter targeting the slug array syntax, e.g., GET /ghost/api/content/tags/?key=<API_KEY>&filter=slug:[<SQL_INJECTION_PAYLOAD>]. The slug values are interpolated directly into a raw SQL CASE statement.
  4. Execute blind/time-based SQL injection: Use tools like sqlmap or a custom script to enumerate database contents via boolean-based or time-based blind SQL injection, extracting tables, API keys, staff credentials, and subscriber data.
  5. Extract API keys and credentials: Use the dumped admin API keys or staff credentials to authenticate to the Ghost Admin API (/ghost/api/admin/).
  6. Inject malicious content: With admin access, modify Ghost theme files, inject JavaScript (e.g., ClickFix fake CAPTCHA scripts), or alter post/page content to serve malware to site visitors (GitHub Advisory, xlab Qianxin, Ghost Security Advisory).

Indicators of compromise

  • Network: Unusual HTTP GET requests to Ghost Content API endpoints (e.g., /ghost/api/content/tags/, /ghost/api/content/posts/) with filter parameters containing slug%3A%5B or slug:[ and SQL metacharacters; high-frequency or automated requests to Content API from a single IP; outbound connections from the Ghost server to unknown C2 infrastructure.
  • Logs: Web server/access logs showing repeated Content API requests with encoded bracket syntax (slug%3A%5B) or SQL keywords in the filter parameter; Ghost application logs showing database errors or unusual query patterns; admin API authentication events from unexpected IP addresses following Content API access.
  • File System: Unexpected modifications to Ghost theme files (e.g., default.hbs, index.hbs) containing injected JavaScript; new or modified files in the Ghost content directory; ClickFix-style fake CAPTCHA or Cloudflare verification scripts injected into page templates.
  • Database: Unexpected reads of the api_keys, users, or members tables; evidence of data exfiltration in database query logs.
  • Process/Behavior: Ghost admin panel accessed from unfamiliar IP addresses; staff user accounts created or modified; API keys rotated or new integrations added without administrator action (xlab Qianxin, GitHub Advisory).

Mitigation and workarounds

Immediate action: Upgrade Ghost to version 6.19.1 or later, which replaces direct SQL string interpolation with parameterized query bindings in the slug filter ordering logic (Ghost Release, GitHub Advisory).

Temporary workaround (if patching is not immediately possible): Configure a reverse proxy or WAF rule to block Content API requests containing slug%3A%5B or slug:[ in the filter query string parameter. Note this may break legitimate slug filter functionality.

Post-exploitation remediation: Because the vulnerability exposes API keys, Ghost recommends reviewing all staff users for unauthorized additions and rotating all API keys after patching. There is no application-level workaround that fully mitigates the vulnerability, as the Content API key is public by design (Ghost Security Advisory).

Community reactions

The vulnerability received significant attention across the security community following reports of mass exploitation in May 2026. BleepingComputer, SecurityWeek, The Hacker News, Security Affairs, and TechRadar all covered the large-scale ClickFix campaign exploiting the flaw (BleepingComputer, SecurityWeek). Notably, the vulnerability was credited to Nicholas Carlini, who used Anthropic's Claude AI to discover it — generating discussion about AI-assisted vulnerability research (Ghost Security Advisory). The Ghost community forum saw active discussion from affected site owners, and CERT.at, ThaiCERT, and NCSC (UK) issued advisories or summaries. SOC Prime published detection rules, and Maltrail added network signatures for exploitation traffic. Reddit's r/blueteamsec and r/cybersecurity threads highlighted the severity and the ClickFix campaign's scale.

Additional resources


SourceThis report was generated using AI

Related JavaScript vulnerabilities:

CVE ID

Severity

Score

Technologies

Component name

CISA KEV exploit

Has fix

Published date

CVE-2026-54155HIGH7.7
  • JavaScript logoJavaScript
  • node-opcua
NoNoAug 20, 2026
CVE-2026-54156HIGH7.5
  • JavaScript logoJavaScript
  • node-opcua
NoYesAug 20, 2026
CVE-2026-55451MEDIUM6.9
  • JavaScript logoJavaScript
  • gettext-converter
NoYesAug 20, 2026
CVE-2026-54150MEDIUM6.9
  • JavaScript logoJavaScript
  • next-video
NoYesAug 20, 2026
GHSA-ghvf-qf6h-g8x5HIGHN/A
  • JavaScript logoJavaScript
  • @nocobase/server
NoYesAug 20, 2026

Free Vulnerability Assessment

Benchmark your Cloud Security Posture

Evaluate your cloud security practices across 9 security domains to benchmark your risk level and identify gaps in your defenses.

Request assessment

Get a personalized demo

Ready to see Wiz in action?

"Best User Experience I have ever seen, provides full visibility to cloud workloads."
David EstlickCISO
"Wiz provides a single pane of glass to see what is going on in our cloud environments."
Adam FletcherChief Security Officer
"We know that if Wiz identifies something as critical, it actually is."
Greg PoniatowskiHead of Threat and Vulnerability Management