CVE-2025-31755
Executive Summary
CVE-2025-31755 is a Missing Authorization vulnerability in the pCloud Backup WordPress plugin (slug: pcloud-backup) developed by josselynj. The flaw allows an authenticated attacker with low privileges to exploit incorrectly configured access control security levels, potentially leading to unauthorized access to backup-related functionality or data. The vulnerability affects all versions from n/a through 1.0.1. As of this report, no official patch has been released, and no public proof-of-concept (PoC) or exploit code is available. The EPSS score is 0.0%, indicating a very low probability of exploitation in the wild currently, but the risk remains due to the lack of a patch.
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. Users who have installed the plugin from the WordPress dashboard or via direct download are affected. Since no patch is available, the supply chain risk is elevated—users must rely on manual mitigation or removal of the plugin until a fix is released.
CVSS Breakdown & Threat Level
- CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:L/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: Low (PR:L) – attacker must have a valid WordPress user account (e.g., subscriber).
- User Interaction: None (UI:N)
- Scope: Unchanged (S:U)
- Confidentiality Impact: Low (C:L) – potential exposure of backup metadata or configuration.
- Integrity Impact: None (I:N)
- Availability Impact: None (A:N)
Threat Level: Medium. While the CVSS score is moderate, the lack of a patch and the potential for chaining with other vulnerabilities (e.g., privilege escalation) could increase the risk.
Deep Dive & Mechanics
The vulnerability stems from missing authorization checks in the plugin's AJAX handlers or REST API endpoints. The plugin likely exposes functions to manage backups (e.g., list, delete, or download backup files) without verifying that the requesting user has the appropriate capabilities (e.g., manage_options or edit_posts). An authenticated attacker with minimal privileges (e.g., a subscriber) can send crafted HTTP requests to these endpoints, bypassing access controls.
Root Cause: The plugin fails to call current_user_can() or similar WordPress capability checks before executing sensitive operations. This is a classic CWE-862 (Missing Authorization) issue.
Attack Scenario:
- Attacker logs in as a low-privileged user (e.g., subscriber).
- Attacker identifies unprotected AJAX actions (e.g.,
pcloud_backup_list,pcloud_backup_delete). - Attacker sends a POST request to
/wp-admin/admin-ajax.phpwith the action parameter and any required data. - The plugin processes the request without verifying the user's role, allowing unauthorized access to backup data or configuration.
Vulnerable vs. Patched Code
Since no patch is available, we can only analyze the vulnerable code pattern. A typical vulnerable snippet might look like:
Vulnerable Code (pcloud-backup <= 1.0.1):
add_action('wp_ajax_pcloud_backup_list', 'pcloud_backup_list_callback');
function pcloud_backup_list_callback() {
// Missing capability check
$backups = get_option('pcloud_backup_list');
wp_send_json_success($backups);
}
Patched Code (hypothetical):
add_action('wp_ajax_pcloud_backup_list', 'pcloud_backup_list_callback');
function pcloud_backup_list_callback() {
if (!current_user_can('manage_options')) {
wp_die('Unauthorized', 403);
}
$backups = get_option('pcloud_backup_list');
wp_send_json_success($backups);
}
The fix requires adding current_user_can() checks with appropriate capabilities (e.g., manage_options for admin-level actions) before executing any sensitive operation.
Exploitation & Lab Setup
Red Team
Prerequisites:
- A WordPress installation with pCloud Backup plugin version <= 1.0.1.
- A low-privileged user account (e.g., subscriber).
Exploitation Steps:
- Log in as the low-privileged user and obtain a valid WordPress nonce (if required) by inspecting the page source or using browser developer tools.
- Identify unprotected AJAX actions by reviewing the plugin source code (e.g.,
wp-content/plugins/pcloud-backup/includes/ajax-handlers.php). - Send a crafted request using
curlor a tool like Burp Suite:
curl -X POST http://target/wp-admin/admin-ajax.php \
-d "action=pcloud_backup_list&_ajax_nonce=<nonce>" \
--cookie "wordpress_logged_in_<hash>=<session_cookie>"
- If successful, the response will contain backup data (e.g., file paths, timestamps) that should be restricted to administrators.
Note: No public exploit code exists; this is a theoretical exploitation based on the vulnerability description.
Blue Team
Detection:
- Monitor for unusual AJAX requests to
admin-ajax.phpfrom low-privileged user roles. - Look for repeated access to plugin-specific actions (e.g.,
pcloud_backup_*) by users with subscriber or contributor roles. - Enable WordPress audit logging (e.g., using the Activity Log plugin) to track user actions.
Honeypot:
- Deploy a fake endpoint mimicking the vulnerable AJAX action and alert on any access from non-admin users.
Indicators of Compromise (IOCs)
- File Paths:
/wp-content/plugins/pcloud-backup/pcloud-backup.php/wp-content/plugins/pcloud-backup/includes/ajax-handlers.php
- Network Indicators:
- POST requests to
/wp-admin/admin-ajax.phpwithactionparameter starting withpcloud_backup_. - User-Agent strings typical of automated scanning tools (e.g.,
curl,python-requests).
- POST requests to
- Log Entries:
- WordPress debug log entries showing
pcloud_backup_*actions triggered by non-admin users.
- WordPress debug log entries showing
- Registry/File System (if applicable):
- Modified plugin files (e.g., added backdoor code) – check file integrity with
md5sum.
- Modified plugin files (e.g., added backdoor code) – check file integrity with
Detection Engineering
YARA Rule
rule CVE_2025_31755_pCloud_Backup_Missing_Auth {
meta:
description = "Detects pCloud Backup plugin files with missing authorization checks"
author = "Valters IT"
date = "2025-04-17"
reference = "CVE-2025-31755"
hash = "d41d8cd98f00b204e9800998ecf8427e"
strings:
$ajax_action = /add_action\s*\(\s*['\"]wp_ajax_pcloud_backup_/
$missing_cap = /current_user_can\s*\(/
condition:
$ajax_action and not $missing_cap
}
Sigma Rule
title: CVE-2025-31755 - pCloud Backup Missing Authorization
id: 8a9b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d
status: experimental
description: Detects unauthorized access attempts to pCloud Backup AJAX endpoints
author: Valters IT
date: 2025-04-17
references:
- https://nvd.nist.gov/vuln/detail/CVE-2025-31755
logsource:
category: webserver
product: apache
service: access_combined
detection:
selection:
cs-method: 'POST'
cs-uri-query|contains: 'admin-ajax.php'
cs-uri-query|contains: 'action=pcloud_backup_'
condition: selection
falsepositives:
- Legitimate admin actions (rare)
level: medium
Suricata Rule
alert http $HOME_NET any -> $EXTERNAL_NET any (
msg:"CVE-2025-31755 - pCloud Backup Missing Authorization Attempt";
flow:to_server,established;
content:"POST";
http_method;
content:"admin-ajax.php";
http_uri;
content:"action=pcloud_backup_";
http_client_body;
classtype:attempted-recon;
sid:1000001;
rev:1;
reference:cve,2025-31755;
)
Remediation & Mitigation
Immediate Actions:
- Disable the plugin until an official patch is released. Navigate to WordPress Admin > Plugins and deactivate "pCloud Backup".
- Remove the plugin entirely if backup functionality is not critical.
- Implement a Web Application Firewall (WAF) rule to block requests to
admin-ajax.phpwithactionparameters starting withpcloud_backup_from non-admin users.
Long-Term Fix:
- Monitor the plugin's official page or GitHub repository for a patched version (e.g., 1.0.2 or higher).
- Apply the patch manually by adding
current_user_can('manage_options')checks to all AJAX handlers in the plugin source code.
Workaround:
- Use a WordPress security plugin (e.g., Wordfence, Sucuri) to restrict AJAX access based on user roles.
Valters IT
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.