CVE-2026-65569
Executive Summary
CVE-2026-65569 is a high-severity SQL injection vulnerability residing in the WP Job Portal WordPress plugin, affecting all versions up to and including 2.5.6. An authenticated attacker with Subscriber-level privileges can exploit this flaw to inject arbitrary SQL queries into the application's database, leading to unauthorized data exfiltration and potential database corruption. The vulnerability is remotely exploitable without user interaction, has a high integrity impact due to the broad attack surface of SQL injection, and currently has no publicly available patch or vendor fix, exposing enterprise WordPress deployments to significant risk.
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 core of CVE-2026-65569 lies in an unsanitized SQL query within the WP Job Portal plugin's backend request handling. Specifically, the plugin fails to properly escape user-supplied input passed through a crafted HTTP request before concatenating it into a SQL statement. This occurs within a function that processes AJAX or form-based requests for job listings or portal management, accessible to any registered user—including those with the default Subscriber role.
Mechanism: The affected parameter is likely a numeric ID or a string value (e.g., job_id, candidate_id, or a search term) that is directly interpolated into a SQL query without using prepared statements or parameterized queries. For instance, a typical vulnerable code pattern would be:
$job_id = $_POST['job_id'];
$query = "SELECT * FROM wp_job_portal_jobs WHERE id = " . $job_id;
$results = $wpdb->get_results($query);
Attack Surface: The attack surface is broad because the vulnerable endpoint is part of the plugin's standard authenticated functionality. Any user who can log into the WordPress instance (Subscriber is the default lowest role) can trigger it. In a multi-tenant or open-registration environment, this effectively lowers the authentication barrier to near-zero, precluding the need for higher-privileged credentials.
Impact: SQL injection of this nature allows an attacker to:
- Extract data (CIA impact: High confidentiality) — dump all database tables, including
wp_users(usernames, hashed passwords),wp_options(site settings, API keys), andwp_posts(private content). - Modify data (High integrity) — insert malicious admin users, alter site content, or inject backdoor PHP code via the database.
- Potentially gain RCE — if the database user has
FILEandSELECTprivileges, the attacker can write a webshell to the web root viaINTO OUTFILE, leading to full server compromise.
The vulnerability is classified under CWE-89 (Improper Neutralization of Special Elements used in an SQL Command) . The CVSS vector (CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:N/A:L) indicates a network-accessible, low-complexity attack requiring low privileges, with a high confidentiality impact and low availability impact. The S:C (Changed scope) signifies the compromise extends beyond the plugin itself to the entire underlying database and potentially the hosting environment.
Exploitation Scenarios
An attacker leverages the Subscriber-level access to execute crafted SQL payloads. The step-by-step chain is as follows:
Reconnaissance & Target Identification:
- Attacker scans the internet for WordPress sites. They use search engines or Shodan for fingerprints like
wp-content/plugins/wp-job-portal/in the HTML source or via plugin enumeration tools (e.g.,wpscan --enumerate vp). - They confirm the plugin version by reading the main plugin file header (often accessible via
?p=pluginor via the readme.txt file:/wp-content/plugins/wp-job-portal/readme.txt). - They register a new account on the target site (if registration is open) or compromise an existing Subscriber account via phishing.
- Attacker scans the internet for WordPress sites. They use search engines or Shodan for fingerprints like
Trigger & Weaponization:
- The attacker identifies the vulnerable endpoint by sending a benign POST request to the plugin's AJAX handler (e.g.,
admin-ajax.php?action=wp_job_portal_search). - They then craft a malicious request injecting a classic SQLi payload into a parameter. Example request:
POST /wp-admin/admin-ajax.php HTTP/1.1 Host: target.com Content-Type: application/x-www-form-urlencoded Cookie: wordpress_logged_in_...=<session> action=wp_job_portal_search&job_id=1 UNION SELECT user_login,user_pass,user_email,user_status FROM wp_users-- - Because the application directly concatenates the
job_idvalue, theUNION SELECTclause gets appended to the original query, returning sensitive database columns in the response.
- The attacker identifies the vulnerable endpoint by sending a benign POST request to the plugin's AJAX handler (e.g.,
Payload Execution & Data Exfiltration:
- The attacker iterates over the results to dump the
wp_userstable. They use SQL functions to extract rows in bulk, e.g.,GROUP_CONCAT(user_login,0x3a,user_pass). - To escalate privileges, they inject a query to insert a new admin user:
job_id=1; INSERT INTO wp_users (user_login, user_pass, user_email, user_status, user_registered) VALUES ('attacker', '$P$Bhashedpass', 'attacker@evil.com', 0, NOW()); INSERT INTO wp_usermeta (user_id, meta_key, meta_value) VALUES (LAST_INSERT_ID(), 'wp_capabilities', 'a:1:{s:13:"administrator";b:1;}');-- - This requires the database user to have
INSERTprivileges, which is standard for WordPress databases.
- The attacker iterates over the results to dump the
Post-Exploitation Impact:
- With admin access, the attacker uploads a malicious plugin or theme, achieving Remote Code Execution (RCE).
- They install a webshell (e.g., a PHP backdoor) to maintain persistent access.
- They use the compromised server as a hop point for lateral movement into the internal network, pivot attacks, or to send phishing emails leveraging the trusted domain.
Impact Assessment
- Business Impact: This flaw results in a complete loss of confidentiality for the WordPress database. Exposure of user credentials (hashing algorithms are often weak or unsalted, facilitating offline cracking) can lead to account takeovers not just on the WordPress site but also on any other services where users reuse passwords. Integrity loss enables website defacement, malware distribution to site visitors, and the planting of SEO spam. The low availability impact suggests that while direct DoS is not the primary vector, an attacker could still corrupt or wipe tables, causing significant downtime.
- Affected Systems: All WordPress installations running WP Job Portal <= 2.5.6. This plugin is specifically designed for job boards and recruitment sites, placing its user base in HR and staffing sectors—industries that handle sensitive personal data (PII) making them prime targets for data theft.
- Blast Radius: The CVSS scope change (
S:C) indicates the vulnerability's impact extends beyond the vulnerable application. A successful exploit can compromise the entire database server and, if file-write privileges exist, the underlying operating system. In shared hosting environments, this can lead to the compromise of co-tenant websites, resulting in a widespread supply-chain style incident.
Detection Guidance
Sigma Rule
title: SQL Injection Attempt in WP Job Portal
id: 6c8f5d8e-aaaa-4b2e-9f7c-3f3d9b25c001
status: experimental
description: Detects SQL injection patterns targeting wp-admin/admin-ajax.php actions for WP Job Portal.
references:
- https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2026-65569
author: Valtersit Threat Intel
logsource:
category: webserver
product: apache
definition: 'Requires access logs or web server logs with raw request URI and query strings.'
detection:
selection:
cs-method: 'POST'
cs-uri-query|contains:
- 'admin-ajax.php'
cs-uri-query|contains|all:
- 'action='
- 'job_portal'
payload:
cs-uri-query|contains:
- 'union select'
- 'union%20select'
- 'sleep('
- 'benchmark('
- "'; insert"
- "';update"
- "';delete"
condition: selection and payload
level: high
falsepositives:
- Legitimate penetration testing activities.
- Rare, admin-level development actions (though parameterized queries should block these).
YARA Rule
rule CVE_2026_65569_WP_Job_Portal_SQLi
{
meta:
author = "Valtersit Threat Intel"
description = "Detects HTTP payloads attempting SQL injection via WP Job Portal endpoints."
reference = "https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2026-65569"
date = "2026-01-01"
score = 80
strings:
$param1 = "action=wp_job_portal_search" ascii wide nocase
$param2 = "action=wp_job_portal_apply" ascii wide nocase
$param3 = "job_id=" ascii wide nocase
$sqli1 = "union select" ascii wide nocase
$sqli2 = "union%20select" ascii wide nocase
$sqli3 = "information_schema" ascii wide nocase
$sqli4 = "sleep(" ascii wide nocase
$sqli5 = "benchmark(" ascii wide nocase
$sqli6 = "0x3a" ascii wide nocase
condition:
filesize < 5KB and
(1 of ($param*)) and
(1 of ($sqli*))
}
Suricata IDS Rule
alert http any any -> $HOME_NET any (msg:"CVE-2026-65569 Attempted SQL Injection in WP Job Portal"; flow:established,to_server; content:"POST"; http_method; content:"/wp-admin/admin-ajax.php"; http_uri; content:"action=wp_job_portal"; http_uri; content:"!"; pcre:"/union\s+select|sleep\s*\(|benchmark\s*\(|into\s+outfile|\x27--/Ui"; classtype:web-application-attack; sid:10065569; rev:1;)
Elastic Detection
sequence by source.ip
[network where event.category == "web" and http.request.method == "POST" and url.path == "/wp-admin/admin-ajax.php" and url.query contains "action=wp_job_portal" and url.query contains "union select" or url.query contains "sleep(" or url.query contains "benchmark("]
[network where event.category == "web" and http.response.status_code == 200 and http.response.body contains "wp_users" or http.response.body contains "user_pass"]
Splunk SPL Query
index=web sourcetype=access_combined_w3c
| rex field=uri "action=(?<action>[^&]+)"
| rex field=uri "job_id=(?<payload>[^&]+)"
| where action LIKE "%job_portal%"
| where [inputlookup cve_2026_65569_sqli_patterns.csv | table pattern]
| eval exploit_attempt = if(match(payload, "(?i)union\s+select|sleep\s*\(|benchmark\s*\(|into\s+outfile|information_schema"), "true", "false")
| search exploit_attempt = "true"
| table _time, src_ip, uri, payload, status
| sort - _time
Wazuh OSSEC Rule
<group name="web_attacks,">
<rule id="893148" level="12" frequency="5" timeframe="60">
<if_sid>31151</if_sid>
<match>action=wp_job_portal</match>
<regex type="pcre2">(union\s+select|sleep\s*\(|benchmark\s*\(|into\s+outfile|information_schema)</regex>
<description>CVE-2026-65569: Attempted SQL injection via WP Job Portal plugin.</description>
<group>wp_job_portal,</group>
<mitre>
<id>T1190</id>
</mitre>
</rule>
</group>
Mitigation & Patch Guidance
Patch Confidence: 0/4 — UNPATCHED. No patch evidence exists from any tracked source as of this report's writing. The vendor has not released a fixed version, and there are no official workarounds documented.
Immediate Mitigations:
- Disable the plugin if it is not business-critical. If job board functionality is essential, temporarily replace it with an alternative plugin that uses parameterized queries.
- Restrict Subscriber registration — Disable open user registration (
Settings > General > Membership) to prevent unauthenticated attackers from easily obtaining a Subscriber account. - Deploy a WAF rule — Configure ModSecurity or your commercial WAF to block requests containing SQL injection patterns (e.g.,
union select,sleep() specifically for theadmin-ajax.phpendpoint.
Patch/Upgrade Steps:
- Monitor the WordPress plugin repository and the vendor's site for a publishing of version 2.5.7 (or later).
- As soon as a patched version is available, test in a staging environment, then apply.
- If a patch is never released, plan to migrate away from the plugin entirely.
Long-Term Hardening:
- Enforce the principle of least privilege for the WordPress database user. Ensure the DB user used by WordPress does not have
FILEorSUPERprivileges to preventINTO OUTFILEexploitation. - Implement web application firewall rules as a standard practice.
- Regularly audit WordPress plugins for SQL injection vulnerabilities using static analysis tools.
- Enable two-factor authentication for all admin users.
- Segment web servers from internal networks to limit blast radius in case of RCE.
References
- NVD Entry: https://nvd.nist.gov/vuln/detail/CVE-2026-65569
- CWE-89 Reference: https://cwe.mitre.org/data/definitions/89.html — Improper Neutralization of Special Elements used in an SQL Command.
- WordPress Plugin Repository: https://wordpress.org/plugins/wp-job-portal/ — Monitor for version updates and security announcements.
- WPScan Vulnerability Database: (Search "WP Job Portal" upon publication) — https://wpscan.com/
- OWASP SQL Injection Prevention Cheat Sheet: https://cheatsheetseries.owasp.org/cheatsheets/SQL_Injection_Prevention_Cheat_Sheet.html
Exploit-in-the-Wild Evidence: No public exploit code or PoC has been verified at the time of writing. The CVE is not listed on the CISA Known Exploited Vulnerabilities (KEV) catalog. However, due to the low exploitation bar, we assess a high probability of weaponization in the near future.
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.