Skip to main content
Mallory
HighPublic exploit

SQL Injection in Ghost Content API

IdentifiersCVE-2026-26980CWE-89· Improper Neutralization of Special…

CVE-2026-26980 is a SQL injection vulnerability in the Ghost Node.js content management system’s Content API. Affected versions are 3.24.0 through 6.19.0. The flaw allows an unauthenticated remote attacker to trigger arbitrary reads from the backend database via crafted Content API requests. Reporting in the provided content indicates the vulnerable path is associated with Content API query handling, including filter processing, and that exploitation can expose sensitive records such as the Ghost Admin API key. Once that key is obtained, an attacker can pivot from database disclosure to unauthorized use of the administrative API to alter site content.

Share:
For your environment

Are you exposed to this one?

Mallory correlates every CVE against your assets, your vendors, and active adversary campaigns. Know which vulnerabilities matter for you, not just which ones are loud.

ANALYST BRIEF

Impact, mitigation & remediation

What it means. What to do now. Patch path, mitigations, and the assume-compromise checklist.

Impact

What an attacker gets, and what they’ve been doing with it.

The primary impact is unauthenticated disclosure of arbitrary database contents. Exposed data can include sensitive application data and, in the worst case described in the provided content, the Ghost Admin API key. Compromise of that key enables full administrative API access, allowing attackers to manage or modify published content, inject malicious JavaScript into articles, and effectively take over the CMS for content-level operations. Real-world exploitation described in the content used this path to poison hundreds of Ghost sites and turn legitimate pages into malware delivery infrastructure. The supplied CVSS vector also indicates high confidentiality and integrity impact with low availability impact.

Mitigation

If you can’t patch tonight, do this now.

