WordPress security audit
EN

WordPress security audit

Last verified: June 22, 2026
5min read
Case study
Security auditor

#The stack we audited

A small-business WordPress site came in for a security audit, and the findings were the ordinary kind that quietly put a site one automated scan away from compromise. The page builder, Elementor, was pinned at version 3.11.1, carrying four critical CVEs including SQL injection and stored cross-site scripting. Contact Form 7 was running 5.8, exposed to CVE-2023-6449, an arbitrary file upload. Nothing exotic, just outdated plugins, which is the dominant way WordPress sites get breached.

The uncomfortable part is how normal this is. The site worked. It looked fine. The owner had no reason to suspect anything, because outdated plugins do not show symptoms until they are exploited. The audit existed to find the gap before someone else did.

#Outdated plugins are the attack surface

A plugin is safe while it is patched. The moment a vulnerability is published as a CVE and you have not updated, the exploit is public knowledge and your installed version is a named target for automated scanners. Attacks on WordPress are overwhelmingly blind and automated, bots sweep for known-vulnerable versions of popular plugins, so running an old Elementor or Contact Form 7 is not an abstract risk. It is an advertised one.

On this site:

  • Elementor 3.11.1 carried four critical CVEs (SQL injection and stored cross-site scripting among them), while the patched line had already moved to 3.17.3. Every one of those four was live.
  • Contact Form 7 5.8 was exposed to CVE-2023-6449, a drag-and-drop file-upload flaw that let an authenticated user with editor rights upload arbitrary files, a direct path toward remote code execution.

Neither plugin was unusual. Both are on a huge share of WordPress sites. That is exactly why their known vulnerabilities are worth a scanner’s time.

#What the audit checks

A security audit is methodical rather than clever. The core of it:

  • Inventory every installed plugin and theme, and cross-check each version against its known CVEs and minimum-safe version. This is what surfaced the Elementor and Contact Form 7 exposure here.
  • Test custom and theme code for the WordPress security basics: nonce and capability checks on actions, input sanitised before it reaches the database, output escaped before it reaches the page, and endpoints that require authorisation.
  • Check server-level exposure: an open xmlrpc.php, PHP errors displayed on production leaking paths, missing security headers.
  • Review the update and backup posture, because an unmaintained site drifts back into this state within months.

The version cross-check is the unglamorous part that catches the most, because the most common WordPress vulnerability is not a clever zero-day. It is a popular plugin three versions behind its patch.

#Where AI-assisted builds make it worse

This audit was about outdated third-party plugins, the neglect pattern. AI-assisted builds add a second layer on top. They install plugins fast, often without setting up any update routine, so versions drift behind their patches even faster. And AI-generated custom code frequently omits the nonce, capability, and sanitisation checks WordPress expects, so you inherit both an outdated-plugin problem and a generated-code problem at once. That is why this kind of audit is part of our broader AI-built website rescue work, and why a standalone WordPress security audit starts with the boring version cross-check before anything else.

#What fixing it looks like

The remediation order is risk-first, not convenience-first:

  • Patch or remove the plugins with live CVEs immediately, starting with the file-upload and injection paths, because those are the highest-severity.
  • Remove plugins that are abandoned or no longer needed, shrinking the surface permanently.
  • Close server-level exposure (xmlrpc.php, production error display, missing headers).
  • Put a real update and backup routine in place, so the site does not drift back to four-live-CVEs within a year.

#Glossary

  • CVE - a Common Vulnerabilities and Exposures identifier, a public catalogue entry for a specific known vulnerability.
  • SQL injection - an attack that smuggles database commands through unsanitised input.
  • Stored cross-site scripting - malicious script saved on the site and served to other users.
  • Nonce / capability check - WordPress mechanisms that confirm a request is intentional and the user is allowed to make it.

#The takeaway

A WordPress site does not have to be interesting to be attacked. It has to be running a known-vulnerable version of a popular plugin, which describes a large share of sites that have not been audited. The good news is that the dominant risk is also the most boring to fix: cross-check every plugin version against its CVEs, patch or remove the offenders, and put a maintenance routine in place so the gap does not reopen. The site in this audit was one scan away from trouble and did not know it. Most sites in that position do not.

Next step

Turn the article into an actual implementation

This block strengthens internal linking and gives readers the most relevant next move instead of leaving them at a dead end.

Article FAQ

Frequently Asked Questions

Practical answers to apply the topic in real execution.

SEO-ready GEO-ready AEO-ready 4 Q&A
How do outdated plugins become a security risk? #
A plugin with a known vulnerability is safe only while it is patched. Once a CVE is published and you have not updated, the exploit is public and your version is a target. On the site in this audit, Elementor was pinned at 3.11.1 while the patched line had moved to 3.17.3, leaving four critical CVEs live, and Contact Form 7 at 5.8 was exposed to CVE-2023-6449, an arbitrary file upload. The fix is disciplined updating plus removing plugins you no longer need.
What is CVE-2023-6449? #
It is a documented vulnerability in a Contact Form 7 drag-and-drop file-upload extension that allowed an authenticated user with editor-level rights to upload arbitrary files, a path to remote code execution on an unpatched site. It is a clear example of why running an old plugin version is not a theoretical risk but a published, exploitable one.
What does a WordPress security audit actually check? #
It inventories every installed plugin and theme and cross-checks each version against its known CVEs and minimum-safe version. It tests the site's own and custom code for missing nonce and capability checks, input that reaches the database without sanitisation, output that skips escaping, and endpoints exposed without authorisation. It also checks server-level exposure such as an open xmlrpc.php and error display on production.
Why are AI-assisted builds more exposed to this? #
Two reasons. Fast builds install many plugins quickly and rarely set up a maintenance and update routine, so versions drift behind their patches. And AI-generated custom code frequently ships without the nonce, capability, and sanitisation checks WordPress expects, adding a second class of vulnerability on top of the outdated third-party plugins.

Need an FAQ tailored to your industry and market? We can build one aligned with your business goals.

Let’s discuss

Related Articles

Thirty-one plugins closed after a Flippa buyer planted a backdoor in the first SVN commit. How to audit plugin ownership, detect compromise, and harden your sites against supply chain attacks.
security

WordPress plugin supply chain attacks: audit after the Flippa backdoor

Thirty-one plugins closed after a Flippa buyer planted a backdoor in the first SVN commit. How to audit plugin ownership, detect compromise, and harden your sites against supply chain attacks.

Protect your business data by choosing Open Source CMS over closed SaaS platforms in the era of AI. Learn about data ownership, GDPR compliance, and vendor lock-in risks.
wordpress

Digital Sovereignty: Why Open Source Matters in 2026

Protect your business data by choosing Open Source CMS over closed SaaS platforms in the era of AI. Learn about data ownership, GDPR compliance, and vendor lock-in risks.

A single week in June 2026 saw the Awesome Motive CDN breach, the ShapedPlugin build pipeline compromise, and a 13-year backdoor campaign exposed. The common thread: the official update channel was the attack vector. What store owners should actually change.
security

WordPress supply chain attacks in 2026

A single week in June 2026 saw the Awesome Motive CDN breach, the ShapedPlugin build pipeline compromise, and a 13-year backdoor campaign exposed. The common thread: the official update channel was the attack vector. What store owners should actually change.