CVE-2025-11738
Executive Summary
CVE-2025-11738 is a limited file read vulnerability in the Media Library Assistant plugin for WordPress, affecting all versions up to and including 3.29. The flaw resides in the mla-stream-image.php file, which fails to properly restrict file access. An unauthenticated attacker can exploit this to read arbitrary .ai, .eps, .pdf, and .ps files from the server, potentially exposing sensitive information such as design assets, configuration data, or embedded metadata.
This vulnerability is classified as a WordPress ecosystem issue and does not involve Apache or Nginx directly. The CVSS score of 5.3 (Medium) reflects the limited scope of readable file types, but the lack of authentication requirements and the potential for sensitive data exposure elevate the risk in targeted attacks.
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 is specific to the WordPress plugin ecosystem. No NPM, PyPI, Go, or Ruby packages are affected. The plugin is distributed via the WordPress Plugin Directory, and users should monitor for official updates.
CVSS Breakdown & Threat Level
- CVSS Score: 5.3 (Medium)
- Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N
- Attack Vector: Network
- Attack Complexity: Low
- Privileges Required: None
- User Interaction: None
- Scope: Unchanged
- Confidentiality Impact: Low (limited to specific file types)
- Integrity Impact: None
- Availability Impact: None
The threat level is elevated due to the unauthenticated nature of the exploit and the potential for sensitive data leakage, even though only a subset of file types is accessible.
Deep Dive & Mechanics
The vulnerability exists in the mla-stream-image.php file, which is part of the Media Library Assistant plugin. This file is intended to serve image files for streaming or display. However, it fails to validate the file extension or path properly, allowing an attacker to request arbitrary files with .ai, .eps, .pdf, or .ps extensions.
The core issue is a lack of input sanitization and path traversal protection. The script likely uses a parameter (e.g., file or path) to specify the file to stream, but does not restrict the directory or file type beyond a basic check. An attacker can use path traversal sequences (e.g., ../) to navigate outside the intended directory and read sensitive files.
Example vulnerable request:
GET /wp-content/plugins/media-library-assistant/mla-stream-image.php?file=../../../../etc/passwd HTTP/1.1
However, the vulnerability is limited to .ai, .eps, .pdf, and .ps files, so the attacker would need to target files with those extensions.
Vulnerable vs. Patched Code
Since no official patch is available, the vulnerable code is presumed to be in mla-stream-image.php. A patched version would need to:
- Validate the file extension against a whitelist of allowed types.
- Restrict the file path to a specific directory (e.g., the uploads directory).
- Use
realpath()to resolve path traversal attempts.
Vulnerable code (conceptual):
$file = $_GET['file'];
$content = file_get_contents($file);
header('Content-Type: application/octet-stream');
echo $content;
Patched code (conceptual):
$allowed_extensions = ['jpg', 'png', 'gif', 'webp'];
$file = basename($_GET['file']);
$ext = pathinfo($file, PATHINFO_EXTENSION);
if (!in_array($ext, $allowed_extensions)) {
die('Invalid file type');
}
$path = realpath('/var/www/html/wp-content/uploads/' . $file);
if (strpos($path, '/var/www/html/wp-content/uploads/') !== 0) {
die('Invalid path');
}
readfile($path);
Exploitation & Lab Setup
Red Team (Offensive)
Prerequisites:
- A WordPress instance with Media Library Assistant plugin version <= 3.29.
- Knowledge of a target file with
.ai,.eps,.pdf, or.psextension.
Exploitation Steps:
- Identify the vulnerable endpoint:
http://target/wp-content/plugins/media-library-assistant/mla-stream-image.php - Craft a request with a path traversal payload to read a sensitive file, e.g.,
../../../../wp-config.php(but note the extension limitation). - Since only specific extensions are readable, target files like
backup.epsordesign.aiin accessible directories.
Example curl command:
curl -v "http://target/wp-content/plugins/media-library-assistant/mla-stream-image.php?file=../../../../uploads/2025/01/sensitive.pdf"
Note: No public exploit code is available at this time.
Blue Team (Defensive)
Detection:
- Monitor web server logs for requests to
mla-stream-image.phpwith suspiciousfileparameters containing../or absolute paths. - Alert on unusual file extensions being accessed via this endpoint (e.g.,
.pdf,.eps).
Honeypot:
- Place a fake
.pdffile namedsecret.pdfin the uploads directory and monitor access.
Indicators of Compromise (IOCs)
- File Path:
/wp-content/plugins/media-library-assistant/mla-stream-image.php - HTTP Request Pattern:
GET /wp-content/plugins/media-library-assistant/mla-stream-image.php?file=* - Suspicious Parameters:
filecontaining../,%2e%2e%2f, or absolute paths like/etc/ - Response Headers:
Content-Type: application/octet-streamorapplication/pdffor non-image files.
Detection Engineering
YARA Rule
rule CVE_2025_11738_File_Read {
meta:
description = "Detects exploitation attempts of CVE-2025-11738 in Media Library Assistant plugin"
author = "Valters IT"
date = "2025-04-10"
reference = "https://nvd.nist.gov/vuln/detail/CVE-2025-11738"
strings:
$suspicious_param = "mla-stream-image.php?file="
$path_traversal = "../"
$abs_path = "/etc/"
condition:
$suspicious_param and ($path_traversal or $abs_path)
}
Sigma Rule
title: CVE-2025-11738 - Media Library Assistant File Read Attempt
id: 7a8b9c0d-1e2f-3a4b-5c6d-7e8f9a0b1c2d
status: experimental
description: Detects attempts to exploit limited file read vulnerability in Media Library Assistant plugin
author: Valters IT
date: 2025-04-10
logsource:
category: webserver
product: apache
detection:
selection:
cs-method: 'GET'
cs-uri-stem: '/wp-content/plugins/media-library-assistant/mla-stream-image.php'
cs-uri-query|contains: 'file='
condition: selection
falsepositives:
- Legitimate use of the plugin's streaming functionality
level: medium
Suricata Rule
alert http any any -> any any (msg:"CVE-2025-11738 - Media Library Assistant File Read Attempt"; flow:to_server,established; content:"GET"; http_method; content:"/wp-content/plugins/media-library-assistant/mla-stream-image.php"; http_uri; content:"file="; http_uri; pcre:"/file=(\.\.\/|[a-zA-Z]:\\/)/Ri"; sid:1000001; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Disable the plugin if not essential, or restrict access to
mla-stream-image.phpvia.htaccess:<Files "mla-stream-image.php"> Require all denied </Files> - Implement a Web Application Firewall (WAF) rule to block requests with path traversal patterns in the
fileparameter. - Monitor logs for exploitation attempts.
Long-term Fix:
- Apply an official patch once released by the plugin vendor.
- Consider replacing the plugin with an alternative that has proper input validation.
Valters IT
Securing WordPress ecosystems one CVE at a time.
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.