CVE-2024-6410
Executive Summary
CVE-2024-6410 is an Insecure Direct Object Reference (IDOR) vulnerability discovered in the ProfileGrid – User Profiles, Groups and Communities WordPress plugin, affecting all versions up to and including 5.8.9. The flaw resides in the pm_upload_image function, which fails to validate a user-controlled key, allowing authenticated attackers with Subscriber-level access or higher to arbitrarily change the profile picture of any user on the site. This vulnerability is classified as a WordPress ecosystem issue and does not involve Apache or Nginx.
The vulnerability has a CVSS score of 4.3 (Medium), with an EPSS probability of 0.0%, indicating low active exploitation in the wild. No public proof-of-concept code or patch details are currently available, making this a high-priority target for proactive defense.
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. Organizations using ProfileGrid should immediately inventory their plugin version and apply any available updates. Since no official patch has been released, consider disabling the plugin or implementing virtual patching via a Web Application Firewall (WAF) until a fix is available.
CVSS Breakdown & Threat Level
- CVSS Score: 4.3 (Medium)
- Attack Vector: Network (AV:N)
- Attack Complexity: Low (AC:L)
- Privileges Required: Low (PR:L) – Subscriber-level access
- User Interaction: None (UI:N)
- Scope: Unchanged (S:U)
- Confidentiality Impact: None (C:N)
- Integrity Impact: Low (I:L) – Profile picture modification
- Availability Impact: None (A:N)
The low EPSS score (0.0%) suggests limited active exploitation, but the ease of exploitation and potential for social engineering (e.g., impersonation) elevate the risk for targeted attacks.
Deep Dive & Mechanics
The vulnerability is rooted in the pm_upload_image function within the ProfileGrid plugin. This function is responsible for handling profile picture uploads. The flaw occurs because the function uses a user-controlled key (likely a user ID or similar identifier) without proper validation. An authenticated attacker can manipulate this key to specify a different user’s profile, effectively overwriting their profile picture.
Technical Flow:
- An authenticated user (Subscriber or higher) initiates a profile picture upload via the
pm_upload_imagefunction. - The function retrieves a user identifier from a request parameter (e.g.,
user_id). - Due to missing authorization checks, the function does not verify that the requesting user owns the target user ID.
- The attacker can supply an arbitrary user ID, causing the plugin to update the profile picture of that user.
This IDOR vulnerability (CWE-639) allows an attacker to deface user profiles, impersonate administrators, or cause reputational damage.
Vulnerable vs. Patched Code
Since no official patch is available, the following is a conceptual comparison based on the vulnerability description.
Vulnerable Code (Conceptual):
function pm_upload_image() {
$user_id = $_POST['user_id']; // No validation
// Process upload and update user meta for $user_id
update_user_meta($user_id, 'profile_picture', $uploaded_file);
}
Patched Code (Conceptual):
function pm_upload_image() {
$current_user_id = get_current_user_id();
$target_user_id = intval($_POST['user_id']);
// Verify the current user is allowed to modify the target user
if ($current_user_id !== $target_user_id && !current_user_can('edit_users')) {
wp_die('Unauthorized');
}
// Process upload and update user meta for $target_user_id
update_user_meta($target_user_id, 'profile_picture', $uploaded_file);
}
The patched version adds a capability check to ensure the requesting user either owns the target user ID or has the edit_users capability (e.g., Administrator).
Exploitation & Lab Setup
Red Team
Prerequisites:
- WordPress instance with ProfileGrid plugin version <= 5.8.9
- Authenticated user account with Subscriber role or higher
- Ability to send HTTP POST requests (e.g., using Burp Suite, cURL, or Python)
Exploitation Steps:
- Log in as a Subscriber-level user and obtain a valid session cookie.
- Intercept the profile picture upload request using a proxy like Burp Suite.
- Modify the
user_idparameter to target another user (e.g., an administrator with ID 1). - Upload a malicious or defamatory image.
- The target user’s profile picture is replaced.
Example cURL Command:
curl -X POST \
-c cookies.txt -b cookies.txt \
-F "action=pm_upload_image" \
-F "user_id=1" \
-F "profile_picture=@/path/to/malicious.jpg" \
http://target-site.com/wp-admin/admin-ajax.php
Blue Team
Detection & Prevention:
- Monitor for unusual profile picture changes, especially from low-privileged users.
- Implement a Web Application Firewall (WAF) rule to block requests with manipulated
user_idparameters. - Restrict the
pm_upload_imageAJAX action to only allow users to modify their own profile. - Enable logging of all AJAX requests and review for anomalies.
Hunting Query (Splunk):
index=web sourcetype=access_combined
| search uri=*admin-ajax.php* action=pm_upload_image
| eval user_id = extract("user_id=(\d+)", 1)
| where user_id != "0" AND user_id != "current_user_id"
| table _time, src_ip, user, user_id, status
Indicators of Compromise (IOCs)
- Network: HTTP POST requests to
/wp-admin/admin-ajax.phpwithaction=pm_upload_imageand a manipulateduser_idparameter. - File: Unexpected profile picture files in
/wp-content/uploads/profilegrid/directory. - Log: WordPress debug log entries showing
pm_upload_imagecalls with mismatched user IDs. - User: Multiple profile picture changes from the same low-privileged user account.
Detection Engineering
YARA Rule
rule Detect_ProfileGrid_IDOR_Exploit {
meta:
description = "Detects exploitation attempts of CVE-2024-6410 in ProfileGrid plugin"
author = "Valters IT"
date = "2024-01-01"
reference = "CVE-2024-6410"
strings:
$ajax_action = "pm_upload_image"
$user_id_param = "user_id"
$wp_ajax = "admin-ajax.php"
condition:
all of them
}
Sigma Rule
title: ProfileGrid IDOR Exploitation Attempt
id: 7a8b9c0d-1e2f-3a4b-5c6d-7e8f9a0b1c2d
status: experimental
description: Detects attempts to exploit CVE-2024-6410 by manipulating user_id parameter
author: Valters IT
date: 2024/01/01
logsource:
category: webserver
product: apache
detection:
selection:
cs-uri-query|contains:
- "action=pm_upload_image"
- "user_id="
condition: selection
falsepositives:
- Legitimate profile picture uploads by administrators
level: medium
Suricata Rule
alert http $HOME_NET any -> $EXTERNAL_NET any (
msg:"CVE-2024-6410 - ProfileGrid IDOR Exploitation Attempt";
flow:to_server,established;
content:"POST"; http_method;
content:"/wp-admin/admin-ajax.php"; http_uri;
content:"action=pm_upload_image"; http_client_body;
content:"user_id="; http_client_body;
sid:1000001;
rev:1;
reference:cve,2024-6410;
classtype:attempted-user;
priority:2;
)
Remediation & Mitigation
- Immediate Action: Disable the ProfileGrid plugin until an official patch is released.
- Virtual Patching: Deploy a WAF rule to block requests to
admin-ajax.phpwithaction=pm_upload_imageand auser_idparameter that does not match the authenticated user. - Code Fix: Implement authorization checks in the
pm_upload_imagefunction as shown in the patched code example. - Monitoring: Enable detailed logging for AJAX requests and monitor for suspicious profile picture changes.
- User Education: Inform users about the risk of profile impersonation and encourage strong authentication.
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.