No complete application-level workaround is available in the provided content. As a temporary mitigation before patching, deploy a reverse proxy or WAF rule to block Content API requests whose query-string filter parameter contains slug%3A%5B or slug:[, with the caveat that this may disrupt legitimate slug-filter functionality. Because the Content API key is public by design, restricting that key does not mitigate the vulnerability. Additional defensive steps from the provided reporting include monitoring for unusual bulk PUT or Admin API requests and scanning content for known malicious script patterns.

Remediation

Patch, then assume compromise.

Upgrade Ghost to version 6.19.1 or later. Version 6.19.1 contains the vendor fix for this issue. After patching, rotate potentially exposed Ghost Admin API keys and administrator credentials, review administrative/API activity for unauthorized use, and inspect article content and themes for injected malicious JavaScript or other unauthorized modifications. If compromise is suspected, remove injected content from the database and retain/review relevant logs, including Admin API activity, for incident response.
PUBLIC EXPLOITS

Exploits

3 valid exploits after Mallory filtered fakes, detection scripts, and README-only repos (2 hidden).

VALID 3 / 5 TOTALView more in app
CVE-2026-26980MaturityPoCVerified exploit

This repository is a self-contained exploit lab and PoC for CVE-2026-26980, an unauthenticated SQL injection in TryGhost Ghost CMS Content API filter handling. The repo contains a Docker-based environment that installs Ghost 6.19.0, seeds a SQLite database with a known public Content API key and oracle tags, and a Python exploit script that abuses the public /ghost/api/content/tags/ endpoint. Repository structure: Dockerfile builds a vulnerable Ghost 6.19.0 lab on port 9102; docker-entrypoint.sh starts Ghost, waits for readiness, and seeds the database with branding, a fake flag table, a static content API key, and two public tags (bacon/chorizo) used as an oracle; patch-source-theme.sh modifies the default Ghost theme for lab branding; poc.py is the main exploit. README.md documents the vulnerability, setup, and usage. Main exploit behavior in poc.py: it sends GET requests to /ghost/api/content/tags/?key=<key>&filter=<payload>, where the filter is crafted by condition_filter() to inject SQL into the slug:[...] ordering logic. The exploit uses the relative order of returned tags as a boolean oracle: if the injected condition is true, bacon appears first; if false, chorizo appears first. On top of this primitive, the script implements value_length() and count_rows() using binary search, and recover_value_by_prefix() for character-by-character extraction. It targets users, settings, and api_keys tables and demonstrates extraction of admin email, admin name, admin API key ID, and admin API secret. This is a real exploit PoC rather than a detector. It does not attempt code execution; its capability is database enumeration and arbitrary value extraction via blind boolean SQLi over a public unauthenticated web endpoint, provided a public Content API key is available.

EQSTLabDisclosed May 27, 2026dockerfilemarkdownwebnetwork
ghost-cve-2026-26980MaturityPoCVerified exploit

This repository is a self-contained lab and operational PoC for CVE-2026-26980, an unauthenticated blind SQL injection in Ghost CMS Content API slug filter ordering. The repo contains 5 files: a detailed README, docker-compose.yml to launch vulnerable Ghost 6.18.0 and fixed Ghost 6.19.1 with MySQL 8, exploit.py as the main Python exploit, requirements.txt listing requests, and validate.sh for end-to-end validation. The exploit is not tied to a common framework. The main capability is unauthenticated arbitrary database read from affected Ghost instances by abusing the public Content API key and injecting SQL through slug array ordering. The Python script automates target readiness checks, optional Ghost setup/login for the local lab, retrieval or use of a Content API key, verification of the boolean oracle, and blind extraction of sensitive values. The oracle relies on a crafted slug payload using CASE WHEN ... THEN 0 ELSE EXP(710) END so that true conditions return HTTP 200 and false conditions trigger HTTP 500 due to MySQL overflow. The script can extract the admin email by default and optionally the admin bcrypt hash and admin API secret. It also includes a validation mode to confirm the fix on patched versions. Repository structure and purpose: README.md explains the vulnerability, affected/fixed versions, exploitation method, and usage examples. docker-compose.yml provisions two Ghost environments for testing: vulnerable on localhost:2368 and fixed on localhost:2369, each backed by MySQL 8. exploit.py is the primary entry point and contains the exploit logic, CLI, hardcoded lab credentials, and HTTP interactions with Ghost admin and content API endpoints. validate.sh installs dependencies, starts both containers, runs the exploit against the vulnerable instance, validates the fix against the patched instance, and optionally tears down the lab. Overall, this is a real exploit PoC with practical extraction capability rather than a simple detector. It targets Ghost CMS versions prior to 6.19.1 and demonstrates blind SQLi-based database disclosure over HTTP.

dinosnDisclosed Apr 17, 2026markdownyamlwebnetwork
CVE-2026-26980MaturityPoCVerified exploit

This repository is a small standalone Python exploit for CVE-2026-26980, described as an unauthenticated SQL injection in Ghost CMS's public Content API leading to arbitrary database reads. The repository contains five files: a GPL license, a README with usage and lab instructions, the main exploit script (`main.py`), a minimal dependency file (`requirements.py`, though it is named like a Python file rather than `requirements.txt`), and a Docker Compose lab for Ghost 6.16.1 with MariaDB. The core logic is entirely in `main.py`. The exploit first requests the target homepage and scrapes `data-key` and `data-api` values from the HTML. It then queries the public `tags` API endpoint to obtain a valid tag slug and ID, which are used to construct a vulnerable `filter=slug:[...]` request template. The injection is implemented as a blind boolean oracle that intentionally triggers database errors when a tested condition is true. For SQLite it uses integer overflow via `abs(-9223372036854775808)`, and for MySQL it uses `exp(710)`. The script detects success by searching the HTTP response body for `badrequesterror` or `InternalServerError`. Using this oracle, the exploit performs bitwise length inference and binary-search character extraction. It supports concurrent extraction with a thread pool to speed up blind exfiltration. In default mode it performs reconnaissance against common Ghost tables (`users`, `members`, `api_keys`, `sessions`) and extracts high-value secrets including the first admin email, admin name, password hash, admin API key ID, and admin API secret. In table-dump mode, it can enumerate record counts and dump arbitrary rows from a specified table. For SQLite, it additionally queries `sqlite_master` to recover schema SQL and infer column names; for MySQL, column handling is more heuristic and defaults to common fields. The exploit is operational rather than a mere proof of concept because it contains end-to-end discovery, oracle calibration, multithreaded extraction, and table dumping functionality. It is not part of a larger exploit framework. One code-quality issue is that `main.py` references `textwrap.dedent` in the CLI epilog but does not import `textwrap`, which would cause a runtime error unless corrected. Despite that bug, the intended exploit behavior and capabilities are clear from the code.

vognikDisclosed Mar 29, 2026pythonyamlwebnetwork
EXPOSURE SURFACE

Affected products & vendors

Products and vendors Mallory has correlated with this vulnerability. Open in Mallory to drill down to specific CPE configurations and version ranges.

VendorProductType
GhostGhostapplication

Vendor-confirmed product mapping. Mallory continuously reconciles this list against your asset inventory.

ACTIVITY FEED

Recent activity

132 sources tracked across advisories, community write-ups, and news. New activity surfaces here as Mallory finds it.

levelblueNews
Jun 4, 2026
macOS ClickFix Social Engineering Campaigns

A SQL injection vulnerability in Ghost CMS that was used to compromise legitimate web infrastructure and inject malware loaders into more than 700 domains.

Read more
xakepNews
May 27, 2026
Уязвимость в Ghost CMS привела к взлому 700 сайтов и распространению ClickFix-атак - Хакер

Критическая SQL-инъекция в Ghost CMS, позволяющая неаутентифицированному атакующему читать данные из БД, получать API-ключ администратора и затем полностью компрометировать административный API для внедрения вредоносного кода на сайты.

Read more
scworldNews
May 26, 2026
Ghost CMS vulnerability exploited in large-scale campaign | brief | SC Media

A critical unauthenticated SQL injection vulnerability in Ghost CMS that affects versions 3.24.0 through 6.19.0 and can be used to steal admin API keys, gain elevated privileges, and inject malicious JavaScript into website content.

Read more
cyber security newsNews
May 26, 2026
Hackers Exploit Ghost CMS CVE-2026-26980 to Poison 700 Websites With ClickFix Malware

A high-risk unauthenticated SQL injection vulnerability in Ghost CMS that allows attackers to read the database, extract the Admin API Key, and use the Ghost Admin API to mass-modify site content, enabling large-scale website poisoning and malware delivery.

Read more
What this page doesn’t show

The version that knows your environment.

This page is what’s public. Mallory adds the parts that aren’t: which of your assets are affected, which adversaries are exploiting it right now, which detections to deploy, and what to do tonight.
Exposure mapping

Query your assets running an affected version, and investigate the blast radius.

Threat actor evidence

Every observed campaign linking this CVE to a named adversary.

Associated malware7

Malware families riding this exploit, with evidence and IOCs.

Detection signatures1

YARA, Sigma, Snort, and vendor rules, auto-deployed to your SIEM.

Vendor-by-vendor mapping

Cross-references every affected SKU, including bundled OEM variants.

Social activity123

Community discussion across Reddit, Mastodon, and other social sources.