Kubio AI Page Builder <= 2.5.1 Unauthenticated Local File Inclusion (CVE-2025-2294)
by fumioryoto (Nahidul Islam / "Nahid") · 2026-07-06
- Severity
- Critical
- CVE
- CVE-2025-2294
- Category
- web
- Affected product
- Kubio AI Page Builder (WordPress plugin)
- Affected versions
- <= 2.5.1
- Disclosed
- 2026-07-06
- Patch status
- unpatched
Tags
Archive entry
intelseclab/poc-archiveMetadata
| Field | Value |
|---|---|
| Date Added | 2026-07-06 |
| Last Updated | 2026-07-06 |
| Author / Researcher | fumioryoto (Nahidul Islam / “Nahid”) |
| CVE / Advisory | CVE-2025-2294 |
| Category | web |
| Severity | Critical |
| CVSS Score | 9.8 (per NVD) |
| Status | PoC |
| Tags | wordpress, kubio, page-builder, lfi, local-file-inclusion, unauthenticated, php, python, cwe-98 |
| Related | N/A |
Affected Target
| Field | Value |
|---|---|
| Software / System | Kubio AI Page Builder (WordPress plugin) |
| Versions Affected | <= 2.5.1 |
| Language / Platform | Exploit written in Python 3 (requests); target is a PHP/WordPress plugin |
| Authentication Required | No |
| Network Access Required | Yes |
Summary
The Kubio AI Page Builder plugin for WordPress, in all versions up to and including 2.5.1, is vulnerable to Local File Inclusion via the kubio_hybrid_theme_load_template function. The root cause is that a template path supplied through a query-string parameter is passed into a file-include operation without adequate path sanitization or an allow-list, letting an unauthenticated attacker traverse the filesystem. The included repo script (exploit.py) first fetches the plugin’s readme.txt to fingerprint the installed version, and if it is <= 2.5.1, sends a crafted request to the WordPress front end that abuses the Kubio site-edit iframe preview parameters to include and render an arbitrary file path. Impact ranges from disclosure of sensitive local files (e.g. /etc/passwd, config files) to remote code execution if an attacker can first plant PHP content in an includable location (e.g. via file upload).
Vulnerability Details
Root Cause
Kubio’s template loader (kubio_hybrid_theme_load_template) builds an include path directly from the __kubio-site-edit-iframe-classic-template request parameter without validating that the value stays within an expected template directory. Because the parameter accepts path traversal sequences (../../../..) and is reachable while unauthenticated (gated only by the __kubio-site-edit-iframe-preview=1 flag), the plugin will include()/render arbitrary files from the server’s filesystem.
Relevant PoC logic (exploit.py):
| |
with the default traversal payload:
| |
Attack Vector
- Attacker requests
{target}/wp-content/plugins/kubio/readme.txtto confirm the plugin is installed and read theStable tag:line to determine the installed version. - If the reported version is
<= 2.5.1, the target is considered vulnerable. - Attacker sends an unauthenticated GET request to the site root with
__kubio-site-edit-iframe-preview=1and__kubio-site-edit-iframe-classic-template=<path-traversal-or-absolute-path>. - The vulnerable template-loading code includes the referenced file and the response reflects its contents (or executes it, if it is PHP).
- Attacker repeats with different file paths to harvest configuration files, credentials, or other sensitive local files, or targets a file they previously uploaded (e.g. via an image upload feature) to escalate from LFI to remote code execution.
Impact
- Unauthenticated disclosure of arbitrary local files readable by the web server process (credentials,
wp-config.php,/etc/passwd, etc.). - Potential remote code execution when combined with the ability to upload attacker-controlled content (images or other “safe” file types) that is then included and executed as PHP.
- Full compromise of the WordPress installation and potentially the underlying host, given the 9.8 CVSS rating and lack of authentication requirement.
Environment / Lab Setup
Target:
- WordPress installation with the "Kubio AI Page Builder" plugin installed, version <= 2.5.1
- Plugin readme.txt reachable at /wp-content/plugins/kubio/readme.txt (default install layout)
Attacker:
- Python 3.x
- `requests` library (pip install requests)
Proof of Concept
PoC Script
See
exploit.pyin this folder.
| |
Detection & Indicators of Compromise
- GET requests to /wp-content/plugins/kubio/readme.txt from unfamiliar/scanning user agents
- GET requests to site root containing the query parameters:
__kubio-site-edit-iframe-preview=1
__kubio-site-edit-iframe-classic-template=<path traversal sequence or absolute path>
- Path traversal sequences (../, encoded variants, or absolute paths like /etc/passwd)
appearing in the classic-template parameter value
- Unexpected 200 OK responses containing file contents unrelated to normal template rendering
Signs of compromise:
- Web server access logs showing repeated requests to
kubio/readme.txtfollowed by requests with__kubio-site-edit-iframe-classic-templateparameters. - Disclosure of
/etc/passwd,wp-config.php, or other sensitive files in HTTP responses. - Unusual outbound requests or new PHP files appearing under uploads directories (possible precursor to LFI-to-RCE chaining).
Remediation
| Action | Detail |
|---|---|
| Primary fix | Update the Kubio AI Page Builder plugin to a version newer than 2.5.1 that validates/sanitizes the template path parameter (per the Wordfence/vendor advisory for CVE-2025-2294). |
| Interim mitigation | Restrict or disable public access to __kubio-site-edit-iframe-preview functionality at the web server/WAF layer, block requests containing path traversal sequences in query parameters, and disable/remove the plugin if patching is not immediately possible. |
References
Notes
Mirrored from https://github.com/fumioryoto/CVE-2025-2294-Kubio-2.5.1-LFi-Checker on 2026-07-06. Repo is a 135-line-class checker/exploit script (exploit.py) that fetches the plugin’s readme.txt to fingerprint the version, then performs the LFI against the Kubio template-loading parameter to read arbitrary files; confirmed to match this description on inspection.
| |