User Access Manager attachment IDs permit subscriber second-order SQL injection
User Access Manager through 2.3.12 accepts the id parameter through wp_ajax_save-attachment-compat and stores it as objectId in saveAjaxAttachmentData() without sufficient validation. addQueryExcludedPostFilter() later retrieves the value, uses it as an array key and directly implodes it into a SQL NOT IN() clause without integer casting or query preparation. A Subscriber can therefore stage second-order SQL injection that can extract sensitive database information. The CNA does not disclose the precise second-stage trigger or complete query.
- Component
- User Access Manager
- Plugin slug
user-access-manager- Affected
- <= 2.3.12
- Safe version
> 2.3.12- Published
- Aug 05, 2026
This CVE was published Aug 05, 2026 and is one of 5 known issues for this plugin.
Update, patch or deactivate.
Update User Access Manager to a release after 2.3.12. The authoritative record links a trunk correction but does not identify the first fixed release. Review attachment-compat requests and database queries for injection probes and rotate secrets if data extraction is suspected.
A safe version is available, so updating to that version or later is the preferred remediation. If an immediate update is not practical, consider a targeted application patch or temporarily restricting the affected functionality.
Deactivate only when warranted by your risk profile, or when advised by your hosting provider in the limited circumstances where the vulnerability cannot otherwise be mitigated. If you’re unsure which action is appropriate, contact Fused or your hosting provider for guidance.
Technical description
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.
CVE / CNA vector: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N
Primary and upstream sources
- NVD record for CVE-2026-15281
- WordPress upstream reference plugins.trac.wordpress.org
- WordPress upstream reference plugins.trac.wordpress.org
- WordPress upstream reference plugins.trac.wordpress.org
- WordPress upstream reference plugins.trac.wordpress.org
- WordPress upstream reference plugins.trac.wordpress.org
- Wordfence advisory wordfence.com