CVE-2026-78568
Executive Summary
CVE-2026-78568 is a critical SQL Injection vulnerability affecting the Total Donations plugin for WordPress in all versions up to and including 2.0.5. The flaw arises from insufficient escaping of a user-supplied parameter combined with inadequate preparation of an existing SQL query, allowing unauthenticated attackers to inject and append SQL statements to backend queries. With a CVSS score of 9.8, successful exploitation enables complete database compromise, including extraction of sensitive information, data modification, and potentially full server-side control depending on database privileges. The vulnerability is currently unpatched, posing an immediate risk to all WordPress sites running the affected plugin version.
This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.
No signup required
Technical Analysis
The Total Donations plugin for WordPress, versions 2.0.5 and earlier, contains a SQL Injection vulnerability classified under CWE-89 (Improper Neutralization of Special Elements used in an SQL Command). The root cause is twofold: (1) the application fails to properly escape a user-supplied parameter before incorporating it into an SQL query, and (2) the existing SQL query itself is not adequately prepared — meaning parameterized queries or prepared statements are not used consistently.
The attack surface is the public-facing web interface of any WordPress installation running this plugin. SQL injection of this class occurs when user-controlled input is concatenated directly into SQL statements without sanitization or bound parameters. An unauthenticated attacker can manipulate the affected parameter to alter the query structure, terminate the original query, and append additional SQL statements. The data provided does not specify the exact URL endpoint, parameter name, or database management system (MySQL, MariaDB, etc.). This technical detail is insufficiently documented in the NVD description to provide a precise exploitation vector. It should be noted that the injection point is a functional parameter within the plugin's donation functionality that accepts input from unauthenticated users.
The confidentiality, integrity, and availability impacts are all rated HIGH in the CVSS vector. This indicates that even though the attacker initially only interacts with the donation submission flow, the underlying database permissions may allow broader operations. Attackers can extract all data from the WordPress database, including user credentials (hashed passwords), user email addresses, donation records, payment transaction data, and any stored plugin configurations.
Because the vulnerability requires no authentication (PR:N), no user interaction (UI:N), and no special access conditions (AC:L), it is trivially exploitable over the network. An automated scanner or script can target thousands of WordPress installations indiscriminately.
Exploitation Scenarios
The exploitation chain for CVE-2026-78568 is inferred from the vulnerability class described, as no public PoC or exploit code is currently available. The attack chain proceeds as follows:
Step 1 — Reconnaissance and Target Identification: An attacker first identifies WordPress sites running the Total Donations plugin. This is done via search engines using dorks such as those listed in the metadata, by querying the WordPress plugin repository, or by scanning HTTP responses for plugin-specific markers like static asset paths or page structures unique to Total Donations. Since the plugin powers donation pages, targets may include non-profit organizations, political campaigns, crowdfunding sites, and small charities — organizations that may lack dedicated security staff.
Step 2 — Triggering the Vulnerability:
The attacker identifies the donation submission flow, which handles form input from unauthenticated visitors (donors). The vulnerable parameter accepts user-controlled data without proper escaping. The attacker crafts a malicious input designed not to be processed as a normal donation value, but rather to break out of the intended SQL context. In CWE-89 SQL injection, this is typically achieved by injecting a single quote (') or other string terminator to close the current SQL string literal, followed by SQL syntax to manipulate the query structure.
Step 3 — Payload Execution: At the vulnerability-class level, the attacker appends additional SQL statements to the existing query. The classic technique is a UNION-based injection, where the attacker uses UNION SELECT to concatenate a second query that returns attacker-controlled data from other database tables. Alternatively, a time-based or boolean-based blind injection technique can be used to extract data bit-by-bit when no error message is displayed. The final payload might resemble: injecting characters that terminate the original query and append statements such as UNION SELECT user_login, user_pass FROM wp_users — the exact table and column names are illustrative of WordPress defaults but not explicitly confirmed in the NVD data.
Step 4 — Post-Exploitation Impact: Upon successful injection, the attacker retrieves sensitive database contents. The most valuable data in a WordPress database context is the wp_users table, which contains administrator usernames and password hashes (typically bcrypt or phpass). Offline cracking of these hashes can yield valid admin credentials. The attacker may also extract donor personally identifiable information (PII) including names, email addresses, and donation amounts — a serious privacy breach for a donation platform. With sufficient database privileges, the attacker could write new rows (e.g., creating a rogue admin account) or drop tables, causing denial of service. In some configurations, the database user may have FILE privileges, enabling the attacker to write a web shell into the filesystem, escalating to full remote code execution.
No public PoC available; attack chain is inferred from vulnerability class. The absence of authentication requirements makes this vulnerability particularly attractive to automated botnets and credential-stuffing operations seeking to harvest databases en masse.
Impact Assessment
The business impact of CVE-2026-78568 is severe due to the confluence of critical severity rating, unauthenticated exploitability, and lack of a patch. The CVSS base score of 9.8 with a vector AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H translates to:
- Confidentiality (C:H): Complete disclosure of information in the WordPress database, including user credentials, PII of donors, and potentially payment-related records if the plugin stores them.
- Integrity (I:H): The attacker can modify or delete database contents, deface donation pages, manipulate donation records, or poison the site with malicious content.
- Availability (A:H): Database tampering can render the site non-functional; table drops or corruption cause permanent data loss.
The blast radius extends beyond the plugin itself: total compromise of the WordPress application and its data. Because limited-scope (S:U) does not protect the host OS, if the database user has elevated privileges, the attacker could pivot to file writes and achieve remote code execution, fully compromising the underlying server.
For organizations running this plugin, the implications are: reputation damage from donor data exposure, regulatory violations (GDPR, CCPA) from PII leakage, financial loss from direct fraud or remediation costs, and — given the unpatched state — an indefinite window of exposure. The EPSS has not yet been scored, but given the CVSS score and ease of exploitation, weaponization in automated exploit kits is a realistic near-term threat. There are no confirmed threat actor campaigns targeting this CVE at the time of writing.
Detection Guidance
The following detection rules are provided at the vulnerability-class level. SQL injection detection relies on identifying anomalous SQL syntax in HTTP requests, unusual database error responses, and outbound database query patterns. Because no exploit payload is public, these rules target generic SQLi indicators.
Sigma Rule
title: Suspicious SQL Injection Attempt - Total Donations WordPress Plugin
id: 169aa40e-8f7d-4c2b-9d43-ad47d949dcc7
status: experimental
description: Detects SQL injection attempts targeting the Total Donations plugin, based on SQL syntax anomalies in WordPress HTTP requests
author: Valters IT Threat Intelligence
date: 2026/06/15
logsource:
category: webserver
product: apache
service: access_log
detection:
selection_url:
cs-uri-query|contains:
- 'UNION SELECT'
- '%20UNION%20SELECT'
- 'information_schema'
- "' OR '1'='1"
- "' OR '1'='1'--"
- 'sleep('
- 'BENCHMARK('
- '" OR 1=1'
selection_path:
cs-uri-stem|contains:
- 'total-donations'
- 'donation'
condition: selection_url and selection_path
fields:
- c-ip
- cs-user-agent
- cs-uri-query
falsepositives:
- Legitimate security scanning tools
- Misconfigured monitoring solutions probing site
level: high
tags:
- attack.t1190
- attack.t1193
Note: The specific URI stem for the plugin is not confirmed in the NVD data; adjust the
selection_pathbased on observed plugin routes.
YARA Rule
rule wordpress_total_donations_sqli_webshell
{
meta:
author = "Valters IT Threat Intelligence"
description = "Detects PHP web shells or SQLi payload strings commonly associated with Total Donations exploitation"
date = "2026-06-15"
reference = "CVE-2026-78568"
severity = "critical"
strings:
// SQLi payload patterns
$sqli1 = "UNION SELECT" ascii nocase
$sqli2 = "information_schema" ascii nocase
$sqli3 = "concat(" ascii nocase
$sqli4 = "0x3a" ascii nocase // colon hex encoding
// Web shell markers commonly dropped post-exploitation
$shell1 = "eval(base64_decode(" ascii nocase
$shell2 = "assert($_POST" ascii nocase
$shell3 = "system($_GET" ascii nocase
$shell4 = "passthru(" ascii nocase
// Plugin-specific reference
$plugin = "total-donations" ascii nocase
condition:
uint16(0) == 0x5A4D or // PE file
any of ($sqli*) and any of ($shell*) or
any of ($sqli*) and $plugin or
any of ($shell*) and $plugin
}
Suricata IDS Rule
alert http any any -> $HOME_NET any (msg:"ET EXPLOIT WordPress Total Donations SQL Injection Attempt"; flow:established,to_server; content:"GET"; http_method; content:"total-donations"; http_uri; nocase; pcre:"/(UNION\s+SELECT|information_schema|sleep\s*\(|BENCHMARK\s*\(|'|\")/i"; classtype:web-application-attack; sid:2026078568; rev:1; metadata:created_at 2026_06_15, updated_at 2026_06_15, cve 2026-78568;)
Note: The rule above matches generic SQLi patterns in requests containing "total-donations". Adjust the URI match based on the actual plugin path observed in your environment.
Elastic Detection
// Detect suspicious SQLi patterns in web access logs
sequence by source.ip with maxspan=1m
[network where event.category == "web" and
url.path contains "total-donations" and
url.query contains ("UNION SELECT", "information_schema", "sleep(", "BENCHMARK(", "OR 1=1")]
[network where event.category == "web" and
response.status_code >= 500 and
winlog.event_data.Message contains ("SQL syntax", "mysql_fetch", "mysqli", "PDOException")]
Alternative HTTP-based detection:
any where event.category == "web" and
url.path contains "total-donations" and
(url.query contains "union select" or
url.query contains "information_schema" or
url.query contains "sleep(" or
url.query contains "benchmark(" or
url.query contains "%27%20or%20%271%27%3D%271")
Splunk SPL Query
index=web sourcetype=access_combined
| search uri_path="*total-donations*" OR uri_path="*donation*"
| regex uri_query="(?i)(union\s+select|information_schema|sleep\s*\(|benchmark\s*\(|'\s+or\s+'1'='1|%27.*or.*%271%27%3D%271)"
| eval match_type=case(
match(uri_query,"(?i)union\s+select"),"UNION-based SQLi",
match(uri_query,"(?i)sleep\s*\("),"Time-based SQLi",
match(uri_query,"(?i)benchmark\s*\("),"Time-based SQLi",
match(uri_query,"(?i)information_schema"),"Schema enumeration",
1=1,"Other SQLi signature")
| fillnull value="Unknown"
| stats count by src_ip, uri_path, uri_query, match_type, user_agent
| where count > 1
| sort - count
This query identifies source IPs making repeated attempts against the plugin with SQL syntax markers. Tune thresholds to your environment's baseline.
Wazuh OSSEC Rule
<group name="web,sqli,sql_injection,">
<rule id="100856" level="12">
<decoded_as>web</decoded_as>
<description>WordPress Total Donations - Possible SQL Injection Attempt</description>
<match>total-donations|donation</match>
<regex>(\bUNION\b.*\bSELECT\b)|(\binformation_schema\b)|(\bsleep\s*\()|(\bBENCHMARK\s*\()|(' OR '1'='1)|(%27%20OR%20%271%27%3D%271)</regex>
<group>web_application_attack,sql_injection,attack.t1190,</group>
<mitre>
<id>T1190</id>
</mitre>
<options>no_full_log</options>
<if_sid>31100</if_sid>
</rule>
</group>
Mitigation & Patch Guidance
Patch Confidence: 0/4 — UNPATCHED. No patch evidence from any tracked source. No fixed version has been released. The vendor has not acknowledged the vulnerability.
1) Immediate Mitigations (no patch available — deploy all):
- Disable or remove the Total Donations plugin on any production site until a patched version (2.0.6+) is released. If plugin removal breaks critical donation operations, isolate the affected site behind a Web Application Firewall (WAF).
- Configure a WAF (e.g., ModSecurity, Cloudflare WAF, AWS WAF, Imperva) with OWASP Core Rule Set (CRS) to block SQLi payload patterns before they reach the plugin.
- Restrict database user privileges for the WordPress database account to only LEAST PRIVILEGE necessary (no FILE, PROCESS, SUPER, or GRANT OPTION privileges).
- Employ a database activity monitoring system or audit logs to detect anomalous SQL queries.
- Isolate the WordPress database server from the internet; enforce strict network ACLs.
2) Patch/Upgrade Steps:
- No patch available. Monitor the WordPress plugin repository (wordpress.org/plugins/total-donations) for a security release.
- Subscribe to vendor security advisories if the plugin is distributed outside the official repository, to receive patch notifications.
- When a patched version is released, upgrade immediately. Verify the plugin is compatible with your core WordPress version before updating.
3) Long-Term Hardening:
- Implement a WordPress vulnerability management program: run weekly scans with WPScan or similar tools to identify plugins with known CVEs.
- Enforce least privilege for the WordPress database user; prohibit FILE privilege to block webshell write attempts.
- Regular database backups with offsite storage; test restoration procedures monthly.
- Implement an incident response playbook specific to SQL injection.
- Monitor CISA KEV catalog daily since this CVE, while not currently listed, may be added after active exploitation begins.
- If the plugin appears abandoned, plan a migration to an actively maintained donation plugin with a proven security track record.
- Deploy a hardened WordPress baseline: disable XML-RPC if unused, enforce strong admin passwords, enable 2FA, and lock down wp-admin via network allowlisting.
References
- NVD Entry — https://nvd.nist.gov/vuln/detail/CVE-2026-78568 (Official NVD record, CVSS vector, description)
- WordPress Plugin Repository (Total Donations) — https://wordpress.org/plugins/total-donations/ (Monitor for patched releases)
- OWASP SQL Injection Prevention Cheat Sheet — https://cheatsheetseries.owasp.org/cheatsheets/SQL_Injection_Prevention_Cheat_Sheet.html (Reference for hardening against CWE-89)
- CISA Known Exploited Vulnerabilities Catalog — https://www.cisa.gov/known-exploited-vulnerabilities-catalog (Check for future additions of this CVE)
Exploit-in-the-Wild Status: No evidence of active exploitation, weaponized PoC, or threat actor campaigns has been identified at the time of this report. CISA KEV listing: NO. The vulnerability remains unclaimed by any known APT or cybercrime group; however, the severity and ease of exploitation make it a prime candidate for inclusion in automated WordPress exploitation kits (e.g., WPScan automation scripts). Organizations should treat this as a "patched-not-yet-exploited" but high-priority risk and monitor for exploit disclosures.
What is this? Security researchers use these exact search queries on Shodan.io (a search engine for internet-connected devices) to find vulnerable systems globally. You can copy these dorks to see if your organization's IP space is exposed.
💣 PoC CODE AVAILABLE
Exploit code for this CVE is tracked in our database.
Access poc_code via API Pro.