
If you run a WordPress site, plugins are almost certainly your biggest security liability. Not your hosting, not your password, not even that admin account you forgot to delete. Plugins. According to Patchstack's annual reports, plugins have accounted for roughly 90% or more of all disclosed WordPress vulnerabilities in recent years, and thousands of new plugin flaws get logged every single year. The core software is hardened and battle-tested. The third-party code you bolted onto it is a different story.
Here's the uncomfortable part: most site owners have no idea which of their plugins are risky, when they were last updated, or whether the "5-star, 100,000 installs" plugin they trust has an open CVE sitting in a public database right now. A vulnerable plugin doesn't announce itself. It just quietly sits in /wp-content/plugins/ until a bot scanning the internet finds the version string and walks right in.
This guide walks you through auditing your plugins before a breach forces the issue. You'll learn how attackers actually find vulnerable WordPress plugins, how to build a repeatable audit process, which free and paid tools give you real signal, and a concrete cleanup workflow you can run this afternoon. No fluff, just the checklist I use on client sites.
Key Takeaways
- Plugins cause the overwhelming majority of WordPress vulnerabilities. Audit them like they're the front door, because they are.
- Attackers mass-scan for version strings. An outdated plugin with a public CVE can be exploited within hours of disclosure.
- Inventory first: know every plugin, its version, its last-update date, and whether it's still actively maintained.
- Cross-reference each plugin against WPScan and the Patchstack database before you trust it.
- Delete deactivated plugins entirely. Deactivated does not mean disarmed.
- Layer defenses: a firewall and IP-level blocking buy you time between disclosure and patch.
What Makes a WordPress Plugin "Vulnerable"?
A vulnerable plugin is any plugin containing code that lets an attacker do something they shouldn't: read private data, inject scripts, upload files, escalate privileges, or take over the site entirely. The vulnerability class matters because it tells you how bad an exploit can get.
The vulnerability types you'll actually encounter
- SQL Injection (SQLi): Unsanitized input reaches the database. Attackers can dump user tables, including password hashes.
- Cross-Site Scripting (XSS): Malicious JavaScript gets stored or reflected. This is the single most common WordPress plugin flaw, often making up 40%+ of disclosures.
- Cross-Site Request Forgery (CSRF): Tricks a logged-in admin into performing actions without consent.
- Arbitrary File Upload: The nastiest category. If an attacker can upload a PHP file, they own your server.
- Broken Access Control / Privilege Escalation: A subscriber-level account performs admin-only actions. Common in poorly-coded membership and form plugins.
The severity of each is scored using CVSS (Common Vulnerability Scoring System), from 0.0 to 10.0. Anything 7.0 or above is "high," and 9.0+ is "critical." When you audit, prioritize by CVSS score and whether an active exploit exists in the wild.
How Attackers Find Vulnerable Plugins on Your Site
Understanding the attacker's workflow makes the defense obvious. This is not sophisticated. It's automated, industrialized, and largely indiscriminate.
- Fingerprinting. Bots request predictable paths like
/wp-content/plugins/some-plugin/readme.txt, which usually leaks the exact version number in plain text. - Matching. That version string gets compared against a database of known vulnerabilities. If your version is below the patched version, you're flagged.
- Mass exploitation. When a critical CVE drops, exploit code is often public within 24 to 48 hours. Botnets then hammer every site running that plugin.
- Persistence. Once in, they drop a backdoor, add a rogue admin user, and inject spam or malware for later.
The takeaway is brutal but simple: the gap between "a vulnerability is disclosed" and "your site gets scanned" can be measured in hours. Manual monthly patching isn't fast enough on its own, which is why layered protection like eDarpan WordPress Protection and firewall-level blocking earns its place. It buys you time to patch.
Step-by-Step: How to Audit Your WordPress Plugins
Here's the exact process. Budget about 90 minutes for a first full audit on a site with 20 to 30 plugins. Subsequent audits take 15 minutes.
Step 1: Build a complete plugin inventory
Go to Plugins → Installed Plugins in your dashboard. For each plugin, record four things in a spreadsheet:
- Plugin name and current installed version
- Active or deactivated
- The "last updated" date from its WordPress.org listing
- Whether it's essential, nice-to-have, or forgotten
If you prefer the command line and have WP-CLI installed, one command does the whole inventory:
wp plugin list --fields=name,status,version,update_version --format=csv
Step 2: Flag the abandoned plugins
On the WordPress.org page for each plugin, check the "Last updated" field. My rule of thumb:
- Updated in the last 3 months: healthy.
- 6 to 12 months: watch closely.
- Over 12 months, or "not tested with your version": treat as a liability and plan a replacement.
An unmaintained plugin will never get a patch. When a vulnerability is found, you're on your own. WordPress.org occasionally closes plugins for unresolved security issues, so a closed listing is a red flag.
Step 3: Cross-reference against vulnerability databases
Now check whether any installed version has a known CVE. Three free sources cover most cases:
- WPScan Vulnerability Database — search by plugin slug.
- Patchstack Database — well-organized, includes CVSS scores and patched versions.
- WordPress.org security advisories — for core and hosted plugins.
For each plugin, note the vulnerable version range and the patched version. If your installed version falls in the vulnerable range, that's a fix-now item.
Step 4: Run an automated scan
Manual lookups are fine for a dozen plugins. For thoroughness, run a scanner:
- WPScan (CLI or plugin) checks your installed versions against its database automatically.
- Wordfence or a comparable security suite scans for known vulnerabilities and modified core files.
- Our own SiteGuard Pro and the broader WordPress plugins collection on LionScripts are worth a look if you want hardening tools that go beyond scanning.
Step 5: Delete, don't just deactivate
This is the step everyone skips. A deactivated plugin's PHP files are still on your server and can still be reached directly by URL in many configurations. If you're not using it, delete it completely.
Step 6: Lock down the perimeter
Because you can't patch a zero-day the instant it drops, add layers that reduce your exposure regardless of which plugin is at fault:
- Block direct access to
readme.txtand PHP execution in the uploads folder. - Restrict
/wp-adminandwp-login.phpby IP where practical using something like WordPress IP Blocker Pro. - Enforce strong authentication. If you haven't yet, read our guide on ditching passwords with passkeys.
A Worked Example: Auditing a Real 24-Plugin Site
Let me make this concrete. A small business site I audited last quarter had 24 installed plugins. Here's what the numbers looked like before and after.
Before the audit:
- 24 plugins installed, 19 active, 5 deactivated "just in case."
- 6 plugins hadn't been updated by their developers in over 14 months.
- 3 plugins had known high or critical CVEs in the installed version.
- 1 abandoned slider plugin had a CVSS 9.8 arbitrary file upload flaw. No patch would ever come.
The cleanup:
- Deleted all 5 deactivated plugins outright. Attack surface dropped immediately.
- Updated the 3 plugins with available patches to their fixed versions.
- Replaced the abandoned slider with a maintained alternative that did the same job.
- Removed 2 "nice-to-have" plugins whose features weren't actually used.
After the audit:
- 15 plugins, all active, all updated within the last 90 days.
- Zero known CVEs across the stack.
- Page load improved by 0.7 seconds because the abandoned plugins were also loading bloated scripts.
The whole thing took two hours. The site went from "one bot scan away from compromise" to genuinely defensible, and it got faster in the bargain. Fewer plugins is almost always safer and quicker.
Comparing Plugin Audit Tools
You don't need every tool. You need the right combination of a vulnerability database, a scanner, and a perimeter layer. Here's how the common options stack up.
| Tool / Approach | Finds known CVEs | Detects abandoned plugins | Real-time protection | Best for |
|---|---|---|---|---|
| Manual WPScan DB lookup | Yes | Manual | No | Small sites, learning the process |
| WPScan CLI | Yes | Cover image: Software value feedback loop by jakuza, licensed under BY-SA 2.0 via Openverse.








