CVE-2024-43266
Executive Summary
CVE-2024-43266 is an Authorization Bypass Through User-Controlled Key vulnerability (CWE-639) in the WordPress plugin WP Job Portal (wp-job-portal). This flaw allows an authenticated attacker with low privileges to manipulate a user-controlled key (likely a numeric ID or token) to access or modify resources belonging to other users, such as job applications, employer profiles, or candidate data. The vulnerability affects all versions up to and including 2.1.8. No official patch has been released, and no public exploit code or proof-of-concept is currently available. The CVSS score of 5.4 (Medium) reflects the need for authentication but the potential for unauthorized data access.
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
Supply Chain & Package Security
This vulnerability resides in a WordPress plugin distributed via the official WordPress plugin repository. Users who installed the plugin via the WordPress admin dashboard or directly from the repository are affected. There is no known compromise of the plugin’s update channel or source code repository. The risk is limited to the plugin’s own insecure authorization logic.
CVSS Breakdown & Threat Level
- Attack Vector (AV): Network (N) – The vulnerability is exploitable remotely.
- Attack Complexity (AC): Low (L) – No special conditions are required.
- Privileges Required (PR): Low (L) – An attacker must have a valid user account (e.g., subscriber or candidate).
- User Interaction (UI): None (N) – No victim interaction is needed.
- Scope (S): Unchanged (U) – The vulnerable component and the impacted component are the same.
- Confidentiality (C): Low (L) – Limited unauthorized data access.
- Integrity (I): Low (L) – Limited unauthorized modification possible.
- Availability (A): None (N) – No impact on availability.
Threat Level: Medium. The requirement for authentication reduces the attack surface, but the potential for data leakage or manipulation across user accounts is significant for a multi-tenant job portal.
Deep Dive & Mechanics
The vulnerability lies in the plugin’s failure to verify that a user-controlled parameter (e.g., application_id, employer_id, or candidate_id) belongs to the currently authenticated user. When processing requests to view or modify job applications, employer profiles, or candidate details, the plugin uses the provided ID directly in database queries without checking ownership.
Example vulnerable endpoint (hypothetical):
POST /wp-admin/admin-ajax.php?action=wpjobportal_ajax
&wpjobportal_task=get_application
&application_id=123
If the plugin does not validate that application_id belongs to the logged-in user, an attacker can enumerate IDs to access other users’ applications.
Root Cause: The plugin likely uses a function like get_application_by_id($application_id) without a subsequent WHERE user_id = current_user_id clause. This is a classic Insecure Direct Object Reference (IDOR) pattern.
Vulnerable vs. Patched Code
Since no patch is available, the following is a hypothetical comparison based on the vulnerability type.
Vulnerable Code (wp-job-portal/modules/job/views/job.php):
$application_id = sanitize_text_field($_POST['application_id']);
$application = $wpdb->get_row(
$wpdb->prepare("SELECT * FROM {$wpdb->prefix}wpjobportal_applications WHERE id = %d", $application_id)
);
// No ownership check
Patched Code (hypothetical):
$application_id = sanitize_text_field($_POST['application_id']);
$user_id = get_current_user_id();
$application = $wpdb->get_row(
$wpdb->prepare(
"SELECT * FROM {$wpdb->prefix}wpjobportal_applications WHERE id = %d AND user_id = %d",
$application_id,
$user_id
)
);
// Ownership enforced
Exploitation & Lab Setup
Red Team (Exploitation)
Prerequisites:
- A WordPress site with WP Job Portal <= 2.1.8 installed.
- A valid low-privilege user account (e.g., subscriber or candidate).
Steps:
- Log in as the low-privilege user.
- Intercept a legitimate request to view a job application (e.g., using Burp Suite).
- Modify the
application_idparameter to a different numeric value. - Observe the response – if it returns another user’s application data, the vulnerability is confirmed.
Example cURL command:
curl -X POST 'https://target.com/wp-admin/admin-ajax.php' \
-H 'Cookie: wordpress_logged_in_xxx=...' \
-d 'action=wpjobportal_ajax&wpjobportal_task=get_application&application_id=456'
Blue Team (Detection & Hardening)
Detection:
- Monitor for repeated requests to
admin-ajax.phpwith varyingapplication_idvalues from the same user. - Look for HTTP 200 responses returning data that does not match the user’s own profile.
Hardening (until patch is available):
- Implement a Web Application Firewall (WAF) rule to block requests with suspicious ID patterns.
- Use a WordPress security plugin to add extra authorization checks.
- Restrict access to the plugin’s AJAX endpoints via
.htaccessor server-level rules.
Indicators of Compromise (IOCs)
- Network:
- Repeated GET/POST requests to
/wp-admin/admin-ajax.phpwith parameters likeaction=wpjobportal_ajaxandwpjobportal_task=get_applicationorwpjobportal_task=get_employer. - Sequential or brute-forced numeric IDs in the
application_id,employer_id, orcandidate_idparameters.
- Repeated GET/POST requests to
- Logs:
- WordPress debug log entries showing database queries without user ID constraints.
- Web server access logs with multiple
admin-ajax.phprequests from the same IP within a short time frame.
- File:
- Unauthorized access to plugin files (e.g.,
wp-content/plugins/wp-job-portal/) may indicate attempted code analysis.
- Unauthorized access to plugin files (e.g.,
Detection Engineering
YARA Rule
rule CVE_2024_43266_WP_Job_Portal_IDOR {
meta:
description = "Detects potential IDOR exploitation attempts against WP Job Portal"
author = "Valters IT"
date = "2025-04-10"
cve = "CVE-2024-43266"
strings:
$ajax_action = "wpjobportal_ajax"
$task_get = "wpjobportal_task=get_application" nocase
$task_get2 = "wpjobportal_task=get_employer" nocase
$task_get3 = "wpjobportal_task=get_candidate" nocase
$id_param = /(application_id|employer_id|candidate_id)=\d+/
condition:
all of ($ajax_action, $task_get or $task_get2 or $task_get3, $id_param)
}
Sigma Rule
title: CVE-2024-43266 WP Job Portal IDOR Exploitation
id: 8a3f7c2e-5d1b-4a9f-8c6e-2b7d3f1a0e4c
status: experimental
description: Detects attempts to exploit Insecure Direct Object Reference in WP Job Portal
author: Valters IT
date: 2025-04-10
logsource:
category: webserver
product: apache
service: access_combined
detection:
selection:
cs-uri-query|contains:
- "wpjobportal_ajax"
- "wpjobportal_task=get_application"
- "wpjobportal_task=get_employer"
- "wpjobportal_task=get_candidate"
condition: selection
falsepositives:
- Legitimate use of the plugin by administrators
level: medium
Suricata Rule
alert http $HOME_NET any -> $EXTERNAL_NET any (
msg:"CVE-2024-43266 WP Job Portal IDOR Attempt";
flow:to_server,established;
content:"wpjobportal_ajax"; http_uri;
content:"wpjobportal_task=get_application"; http_uri;
pcre:"/(application_id|employer_id|candidate_id)=\d+/";
classtype:attempted-recon;
sid:10000001;
rev:1;
)
Remediation & Mitigation
Immediate Actions:
- Disable the plugin if it is not critical to operations.
- Apply a virtual patch using a WAF to block requests with manipulated IDs.
- Monitor logs for signs of exploitation.
Long-Term Fix:
- The vendor must release a patched version that implements proper authorization checks (e.g., verifying that the resource ID belongs to the current user).
- Until then, consider replacing the plugin with an alternative that is actively maintained.
Workaround:
- Add a custom filter in
functions.phpto intercept and validate AJAX requests:
add_action('wp_ajax_wpjobportal_ajax', function() {
$user_id = get_current_user_id();
$app_id = intval($_POST['application_id']);
global $wpdb;
$owner = $wpdb->get_var($wpdb->prepare(
"SELECT user_id FROM {$wpdb->prefix}wpjobportal_applications WHERE id = %d",
$app_id
));
if ($owner != $user_id) {
wp_die('Unauthorized', 403);
}
}, 1);
Valters IT
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.