CVE-2026-15281
MediumCVSS 6.5Exploitation Probability (EPSS)
Low risk26th percentile - higher than 26% of all known CVEs
Summary
The User Access Manager plugin for WordPress up to version 2.3.12 is vulnerable to Second-Order SQL Injection via the 'id' parameter in the AJAX action wp_ajax_save-attachment-compat. Insufficient validation of the objectId value and subsequent unparameterized use in SQL queries allow authenticated attackers with subscriber-level access to inject additional SQL queries and extract sensitive data from the database.
Risk Assessment
An attacker can access sensitive data in the database, potentially leading to privacy breaches or system compromise.
Recommendation
Update the User Access Manager plugin to the latest patched version. Restrict access to AJAX actions for low-privileged users.
Other vulnerabilities in User Access Manager
See all- CVE-2026-18035Medium
The User Access Manager WordPress plugin before 2.3.15 does not apply its access restrictions to REST API requests, allowing unauthenticated attackers to read the content of posts, pages and custom post types that have been restricted to specific user groups.
- CVE-2026-18352High
The User Access Manager plugin for WordPress is vulnerable to Directory Traversal in all versions up to and including 2.3.15 via the 'uamgetfile' parameter. Unauthenticated attackers can read the contents of arbitrary files on the server, which can contain sensitive information. This occurs because when attachment_url_to_postid() returns 0 for a traversal path, the plugin falls back to the global post set by a valid ?attachment_id parameter, causing the access check to pass against a legitimate public attachment while the file streamed is the attacker-chosen path.
Original NVD description (English source)
The User Access Manager plugin for WordPress is vulnerable to Second-Order SQL Injection via the 'id' parameter of the wp_ajax_save-attachment-compat AJAX action in versions up to, and including, 2.3.12. This is due to insufficient validation on the objectId value stored in the saveAjaxAttachmentData() function and subsequent unparameterized concatenation in the addQueryExcludedPostFilter() function — the stored value is later retrieved from the database and used as an array key, then directly imploded into a SQL NOT IN() clause without integer casting or prepared statements. This makes it possible for authenticated attackers, with subscriber-level access and above, to append additional SQL queries into already existing queries that can be used to extract sensitive information from the database.

