Updating WordPress is supposed to close holes. With CVE-2026-119977 it briefly opens one: while a vulnerable site installs a full core package, an unauthenticated request that arrives at the right second can end in code execution on the server.
The flaw affects versions 4.7 to 7.1.3 and was fixed on 28 October in WordPress 7.1.4. On 3 November CISA added it to its Known Exploited Vulnerabilities (KEV) catalogue, The Hacker News reported, and since patch day Wordfence has been logging automated traffic that polls sites again and again in the hope of catching an update mid-flight.
How did the flaw go from patch to KEV listing in six days?
Pieced together from WordPress, Wordfence and CISA data, the timeline runs as follows:
- 28 October. WordPress released 7.1.4 with 22 security fixes, among them a race condition in the core updater reported by researcher Umut Bayram. Patched builds for the older branches shipped alongside it.
- Same day. Wordfence spotted the first probes and had a firewall rule out about three hours after the release, according to webhosting.today.
- 30 October. Wordfence had blocked 62,969 attacks in 24 hours, The Hacker News reported. Previdian's honeypots caught three attempts that day from a UK-geolocated IP address.
- 31 October. Wordfence assigned the identifier CVE-2026-119977 and a CVSS score of 8.1.
- 3 November. CISA listed it in the KEV catalogue, giving US federal civilian agencies until 6 November to remediate.
That three-day window matches the shortest deadline in the new federal patching model we looked at in our piece on CISA's BOD 26-04. For a European company it is a sensible yardstick when an asset faces the internet and the flaw is already being exploited.
Wordfence's numbers count blocked attempts, not breaches, and the company has not reported a successful compromise, according to Techaeris. A separate Wordfence count put requests to the staging paths at more than 18,500 in the 21 hours after its rule went live; on 4 November it cited 12,632 attempts blocked over the previous day. These are different windows and should not be added together. CISA, for its part, has not said what evidence led it to list the flaw.
What actually happens during the update?
When WordPress installs a full core package, it first unpacks it into a working directory under wp-content/upgrade/ and then copies the files into place. Patchstack's analysis shows that, before 7.1.4, three things lined up:
- The working directory had a predictable name.
- The clean-up step deleted the
index.phpfile that stops the folder's contents being listed. - The staged copy contained
wp-admin/setup-config.php, the installation wizard, which can run without the site's configuration.
If the web server serves and executes PHP from that path, whoever requests the wizard at the right moment finds a working installer sitting outside the production install, and from there can reach code execution. In Wordfence's lab the window stayed open for only seconds. Hence the shape of the traffic: patient, repetitive polling. The two busiest sources spent about 14.5 hours working through small groups of sites.
According to Patchstack, the vulnerable code originates in WordPress 2.8. The fix appends 16 random characters to the directory name, keeps the index.php in place and stops configuration created in the staged copy from being promoted into the live install, which Patchstack describes as no longer copying wp-config.php out of the working directory.
Why can a PHP-based firewall not stop it?
In their default mode, security plugins that filter requests from inside WordPress are blind to this attack. The malicious request goes straight to a PHP file in the staged copy without loading the site's WordPress first, so an application-level WAF never gets to run. Wordfence covers it only through its Extended Protection mode, which intercepts direct requests to PHP files. An effective block has to sit in the web server, the reverse proxy or the CDN.
Who is exposed, and why do the severity ratings disagree?
Every release from 4.7 to 7.1.3 is affected, according to the project's advisory and Rapid7's entry. Wordfence lists four conditions for a successful attack: a full-package update that includes the installer files, a staging tree reachable over the web with PHP enabled, a path that is predictable or discoverable, and an attacker who arrives before WordPress deletes the temporary files.
Turning on automatic updates does not shut the window; on an unpatched site it reopens it. Patchstack points out that every update on an unpatched site, unattended ones included, recreates the staging directory.
How serious the flaw is depends on whom you ask, and the disagreement is telling:
| Source | Rating | Basis |
|---|---|---|
| WordPress | Low severity | Project security advisory, as reported by webhosting.today |
| Wordfence | CVSS 8.1 (high) | No authentication or user interaction, but high attack complexity |
| Patchstack | High complexity; ‘not practical to exploit’ | The attacker must hit the path within a window of seconds |
| CISA | Listed in the KEV catalogue | Evidence of active exploitation; federal deadline of 6 November |
Sources: webhosting.today, The Hacker News and Patchstack.
Wordfence and Patchstack are scoring how hard a single attempt is to land; WordPress does not explain its rating. CISA is answering a different question, namely whether anyone is trying in earnest. An attacker who can retry for hours at almost no cost turns high complexity into a test of patience. Weighing observed exploitation against exposure, as models that combine KEV, EPSS and SSVC do, therefore produces a better patching order than CVSS on its own.
Two groups need particular care. Sites on 4.6 or earlier fall outside the advisory because they no longer receive security releases; since the vulnerable code dates back to 2.8, they are best treated as exposed. And in many organisations the WordPress estate is far larger than the corporate website: campaign microsites, brand blogs built by agencies, staging environments published by mistake. These are the sites nobody updates by hand, and the ones that tend to surface during an attack surface review.
On managed hosting, exposure hinges on whether the provider already blocks the path for every customer. Ask, and get the answer in writing.
How can you tell whether someone used the window?
The primary signal lives in web server logs: requests for PHP files under wp-content/upgrade/, especially setup-config.php. A simple search across nginx access logs, compressed ones included:
zgrep -E '/wp-content/upgrade/[^ ]*\.php' /var/log/nginx/access.log*
Hits on their own prove little, because most will be probes that arrived outside the window. What matters is lining up their timestamps and response codes against the core update history. A 200 response for a PHP file in that folder, coinciding with an update, is enough to open an investigation.
Inside WordPress, the indicators of compromise flagged by Wordfence and The Hacker News are unfamiliar administrator accounts, plugins nobody installed and unexplained PHP files. WP-CLI checks them in minutes:
wp core version
wp core verify-checksums
wp user list --role=administrator --fields=ID,user_login,user_registered
wp plugin list --fields=name,status,version
find wp-content -name '*.php' -newermt '2026-10-28' -not -path '*/cache/*'
If anything looks wrong, treat the site as compromised. Isolate it, preserve logs and a copy of the file system before cleaning, and rotate the database credentials and the keys in wp-config.php, which an attacker with code execution will have been able to read. From there it is an incident response job, and a hasty reinstall wipes out exactly the evidence investigators need.
Which version should you install, and what if you cannot update today?
WordPress has shipped the fix for every branch back to 4.7. Only 7.1 is actively supported; the others receive fixes as a courtesy. The release notes show that the older the branch, the fewer of the 22 flaws affect it:
| Branch | Fixed version | Flaws out of 22 that affect it |
|---|---|---|
| 7.1 | 7.1.4 | 22 |
| 7.0 | 7.0.8 | 22 |
| 6.9 | 6.9.11 | 22 |
| 6.8 and 6.7 | 6.8.12 and 6.7.11 | 20 |
| 6.6 | 6.6.11 | 19 |
| 6.5 and 6.4 | 6.5.14 and 6.4.14 | 17 |
| 5.9 to 6.3 | Point release for each branch (5.9.20 to 6.3.14) | 9 |
| 5.0 to 5.8 | Point release for each branch | 6 |
| 4.9 | 4.9.35 | 4 |
| 4.7 and 4.8 | 4.7.39 and 4.8.34 | 2 |
| 4.6 or earlier | No fix | No data |
Source: WordPress.org.
Older branches rely on that courtesy rather than on active support, so 7.1.4 is the sensible target. Sequence matters too. If updating opens the window, close the window before you press the button.
Patchstack recommends denying web access to wp-content/upgrade/ and checking that the directory cannot be listed. Alex Thomas of Defiant, the company behind Wordfence, agreed in comments to Techaeris that blocking it at the server or CDN before updating is the better sequence. In nginx:
location ^~ /wp-content/upgrade/ { deny all; }
In Apache, use an .htaccess file inside that directory or an equivalent block in the site configuration:
Require all denied
Options -Indexes
Between updates the folder should contain only an index.php. Hosting providers can apply the rule to every site on a server at once, which also shields sites that have not yet updated. Wordfence is clear that this reduces exposure without replacing the patch. It is the kind of hardening that belongs in every WordPress server template, CVE or no CVE, and a check that fits naturally into a vulnerability management programme.
Version 7.1.4 also refreshes the root certificates bundled with WordPress after the eMudhra revocation, which we covered when discussing weak keys at a certificate authority.
What should defenders watch over the coming days?
Two dates matter: 6 November, the federal deadline, and 27 November, when the Wordfence rule reaches free-tier users after the usual 30-day delay. The risk itself has no expiry date, because every unpatched site exposes itself again at its next full core update.
Check, too, that automatic updates really did apply. A site configured to update itself that still reports 7.1.3 is precisely the target the probes are looking for.
Update machinery has been part of the attack surface for a long time. Back in 2016, Wordfence described a flaw in WordPress's update infrastructure that could have pushed code to roughly a quarter of the web. This year has brought tampered updates in AOMEI Backupper and backdoors on WordPress sites that were fully up to date. Patching is still the main line of defence. The routine that installs each patch, though, should get the same scrutiny as the code being fixed.
The configurations and commands in this article are for guidance and should be tested in a staging environment before being applied to production systems. Exploitation data comes from WordPress, Wordfence, Patchstack and CISA as published up to 5 November 2026 and may change as further details emerge.
Frequently asked questions
Is my site vulnerable if automatic updates are switched on?
▾
Yes, until it reaches the fixed release for its branch. Automatic updates do not block the attack; on an unpatched site, every full core update recreates the staging directory for a few seconds. Once 7.1.4 or the fixed point release is installed, the directory name is no longer predictable. Check the version with wp core version or in the dashboard rather than assuming the update ran.
Is a security plugin such as Wordfence enough?
▾
Not in its standard mode. The plugin's firewall lives inside the site, while the staged core copy runs outside it, so the request slips past. Wordfence covers it through Extended Protection, which filters direct requests to PHP files; paying customers received the rule on 28 October and free users get it on 27 November. A web server block works regardless of plugins and also protects sites that have not yet updated.
Why does WordPress rate it low severity when CISA treats it as exploited?
▾
Because each answers a different question. The project's label (which comes without a stated rationale) and Patchstack's assessment weigh the difficulty of hitting a window measured in seconds, whereas KEV only lists flaws with evidence of exploitation. For deciding when to patch, internet exposure and active attackers should carry more weight than the label.
What about sites running WordPress 4.6 or earlier?
▾
They get no fix. While a migration is planned, the main barrier is denying web access to wp-content/upgrade/ at the server, proxy or CDN, and avoiding full core updates without that block in place. A site that old also carries many other unpatched flaws, so it should be tracked as a high-risk asset in the inventory.
How do I tell a probe from a breach in the logs?
▾
A probe is a request to wp-content/upgrade/ that gets a 404 or 403 because it missed the window or hit the block. A 200 response for a PHP file in that folder that lines up with a core update already warrants investigation; if new administrator accounts, unknown plugins or freshly written PHP files follow, handle it as an incident.
Does this also affect plugin and theme updates?
▾
Published sources describe the attack path only for full core updates, because the risk comes from the staged copy containing the setup-config.php installer. Nothing so far extends the problem to plugins or themes. Even so, blocking web access to wp-content/upgrade/ is a low-impact measure that also protects whatever gets unpacked into that folder.
Should a European company adopt CISA's three-day deadline?
▾
It is not mandatory, but it is a reasonable benchmark. Under BOD 26-04, a KEV listing and an internet-facing asset are two of the variables that push a flaw towards the three-day deadline, and a public WordPress site exposed to CVE-2026-119977 has both. For entities in scope of NIS2, being able to show that a KEV-listed vulnerability was handled in days rather than weeks gives an auditor useful evidence that vulnerability management works.