Summary
CVE-2026-87935 is an unauthenticated arbitrary file upload vulnerability in the Paid Downloads WordPress plugin, affecting all versions up to and including 3.15. The flaw resides in the plugin’s admin_request_handler function and allows attackers with no credentials to upload arbitrary files, including executable code, to the server. This can lead to full remote code execution, and has been assigned a CVSS v3.1 base score of 8.1 (High).
Technical details
- Root cause: The
admin_request_handlerfunction (invoked via thepaiddownloads_update_fileaction) fails to enforce proper authorization or validate file types before accepting uploaded files. - Trigger condition: The handler is reachable without authentication because
is_admin()evaluates to true for requests to/wp-admin/admin-post.php, a check that does not verify the requester is actually an authenticated administrator. - Attack vector: Network — an unauthenticated attacker sends a crafted request to
/wp-admin/admin-post.phptriggering thepaiddownloads_update_fileaction to upload a file of their choosing. - Impact: Uploaded files may contain executable code (e.g., PHP), enabling remote code execution and full compromise of the affected WordPress site. On Apache servers with
AllowOverrideenabled, a.htaccessfile in the upload directory may block direct HTTP retrieval of uploaded files, which limits exploitability primarily to server stacks that do not honor.htaccessdirectives, such as nginx, LiteSpeed, and Apache configured withAllowOverride None.
Affected software
- Paid Downloads WordPress plugin (vendor: ichurakov) — all versions 0 through 3.15 (inclusive)
Severity
- CVSS v3.1 Base Score: 8.1 (High)
- Vector string:
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H
Mitigation and recommended actions
- Immediate: No patched version has been confirmed in public sources as of this writing. Site owners should check the WordPress plugin repository for an update to Paid Downloads beyond version 3.15 and apply it as soon as it becomes available.
- If no patch is available: Deactivate and remove the Paid Downloads plugin until a fixed version is released. As an interim compensating control, restrict or block unauthenticated access to
/wp-admin/admin-post.phprequests that reference thepaiddownloads_update_fileaction at the web server or WAF layer, and ensure upload directories are configured to prevent execution of uploaded scripts (e.g., via server-level configuration rather than relying solely on.htaccess, particularly on nginx or LiteSpeed stacks that do not process.htaccessfiles).

