Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessObtain Contributor-level WordPress account
-
DeliveryAuthor content with [wpinventory] shortcode
-
ExploitInject UNION payload via 'where' attribute
-
Executionparse_custom_where bypasses escaping
-
PersistConcatenated into raw SELECT query
-
ImpactExfiltrate database contents from rendered output
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Parameterized queries, prepared statements
MITRE ATT&CK
2 techniques across 2 tactics: Initial Access, Persistence The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Requires an authenticated WordPress account at Contributor level or above (PR:L) on a site running WP Inventory Manager <=2.5.1, plus the ability to place a [wpinventory] shortcode with a 'where' attribute into content that gets rendered. The vulnerable parse_custom_where() only performs html_entity_decode(), strips semicolons, and does field-label name replacement - so stacked queries are blocked, but UNION and subquery injection remain viable; impact is limited to data reads (SELECT), not modification. Limiting factors: no unauthenticated path, and sites that do not grant Contributor-or-above accounts to untrusted users are not exposed. |
| Impact | This is a moderate-priority authenticated SQL injection. The CVSS 6.5 vector (AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N) is consistent with the description: network-reachable, low-complexity, but gated behind Contributor-level authentication (PR:L) and limited to confidentiality impact (C:H, I:N, A:N) because the injection sits in a raw SELECT executed via $wpdb->get_results(). No EPSS score, KEV listing, or public POC is present in the input, so exploitation status is 'no public exploit identified at time of analysis' - do not treat this as widespread active exploitation. The realistic risk driver is the low authentication bar: Contributor is a self-registerable or loosely-granted role on many multi-author WordPress sites, and the semicolon-stripping mitigation does NOT block UNION-based or subquery data extraction, so an attacker who holds any Contributor account can read arbitrary database contents (including password hashes and secret keys). Weighed against that, it is not an unauthenticated pre-auth flaw, which keeps it below the 'drop everything' tier; treat it as a prompt-patch item on sites that allow Contributor-or-above accounts. |
| Exploit ScenarioDerived | An attacker registers or obtains a Contributor-level account on a WordPress site running WP Inventory Manager <=2.5.1, then authors a post/page containing a [wpinventory where="..."] shortcode with a crafted UNION-based payload. When the shortcode renders, parse_custom_where() passes the unsanitized string into a raw SELECT executed by $wpdb->get_results(), returning sensitive rows (e.g., user hashes) into the rendered output. No public exploit code is identified in the provided data. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 18, 2026
Authenticated SQL injection in the WP Inventory Manager plugin for WordPress (versions up to and including 2.5.1) allows users with Contributor-level access or above to read sensitive data from the site database by injecting SQL through the 'where' attribute of the [wpinventory] shortcode. The root cause is in WPIMItem::get_all()/parse_custom_where(), which does not use $wpdb->prepare() or a field whitelist before concatenating the attacker-influenced string into a raw SELECT executed via $wpdb->get_results(); the assessed impact is confidentiality-only (CVSS 6.5, C:H/I:N/A:N). No public exploit code and no confirmed active exploitation (CISA KEV) were identified at time of analysis, and exposure is limited to sites that run the affected plugin, render the shortcode, and grant Contributor-or-above accounts to untrusted users.
RemediationAI
The primary fix is to update the WP Inventory Manager plugin to a release newer than 2.5.1 as soon as one is published; an upstream code change addressing this issue is referenced in the Trac changeset at https://plugins.trac.wordpress.org/changeset?reponame=&old=3657730%40wp-inventory-manager&new=3657730%40wp-inventory-manager (changeset 3657730), and the vendor's advisory should be monitored for the corresponding tagged release - the released patched version number is not independently confirmed in the available data, so verify the changelog before assuming any specific number is fixed. If upgrading is not immediately possible, remove or disable the plugin where inventory display is not required (the lowest-risk option), or, if it must stay active, audit all existing content for [wpinventory] shortcodes that use the 'where' attribute and strip that attribute - the trade-off is loss of custom filtering behavior on those listings. Additional compensating controls: restrict Contributor and higher roles to trusted users only, since the flaw requires Contributor-level or above plus an editor/publisher to actually publish the malicious shortcode (sites that never grant Contributor+ accounts to untrusted users are not exposed); downgrade untrusted authors to Subscriber; and if an application firewall or WordPress security plugin is deployed, confirm with the vendor whether a virtual-patching rule for this plugin's 'where' parameter is available, while treating such rules as temporary mitigations rather than a substitute for the upstream patch.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
WP Inventory Manager is a WordPress plugin (CPE cpe:2.3:a:chuck1982:wp_inventory_manager:*:*:*:*:*:*:*:*) that renders inventory listings through the [wpinventory] shortcode. The shortcode accepts a 'where' attribute that is passed into WPIMItem::get_all() and processed by parse_custom_where() (see includes/wpinventory.item.class.php around lines 211, 269 and 748, includes/wpinventory.shortcode.class.php line 72, and wpinventory.core.php line 448). That routine applies only html_entity_decode(), strips semicolons, and performs field-label name substitution, then concatenates the result directly into a raw SELECT statement executed with $wpdb->get_results() rather than using WordPress's parameterized $wpdb->prepare() API. This is a classic CWE-89 improper-neutralization-of-SQL-commands defect: the missing prepared statement and missing identifier whitelist allow attacker-controlled SQL fragments to reach the database parser. Because semicolons are removed, stacked (multi-statement) injection is blocked, but UNION-based and subquery injection remain viable, so the practical outcome is read-only extraction of arbitrary data from the WordPress database (users, password hashes, configuration tables) rather than data modification.
Know when Wp Inventory Manager gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N
Contributor auth required (PR:L), network shortcode-rendering path (AV:N/AC:L); SELECT-only injection yields data disclosure (C:H) with no write or availability impact (I:N/A:N).
Primary rating from Vendor (Wordfence).
CVSS VectorVendor: Wordfence
DescriptionCVE.org
The WP Inventory Manager plugin for WordPress is vulnerable to SQL Injection via the 'where' shortcode attribute of the [wpinventory] shortcode in versions up to, and including, 2.5.1. This is due to insufficient escaping on the user-supplied parameter and lack of sufficient preparation on the existing SQL query in the WPIMItem::get_all() function - parse_custom_where() only performs html_entity_decode(), strips semicolons, and does field-label name replacements, without using $wpdb->prepare() or a whitelist. The resulting string is concatenated into a raw SELECT statement that is executed via $wpdb->get_results(). This makes it possible for authenticated attackers, with Contributor-level access and above, to append additional SQL queries into already existing queries that can be used to extract sensitive information from the database.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
SQL injection exploits the way applications construct database queries by mixing user input directly into SQL statements.
More in Wp Inventory Manager
View allThe WP Inventory Manager WordPress plugin before 2.1.0.14 does not have CSRF checks, which could allow attackers to make
The WP Inventory Manager WordPress plugin before 2.1.0.13 does not sanitise and escape a parameter before outputting it
The WP Inventory Manager WordPress plugin before 2.1.0.12 does not sanitise and escape the message parameter before outp
Blind SQL injection in the WP Inventory Manager WordPress plugin (versions up to and including 2.4.0) lets an authentica
Reflected cross-site scripting in the WordPress plugin WP Inventory Manager (versions up to and including 2.5.4) lets un
A vulnerability in mylacventures WP Inventory Manager wp-inventory-manager.1.0.13. Rated medium severity (CVSS 5.4), thi
EUVD-2026-82749
GHSA-q2g2-xwwx-rp3m
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB