Prodigy Commerce WordPress Plugin — Unauthenticated Local File Inclusion (CVE-2026-0926)
by Diamorphine · 2026-07-05
- Severity
- High
- CVE
- CVE-2026-0926
- Category
- web
- Affected product
- Prodigy Commerce (WordPress plugin)
- Affected versions
- <= 3.2.9 (repo title also references <= 3.3.0)
- Disclosed
- 2026-07-05
- Patch status
- unpatched
Archive entry
intelseclab/poc-archiveMetadata
| Field | Value |
|---|---|
| Date Added | 2026-07-05 |
| Last Updated | 2026-05 |
| Author / Researcher | Diamorphine |
| CVE / Advisory | CVE-2026-0926 |
| Category | web |
| Severity | High |
| CVSS Score | Not specified in source |
| Status | PoC |
| Tags | wordpress, plugin, prodigy-commerce, lfi, local-file-inclusion, unauthenticated, ajax |
| Related | N/A |
Affected Target
| Field | Value |
|---|---|
| Software / System | Prodigy Commerce (WordPress plugin) |
| Versions Affected | <= 3.2.9 (repo title also references <= 3.3.0) |
| Language / Platform | PHP / WordPress, PoC written in Python 3 (httpx) |
| Authentication Required | No |
| Network Access Required | Yes |
Summary
Prodigy Commerce exposes an AJAX action, prodigy-render-my-account-widget, that renders a “My Account” widget template chosen via the parameters[template_name] POST parameter. The plugin fails to sanitize or restrict this parameter to an allow-list of legitimate templates, so it is passed into a PHP file-include operation largely as-is. An unauthenticated attacker can supply an arbitrary filesystem path (e.g. /etc/passwd) as the template name and have the plugin include and render that file’s contents back in the AJAX JSON response. The PoC harvests the required AJAX nonce from the page, then submits the malicious admin-ajax.php request and prints the returned file contents.
Vulnerability Details
Root Cause
The parameters[template_name] value from an unauthenticated AJAX request is used directly to build a file path that is included/rendered by the widget renderer, without validating it against a fixed set of known template names or stripping path traversal sequences.
Attack Vector
GETthe target site’s homepage and extract thenoncevalue embedded in an inlinesettingsJS object.POSTto/wp-admin/admin-ajax.phpwithaction=prodigy-render-my-account-widget, the harvested nonce, andparameters[template_name]set to the target file path (e.g./etc/passwd), withparameters[default_path]=/.- The plugin includes the referenced file and returns its rendered output inside the JSON
data.htmlfield. - Read arbitrary local files, including configuration files (e.g.
wp-config.php) that may leak database credentials or secret keys.
Impact
Unauthenticated disclosure of arbitrary files readable by the web server user, potentially exposing wp-config.php secrets and enabling further compromise (e.g. remote code execution if combined with log/session poisoning).
Environment / Lab Setup
Target: WordPress site running Prodigy Commerce <= 3.2.9
Attacker: Python 3, `pip install httpx`
Proof of Concept
PoC Script
See
CVE-2026-0926.pyin this folder.
| |
The script fetches the target’s AJAX nonce, sends the crafted prodigy-render-my-account-widget request with the requested file path in parameters[template_name], and prints the included file’s contents from the JSON response.
Detection & Indicators of Compromise
POST /wp-admin/admin-ajax.php HTTP/1.1
Content-Type: application/x-www-form-urlencoded
action=prodigy-render-my-account-widget&nonce=<VALUE>¶meters[template_name]=/etc/passwd¶meters[default_path]=/
Signs of compromise:
- Access log entries showing repeated POSTs to
admin-ajax.phpwithaction=prodigy-render-my-account-widgetand unusualtemplate_namevalues (absolute paths,../sequences). - AJAX responses containing content that resembles system or config files rather than an account widget.
Remediation
| Action | Detail |
|---|---|
| Primary fix | No vendor patch confirmed as of 2026-07-05 — monitor for advisory; update Prodigy Commerce once a fixed version is released |
| Interim mitigation | Deactivate the plugin until patched; restrict/allow-list template_name values at a WAF or reverse-proxy layer; block unauthenticated requests to admin-ajax.php referencing this action |
References
Notes
Mirrored from https://github.com/diamorphine666/CVE-2026-0926-exploit on 2026-07-05.
| |