{"id":8533,"date":"2026-08-04T21:43:15","date_gmt":"2026-08-04T21:43:15","guid":{"rendered":"https:\/\/dextora.agency\/?post_type=insight&#038;p=8533"},"modified":"2026-08-04T21:43:15","modified_gmt":"2026-08-04T21:43:15","slug":"wordpress-plugin-vulnerabilities-five-hour-exposure-window","status":"publish","type":"insight","link":"https:\/\/dextora.agency\/en\/insights\/wordpress-plugin-vulnerabilities-five-hour-exposure-window\/","title":{"rendered":"WordPress Core Is Nearly Untouchable. 91% of the Holes Are in Plugins, and You Have Five Hours"},"content":{"rendered":"<p>Almost every WordPress security article ends in the same place: keep everything updated. In 2026 that advice is technically correct and operationally useless, because the gap between a vulnerability going public and being exploited across the whole internet is now shorter than the time it takes most teams to notice the update exists.<\/p>\n<p>On 25 February 2026 Patchstack published its <a href=\"https:\/\/patchstack.com\/whitepaper\/state-of-wordpress-security-in-2026\/\" target=\"_blank\" rel=\"noopener\">State of WordPress Security in 2026<\/a>. Two figures from it are worth committing to memory. <strong>11,334 new vulnerabilities were catalogued across the WordPress ecosystem during 2025, a 42% increase on the year before.<\/strong> And <strong>the weighted median time from public disclosure to mass exploitation was five hours.<\/strong><\/p>\n<p>Five hours is less than a working day. It is shorter than most maintenance retainers, shorter than the average change-approval cycle, and considerably shorter than the interval between someone logging into an admin panel to check whether anything needs updating. This article is about what that number actually forces you to change.<\/p>\n<h2>What the report found, in one table<\/h2>\n<p>The headline distribution is the part that reframes the whole discussion. The platform itself is not where sites are being broken into.<\/p>\n<table>\n<thead>\n<tr>\n<th>Finding for 2025<\/th>\n<th>Figure<\/th>\n<th>What it means in practice<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>New vulnerabilities catalogued<\/td>\n<td>11,334, up 42% year on year<\/td>\n<td>The problem is volume, not exotic technique<\/td>\n<\/tr>\n<tr>\n<td>Share found in plugins<\/td>\n<td>91%<\/td>\n<td>Your attack surface is a procurement decision, not a platform one<\/td>\n<\/tr>\n<tr>\n<td>Share found in themes<\/td>\n<td>9%<\/td>\n<td>Page builders and multipurpose themes carry real weight here<\/td>\n<\/tr>\n<tr>\n<td>Found in WordPress core<\/td>\n<td>6, all classified low priority<\/td>\n<td>Core is effectively not your risk<\/td>\n<\/tr>\n<tr>\n<td>Median time to mass exploitation<\/td>\n<td>5 hours<\/td>\n<td>A human patching cadence cannot win this race<\/td>\n<\/tr>\n<tr>\n<td>No patch available at disclosure<\/td>\n<td>46%<\/td>\n<td>Nearly half the time there is nothing to update to<\/td>\n<\/tr>\n<tr>\n<td>Critical zero-days in premium components<\/td>\n<td>33, against 12 in free components<\/td>\n<td>Paying for a plugin buys support, not safety<\/td>\n<\/tr>\n<tr>\n<td>WordPress-specific attacks stopped by hosting defences<\/td>\n<td>12%<\/td>\n<td>The perimeter is thinner than the invoice suggests<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>One caveat before anyone quotes this in a board deck. Patchstack maintains a commercial vulnerability database and sells mitigation, so it is reporting on a market it participates in. The counts come from its own intake and curation, which is the most complete public source available for this ecosystem and is still one vendor&#8217;s view of it. Treat the direction as solid and the second decimal place as approximate, the same way you should treat any industry benchmark.<\/p>\n<h2>Stop auditing core. It is not the door anyone uses<\/h2>\n<p>Six low-priority issues in core across an entire year, on software running a very large share of the web, is an unusually good result for any platform of that size. Core has a security team, a disclosure process, background updates enabled by default for point releases, and enough scrutiny that serious problems surface early.<\/p>\n<p>Plugins have none of that guaranteed. A plugin can be written by a two-person shop, sold, abandoned, resold, and left in the directory with fifty thousand active installs and no maintainer. The <a href=\"https:\/\/developer.wordpress.org\/plugins\/security\/\" target=\"_blank\" rel=\"noopener\">plugin security guidance in the WordPress developer handbook<\/a> exists and is good, and nothing enforces that anyone reads it. That asymmetry is the entire story of the 91%.<\/p>\n<p>The operational consequence is uncomfortable: <strong>the number of plugins on a site is a security metric.<\/strong> Not a performance one, not a tidiness one. Every additional plugin is an additional independent vendor whose release discipline you have adopted without reviewing it. We wrote separately about <a href=\"https:\/\/dextora.agency\/en\/insights\/wordpress-security-how-sites-get-hacked-guide\/\">how WordPress sites actually get hacked<\/a>, and the pattern in real incidents matches the statistics almost exactly.<\/p>\n<h2>Why five hours kills the manual model<\/h2>\n<p>Consider how a typical maintenance arrangement works. A vulnerability is disclosed on a Tuesday afternoon. Someone reads the advisory on Wednesday morning. A ticket is raised, a staging site is updated, a smoke test is run, the client approves the window, and the fix reaches production on Thursday. That is a competent, careful, professional process. It is also roughly thirty times slower than the exploitation window.<\/p>\n<p>Automated scanning does not care about your working hours. Once a fix appears in a public repository, the diff itself describes the vulnerability, and mass scanning follows within hours. The gap between disclosure and exploitation has been compressing for years, and five hours is what it now looks like.<\/p>\n<p>Then there is the 46%. Almost half of the disclosed vulnerabilities had no patch available at the moment they went public, which means the entire strategy of &#8220;apply updates promptly&#8221; simply has no move to make in those cases. You cannot install a fix that does not exist. Something else has to cover the interval.<\/p>\n<h2>Premium is not the safe option<\/h2>\n<p>This is the finding most likely to contradict an existing procurement policy. Patchstack recorded <strong>33 critical zero-day vulnerabilities in premium or freemium components against 12 in free ones<\/strong>, and reported that paid components carried around three times the rate of known exploited vulnerabilities.<\/p>\n<p>The mechanism is not mysterious. Premium plugins carry more features, larger codebases, licensing and update servers of their own, and bundled third-party libraries. They are also distributed outside the wordpress.org repository, which means they sit outside the automated review, the forced-update mechanism the repository can trigger, and often outside the update channel of the site itself. A bundled premium slider inside a purchased theme is the classic case: it is three versions behind, nobody knows it is there, and it has no update path at all.<\/p>\n<p>The right conclusion is not that free is safer. It is that <strong>price is not a proxy for maintenance quality<\/strong>, and it should not appear anywhere in your selection criteria as if it were. The questions that do predict something are release frequency, time-to-patch history, whether the vendor has a published security contact, and whether the component appears in a vulnerability database with a record of prompt fixes. Our <a href=\"https:\/\/dextora.agency\/en\/insights\/vendor-risk-checklist-before-integrating-services-guide\/\">vendor risk checklist before integrating a third-party service<\/a> covers the same evaluation logic for services, and it transfers directly to plugins.<\/p>\n<h2>What hosting and WAFs actually do<\/h2>\n<p>The report&#8217;s most awkward number for the hosting industry is that traditional defences blocked only <strong>12% of WordPress-specific vulnerabilities<\/strong>, against a considerably better rate for generic attack traffic.<\/p>\n<p>That difference is the important part. Generic rules catch generic attacks: SQL injection patterns, known bad payloads, obvious scanners. A WordPress-specific vulnerability is usually a legitimate request to a legitimate endpoint with parameters the plugin author failed to validate. There is nothing in the packet that looks wrong unless the rule knows that specific plugin, that specific endpoint, and that specific parameter. Generic filtering cannot know that.<\/p>\n<p>None of which makes managed hosting worthless. Isolation, hardened PHP settings, immutable backups and fast rollback are worth paying for, and we set out where the money genuinely matters in <a href=\"https:\/\/dextora.agency\/en\/insights\/business-hosting-what-to-choose-where-not-to-save\/\">choosing business hosting<\/a>. Just do not buy it believing that the WAF line item covers plugin vulnerabilities. On the evidence it covers about one in eight of them.<\/p>\n<h2>The controls that actually move the number<\/h2>\n<p>Given a five hour window, a 46% no-patch rate and a 12% perimeter block rate, the strategy has to stop being &#8220;patch faster&#8221; and start being &#8220;have fewer things to patch, and cover the interval when patching is impossible&#8221;.<\/p>\n<table>\n<thead>\n<tr>\n<th>Control<\/th>\n<th>Which finding it answers<\/th>\n<th>Effort<\/th>\n<th>What it leaves uncovered<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Cut plugin count, remove anything inactive<\/td>\n<td>91% in plugins<\/td>\n<td>One audit, then quarterly<\/td>\n<td>Nothing about the plugins you keep<\/td>\n<\/tr>\n<tr>\n<td>Provenance rules for new plugins<\/td>\n<td>Premium zero-day rate<\/td>\n<td>A policy plus ten minutes per decision<\/td>\n<td>Everything already installed<\/td>\n<\/tr>\n<tr>\n<td>Virtual patching at the application layer<\/td>\n<td>5 hour window, 46% unpatched<\/td>\n<td>Subscription plus setup<\/td>\n<td>Vulnerabilities nobody has published yet<\/td>\n<\/tr>\n<tr>\n<td>Automatic minor and security updates<\/td>\n<td>5 hour window<\/td>\n<td>Configuration only<\/td>\n<td>Major versions, and the risk of a bad release<\/td>\n<\/tr>\n<tr>\n<td>Staged major updates on a copy of production<\/td>\n<td>Breakage risk from automation<\/td>\n<td>A staging environment<\/td>\n<td>Adds delay, so pair it with virtual patching<\/td>\n<\/tr>\n<tr>\n<td>File integrity and outbound request monitoring<\/td>\n<td>Detection when prevention fails<\/td>\n<td>Setup plus someone reading alerts<\/td>\n<td>Detects, does not prevent<\/td>\n<\/tr>\n<tr>\n<td>Tested restore, not just backups<\/td>\n<td>Recovery time after a successful breach<\/td>\n<td>One rehearsal per quarter<\/td>\n<td>Data written between breach and detection<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Three of those deserve expansion.<\/p>\n<p><strong>Virtual patching<\/strong> is the direct answer to the 46%. A rule written for one known vulnerability in one known component blocks the specific request shape that exploits it, without touching the plugin. It buys you the interval between disclosure and a real fix, which is precisely the interval where sites are lost. Public vulnerability trackers such as the <a href=\"https:\/\/patchstack.com\/database\/\" target=\"_blank\" rel=\"noopener\">Patchstack vulnerability database<\/a> and the <a href=\"https:\/\/www.cisa.gov\/known-exploited-vulnerabilities-catalog\" target=\"_blank\" rel=\"noopener\">CISA catalogue of known exploited vulnerabilities<\/a> are what these rules are built from, and they are also worth subscribing to directly if you run more than a handful of sites.<\/p>\n<p><strong>Staged auto-updates<\/strong> means splitting the update stream rather than choosing between automatic and manual for everything. Security and minor releases go out automatically, because the expected loss from a rare broken layout is far smaller than the expected loss from a five hour exposure. Major versions go through staging. WordPress supports this split natively through <a href=\"https:\/\/wordpress.org\/documentation\/article\/configuring-automatic-background-updates\/\" target=\"_blank\" rel=\"noopener\">the background update constants<\/a>, and most teams never configure them because the default conversation is framed as all or nothing.<\/p>\n<p><strong>Monitoring<\/strong> exists because the first three controls will eventually fail. What matters after that is elapsed time. A compromise found in an hour is an incident; the same compromise found in three months is a data problem, a reputation problem and possibly a regulatory one. The baseline set we recommend for smaller teams is in our guide to <a href=\"https:\/\/dextora.agency\/en\/insights\/cybersecurity-for-small-business-baseline-protection-guide\/\">cybersecurity for small business<\/a>.<\/p>\n<h2>What these numbers do not justify<\/h2>\n<ul>\n<li><strong>Leaving WordPress.<\/strong> Six low-priority core issues in a year is a strong result. Migrating to a different platform moves you to a different set of dependencies with less public scrutiny, not to a smaller attack surface.<\/li>\n<li><strong>Turning off all automatic updates after one bad release.<\/strong> That trade swaps a rare visible failure for a frequent invisible one. Measure both sides before deciding.<\/li>\n<li><strong>Buying a security plugin and considering the matter closed.<\/strong> Most of what changes the outcome is inventory discipline and update policy, neither of which arrives as a plugin.<\/li>\n<li><strong>Treating the 42% rise as an emergency.<\/strong> Part of the growth reflects more researchers and better reporting. The five hour window and the 46% no-patch rate are the operationally serious findings, not the headline count.<\/li>\n<\/ul>\n<h2>The short version<\/h2>\n<p>WordPress core contributed six low-priority vulnerabilities in 2025 while plugins contributed 91% of 11,334. The median time from disclosure to mass exploitation was five hours, 46% of disclosures shipped with no fix available, premium components produced nearly three times as many critical zero-days as free ones, and hosting-level defences stopped roughly one in eight WordPress-specific attacks. Read together, those numbers say that patching speed is not the lever. Plugin count, plugin provenance, virtual patching, a split update policy and a monitored recovery path are.<\/p>\n<p>If a site has accumulated thirty or forty plugins over several years, no inventory of what they do, and a theme with bundled components nobody can update, the honest fix is usually structural rather than procedural. That is the situation we deal with most often on a <a href=\"https:\/\/dextora.agency\/en\/services\/website-migration\/\">site migration and rebuild<\/a>, where the point of the exercise is to arrive with a dependency list short enough that keeping it patched is a realistic commitment rather than a stated intention.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>What the 2026 Patchstack numbers say about plugins, themes and core, why a five hour exploitation window breaks manual patching, why premium plugins scored worse than free, and which controls matter most.<\/p>\n","protected":false},"author":1,"featured_media":8530,"template":"","insight_category":[154],"insight_tag":[168,186,162],"class_list":["post-8533","insight","type-insight","status-publish","has-post-thumbnail","hentry","insight_category-guides","insight_tag-business-process","insight_tag-security","insight_tag-web-development"],"acf":[],"_links":{"self":[{"href":"https:\/\/dextora.agency\/en\/wp-json\/wp\/v2\/insight\/8533","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dextora.agency\/en\/wp-json\/wp\/v2\/insight"}],"about":[{"href":"https:\/\/dextora.agency\/en\/wp-json\/wp\/v2\/types\/insight"}],"author":[{"embeddable":true,"href":"https:\/\/dextora.agency\/en\/wp-json\/wp\/v2\/users\/1"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/dextora.agency\/en\/wp-json\/wp\/v2\/media\/8530"}],"wp:attachment":[{"href":"https:\/\/dextora.agency\/en\/wp-json\/wp\/v2\/media?parent=8533"}],"wp:term":[{"taxonomy":"insight_category","embeddable":true,"href":"https:\/\/dextora.agency\/en\/wp-json\/wp\/v2\/insight_category?post=8533"},{"taxonomy":"insight_tag","embeddable":true,"href":"https:\/\/dextora.agency\/en\/wp-json\/wp\/v2\/insight_tag?post=8533"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}