Visual Composer CVE-2026-12227: Are You on 45.16.1+?

On this page
CVE-2026-12227 lets an unauthenticated attacker make the Visual Composer Website Builder plugin include and run files on your server. It affects every version up to and including 45.16.0, and it’s rated CVSS 9.8.[1] The fix is version 45.16.1, which shipped on July 23. We recommend going straight to the current 45.16.3.[1][3]
The catch is that the fix arrived two months before anyone said it was a security fix. The 45.16.1 changelog line only mentions a vendor folder, and the advisory went public on September 23.[2][3] Proof-of-concept code is already public.[6] If you run Visual Composer and haven’t touched it since July, check it today.
TL;DR: What to do right now
- Check the Visual Composer version on every site. Anything at 45.16.0 or lower is vulnerable.[1]
- Update to 45.16.3. It includes the July fix and two later security fixes from September.[3]
- If you can’t update today, deactivate the plugin until you can, and check how your pages render.
- Look for signs of compromise: PHP files in
wp-content/uploads, admins you don’t recognise, andvcv-templatein your access logs. - Agencies: check the whole fleet. About one in five installs is on a branch that is definitely vulnerable.[4]
What CVE-2026-12227 does
| Item | Detail |
|---|---|
| CVE | CVE-2026-12227, CVSS 9.8 (Critical)[1] |
| Plugin | Visual Composer Website Builder, 30,000+ active installs[3] |
| Affected | All versions up to and including 45.16.0[1] |
| Fixed in | 45.16.1, released July 23, 2026[1][5] |
| Needs | No login. The attacker only needs to reach the site.[1] |
| Researchers | Tin Pham (TF1T), Trong Pham (dtro), Hao Ngo[1] |
The bug is a local file inclusion (LFI) flaw in how the plugin handles the vcv-template parameter.[1] An attacker can point that parameter at a file on the server, and PHP runs whatever code that file contains. Wordfence lists the results as bypassing access controls, reading sensitive data, or running code.[1]
Why uploads make it worse
LFI on its own can only run files that are already on the server. The advisory spells out when that becomes full code execution:
images and other “safe” file types can be uploaded and included
Wordfence Intelligence [1]
In practice, that means any feature that lets a stranger put a file on your server. Contact forms with attachments, registration forms with avatars, and quote or job-application forms are all candidates. A file that passes an “images only” check can still contain PHP. If your site accepts uploads from visitors, treat this as more urgent, not less.
The timeline
| Date (2026) | Event |
|---|---|
| April 9 | Vulnerability discovered[2] |
| July 16 | Vendor notified[2] |
| July 23 | 45.16.1 released; the changelog says the vendor folder was “properly included”[3][5] |
| September 9 | 45.16.2: a user-role security fix[3] |
| September 23 | Advisory published by Wordfence[1][2] |
| September 24 | CVE published; 45.16.3 released with a Contributor-permissions fix[2][3] |
Nothing in the 45.16.1 changelog tells you it closed a critical hole.[3] Anyone who skips updates that look cosmetic, or who pins page builders to avoid layout breakage, had no reason to take it. That’s the group at risk now.
How many sites are still exposed?
WordPress.org publishes a rough version breakdown for every plugin. On September 27, Visual Composer’s looked like this:[4]
| Version branch | Share of installs | Status |
|---|---|---|
| 45.16.x | 41.09% | Mixed: 45.16.0 is vulnerable, 45.16.1+ is fixed |
| 45.15 | 14.53% | Vulnerable |
| 45.10 | 6.65% | Vulnerable |
| Other | 37.73% | Unknown |
So at least 21% of installs sit on a branch where every release is affected. The 45.16 figure doesn’t split out 45.16.0, so the true number is higher. We haven’t seen a report of exploitation in the wild, and the CVE isn’t in CISA’s Known Exploited Vulnerabilities catalog.[6] With public exploit code and no login needed, we wouldn’t count on that lasting.
How to check your sites
1. Check the version
Run this from the site root. The plugin’s slug is visualcomposer.[3][7]
wp plugin get visualcomposer --field=version
# vulnerable: 45.16.0 and lower
wp plugin update visualcomposerIn wp-admin, the Plugins screen shows the same number.
2. Look for PHP where it doesn’t belong
WordPress stores uploads as media, not code. A PHP file in the uploads folder is a red flag whatever caused it.
find wp-content/uploads -type f \
\( -name '*.php' -o -name '*.phtml' \)
find wp-content -type f -name '*.php' \
-newermt '2026-07-01' | head -50The second command lists PHP files changed since July 1. Plugin and theme updates will show up there, so compare against what you know you installed.
3. Check administrators
wp user list --role=administrator \
--fields=ID,user_login,user_email,user_registeredRemove any administrator nobody on your team created, then rotate the real admins’ passwords.
4. Search the access logs
The advisory doesn’t publish indicators of compromise.[1] The parameter name is a reasonable thing to grep for. It only catches requests that put it in the URL, not in a POST body, so an empty result proves nothing. The log path is an example; use your server’s.
LOG=/var/log/nginx/access.log
grep -i 'vcv-template' "$LOG" | grep -v ' 404 '5. Agencies: check the whole fleet
Put your WP-CLI aliases (one per line, like @client1) in sites.txt. Sites without the plugin print an error you can ignore.
while read -r site; do
echo "== $site"
wp "$site" plugin get visualcomposer \
--field=version < /dev/null
done < sites.txtLook hardest at sites where plugin updates are pinned or turned off. Those are the likeliest to still be on 45.15 or 45.10.
The same bug class, twice in one week
This is the second file-inclusion flaw we’ve written about this week. The first was in WordPress core itself; see our CVE-2026-87902 checklist.[8] Both turn “include a file” into “run a file”. In both, what is already on the server decides how bad it gets. Our Elementor CVE-2026-62062 write-up covers a different page-builder bug from the same few days.
Zero Spam doesn’t patch Visual Composer, and it won’t clean up a compromised site. What it does is filter spam and malicious submissions on your comments, registrations and forms, through the free WordPress plugin or the API. That cuts down the junk that reaches the places where strangers can hand your site a file. If that helps, start on the free Explorer plan; code ZEROSPAM20 takes 20% off a paid license.[9]
FAQ
Frequently Asked Questions
All versions of Visual Composer Website Builder up to and including 45.16.0. Version 45.16.1 fixes it; we recommend the current 45.16.3.
No. The flaw is unauthenticated, so anyone who can reach the site can try it. That’s why it scores CVSS 9.8.
We haven’t seen a report of exploitation in the wild, and it isn’t in CISA’s KEV catalog as of September 27. Proof-of-concept code is public, so update anyway.
From this CVE, yes, if you’re on 45.16.1 or later. Update to 45.16.3 anyway for the two September security fixes.
The 45.16.1 entry only says the vendor folder was properly included. The vulnerability wasn’t disclosed publicly until September 23, two months later.
Sources & References
- Wordfence Intelligence: Visual Composer <= 45.16.0 unauthenticated LFI via vcv-template, CVSS 9.8, patched in 45.16.1 (Sep 23, 2026)
- CVE.org: CVE-2026-12227 record with discovery, vendor-notification and disclosure dates (Sep 24, 2026)
- WordPress.org: Visual Composer changelog for 45.16.1 to 45.16.3, and install count (accessed Sep 27, 2026)
- WordPress.org Plugins API: Visual Composer active installs by version branch (accessed Sep 27, 2026)
- WordPress Plugin Repository: changeset 3619572, Visual Composer 45.16.1 tagged (Jul 23, 2026)
- TheHackerWire: CVE-2026-12227 exploit status, public PoC, not in CISA KEV (Sep 24, 2026)
- WP-CLI: wp plugin get, –field option (accessed Sep 27, 2026)
- Zero Spam: WordPress 7.1.2 and CVE-2026-87902 checklist (Sep 23, 2026)
- Zero Spam: API plans, from the free Explorer tier up (accessed Sep 27, 2026)
