Skip to content

Security11 min read

WordPress 7.1.4 security release: The updater flaw and what to do now

Check if your WordPress site is patched against the 7.1.4 updater flaw. Block the upgrade folder, review access logs, and check for signs of compromise.

Portrait of Hamza Ahmad AslamBy AI & WordPress Developer | Speed Optimization & Site Security

Server cabinet with its update vault briefly open under an hourglass, probe drones closing in as a shield gate slides shut
Illustration generated with ChatGPT
On this page
  1. What the WordPress 7.1.4 security release fixes
  2. How the WordPress upgrade race condition works
  3. Why an ordinary WordPress security plugin may miss it
  4. How serious is CVE-2026-119977?
  5. What Wordfence observed
  6. Which WordPress versions contain the fix?
  7. Check one site
  8. Check multiple sites
  9. Check automatic updates and disabled updates
  10. Block access to wp-content/upgrade before updating
  11. Nginx configuration
  12. Apache 2.4 and LiteSpeed using .htaccess
  13. Confirm the block returns 403
  14. Check access logs and WordPress for suspicious activity
  15. Search access logs
  16. Check for changes inside WordPress
  17. Verify WordPress core checksums
  18. Copy this checklist for each WordPress site
  19. What to do if your site is still vulnerable
  20. Frequently asked questions

The WordPress 7.1.4 security release fixes 22 vulnerabilities, including an updater flaw that needs no login and could allow remote code execution. Wordfence has recorded attack attempts against the flaw. Check your WordPress version, block public access to the upgrade folder, and review your server logs.

What the WordPress 7.1.4 security release fixes

WordPress released version 7.1.4 on October 28, 2026. The release addresses 22 security vulnerabilities across 17 advisories, according to WordPress's version documentation (opens in a new tab).

The most concerning fix addresses a race condition in the core updater, reported by Umut Bayram. A race condition occurs when an outcome depends on which of two processes finishes first. Here, an attacker must reach temporary files while WordPress is updating.

Successful exploitation could lead to remote code execution (RCE), meaning an attacker runs code on your server without needing a WordPress account.

The remaining fixes cover several areas:

  • Contributor accounts can trigger stored cross-site scripting (XSS), unsafe Interactivity API bindings, prototype pollution, and browser denial of service. Many of these issues require a Contributor or higher account. Some also need another user to open malicious content.
  • Author accounts can trigger stored XSS in the Interactivity Router through uploaded text files.
  • Editor accounts can trigger stored XSS in the personal data erasure requests screen.
  • Other access problems include unpublished Customizer changes being exposed to visitors without accounts, a Notes API permissions flaw affecting certain custom roles, and multisite username handling.
  • Fixes without a stated role requirement include unsafe preg_replace() replacements in the Image and Playlist blocks, XSS in the Categories block, and post content shadowing Script Module data through a matching element ID.

The Customizer changeset disclosure also requires no login. The updater flaw stands out because successful exploitation can execute code on the server.

The release also updates bundled root certificates following the eMudhra revocation.

How the WordPress upgrade race condition works

During a full-package WordPress core update, the updater extracts downloaded files into a temporary directory under:

wp-content/upgrade/

Before the fix, that staging directory had a predictable name. It was also commonly reachable through the public web server.

The old cleanup process removed the directory's index.php guard, which normally prevents directory listings.

For a few seconds, the server could expose a temporary copy of WordPress. That copy included wp-admin/setup-config.php, the installer that starts without the site's existing configuration.

An attacker who requests the installer at the right moment can interact with the staged WordPress copy and progress to PHP code execution.

According to Patchstack's analysis (opens in a new tab), the patch makes three relevant changes:

  1. Adds 16 random characters to the temporary directory name.
  2. Recreates and preserves the index.php guard.
  3. Excludes wp-config.php from files copied out of the working directory.

The window exists during full-package core updates, including unattended updates. The attacker must reach the vulnerable files before the updater removes them.

Why an ordinary WordPress security plugin may miss it

The malicious request targets a PHP file inside the staged copy. It does not load the site's normal WordPress installation.

A security plugin that initializes through the site's usual WordPress loading process may never see that request.

Wordfence's Extended Protection mode is an exception because its firewall can initialize before the requested PHP file. A web application firewall (WAF) filters incoming HTTP requests.

A server-level rule denying public access to wp-content/upgrade/ removes this particular web entry point regardless of whether WordPress loads.

This updater flaw is separate from the July 2026 wp2shell vulnerabilities, CVE-2026-60137 and CVE-2026-63030.

How serious is CVE-2026-119977?

The WordPress GitHub advisory (opens in a new tab) rates the updater issue Low and lists no known CVE.

Wordfence, acting as a CVE Numbering Authority (CNA), assigned CVE-2026-119977 and rated it 8.1, High, under CVSS 3.1.

CVSS is a standardized vulnerability severity scoring system. The Wordfence assessment includes AC:H, meaning high attack complexity.

Both assessments describe the same underlying flaw.

Wordfence emphasizes the potential impact of successful remote code execution. Patchstack also assigns high attack complexity but says it would not describe exploitation as practical.

That caution is based on the seconds-long window, the need for a full-package update, and the requirement that an attacker reach the staged installer in time.

What Wordfence observed

In its report (opens in a new tab), Wordfence states:

  • Its Premium, Care, and Response firewall rule went live on October 28 at 20:30 UTC.
  • The first matching request arrived nine minutes later.
  • During the first 21 hours, Wordfence recorded more than 18,500 requests targeting staged installer paths.
  • Two prominent sources repeatedly polled small groups of sites for roughly 14.5 hours.

Wordfence says some requests tested alternate directory layouts rather than exact vulnerable paths.

These figures measure requests and attempted exploitation. They do not establish successful code execution or the number of compromised sites.

The cited primary reports do not confirm successful compromises. That leaves the outcome of the observed attempts unknown.

Wordfence Free users are scheduled to receive the rule on November 27, 2026. Until then, free installations should not assume this particular rule is available.

Even with the rule installed, verify your core version and block the upgrade directory at the server.

Which WordPress versions contain the fix?

The WordPress security advisory lists the following patched versions. Each fixes the updater race within its corresponding branch.

WordPress branchFixed release
7.17.1.4
7.07.0.8
6.96.9.11
6.86.8.12
6.76.7.11
6.66.6.11
6.56.5.14
6.46.4.14
6.36.3.14
6.26.2.15
6.16.1.16
6.06.0.18
5.95.9.20
5.85.8.19
5.75.7.21
5.65.6.23
5.55.5.24
5.45.4.25
5.35.3.27
5.25.2.30
5.15.1.28
5.05.0.31
4.94.9.35
4.84.8.34
4.74.7.39

WordPress explicitly states that version 4.6 and earlier no longer receive security updates.

The older releases are courtesy backports. WordPress says only its newest version is actively supported, so treat an older patched branch as a temporary measure while planning an upgrade.

Check one site

Open your WordPress dashboard and go to Dashboard > Updates.

Confirm that the installed version matches the fixed release for your branch. If it is older, arrange the security update.

If you have SSH access and WP-CLI installed, run this from the WordPress installation directory:

wp core version

For a site in another directory:

wp core version --path=/var/www/example.com

Replace the example path with your installation's filesystem path.

Check multiple sites

For sites accessible through the same server account, use a list of their installation directories:

for site in \
  /var/www/site-one \
  /var/www/site-two \
  /var/www/site-three
do
  printf '%s: ' "$site"
  wp core version --path="$site"
done

Replace those paths with your actual installations. For separate servers, run the command over SSH on each server, or use WP-CLI's --ssh global parameter with configured remote access.

Each result must match the appropriate patched version in the table.

Multisite installations share the same WordPress core files. Check the network's core version, then audit individual site administrators separately.

Check automatic updates and disabled updates

WordPress says eligible installations begin automatic background updates. That does not guarantee a particular site completed the process successfully.

A failed download, filesystem permissions problem, hosting restriction, or intentionally disabled update can leave an older version installed.

If core updates are disabled, arrange a manual or host-managed update after applying the server-level block.

For managed hosting, ask the provider to confirm the installed build, successful completion, and the protection applied to temporary upgrade files. Request confirmation for every production environment, including staging sites reachable from the internet.

Block access to wp-content/upgrade before updating

If your site remains unpatched, establish the web-server restriction first.

The update to the fixed release may itself begin under vulnerable updater code. Blocking the directory beforehand reduces exposure during that final update.

Keep filesystem access available to WordPress. These rules block incoming web requests without preventing WordPress from writing temporary files.

Nginx configuration

Add the following location inside the relevant server block:

location = /wp-content/upgrade {
    return 403;
}

location ^~ /wp-content/upgrade/ {
    return 403;
}

The ^~ prefix prevents a generic regex PHP location, such as location ~ \.php$, from taking precedence over requests within this directory. The exact-match location covers the directory path without a trailing slash.

For a subdirectory WordPress installation, adjust the URL prefix accordingly.

Use the Nginx location directive documentation (opens in a new tab) when checking your existing configuration.

After editing, test the configuration and reload the server:

sudo nginx -t
sudo systemctl reload nginx

These commands assume Nginx runs under systemd. Check with your provider if your server uses a different process manager.

Apache 2.4 and LiteSpeed using .htaccess

For an Apache installation using mod_rewrite, place this rule near the beginning of the site's root .htaccess, before WordPress's standard rewrite rules:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^wp-content/upgrade(?:/|$) - [F,END]
</IfModule>

Apache's [F] flag denies access with HTTP 403. [END] ends further per-directory rewrite processing.

This example assumes WordPress sits at the site's URL root and that Apache permits rewrite rules through .htaccess. If mod_rewrite is unavailable, the rule inside IfModule will not apply.

For hosts that use LiteSpeed, confirm that their .htaccess implementation supports the rule and test the public response.

An alternative for Apache is a file named .htaccess inside wp-content/upgrade/:

Require all denied

This requires Apache 2.4 authorization support and permission to use the directive in .htaccess.

The folder-local approach has a limitation: the old updater cleanup can delete files inside wp-content/upgrade/. Its restriction may disappear during the exact window you need to protect.

Prefer the root .htaccess rule or a restriction in the server's virtual host configuration. The root rule survives cleanup of the upgrade directory.

Refer to Apache's rewrite documentation (opens in a new tab) when checking server permissions and rule behavior.

Confirm the block returns 403

After applying the rule, request a nonexistent PHP path beneath the protected directory:

curl -sS -o /dev/null -w '%{http_code}\n' \
  https://example.com/wp-content/upgrade/security-check.php

Example output (illustrative):

403

Replace the domain with your own.

A 404 response does not prove the rule works because the requested file does not exist. A 301 or 302 may indicate a redirect before the block is reached.

Test the final public hostname and any alternative route that reaches the origin server. If your CDN handles the request first, check that the origin also denies access.

Never create a PHP test file in the upgrade directory. The nonexistent path is sufficient to test a path-based denial rule when correctly configured.

Check access logs and WordPress for suspicious activity

Start with the server's access logs, which record incoming HTTP requests.

Review the period beginning before October 28 if your site was exposed or updated recently. Extend the review to include earlier full core updates if records are available.

Search access logs

On a server where the access log uses a conventional Nginx or Apache format, run:

grep -Ei '/wp-content/upgrade/[^ "]*\.php' \
  /var/log/nginx/access.log

For Apache, substitute your actual access-log filename.

To search for installer requests anywhere:

grep -Ei '(/|%2f)setup-config\.php' \
  /var/log/nginx/access.log

Check archived and rotated logs too. Depending on your host, these may be separate files or compressed archives.

Look closely at repeated requests, timestamp clusters around core updates, and paths containing wp-admin/setup-config.php below wp-content/upgrade/.

A request is evidence of probing. An HTTP 200 response deserves investigation, but a status code alone does not prove code execution.

The installer can also be requested during legitimate fresh installations. Compare suspicious entries with known maintenance activity.

Check for changes inside WordPress

List administrator users:

wp user list --role=administrator \
  --fields=ID,user_login,user_email,user_registered

Review each administrator against your known team. For multisite, also check network super administrators in Network Admin.

List installed plugins:

wp plugin list

Investigate unfamiliar plugins, particularly anything added around suspicious request times.

Search for PHP files in the temporary upgrade area:

find wp-content/upgrade -type f -name '*.php'

Run this from your WordPress installation directory.

Unexpected PHP files elsewhere in writable directories also deserve review. Do not delete unfamiliar files before establishing whether they belong to a legitimate deployment or plugin.

Verify WordPress core checksums

Run:

wp core verify-checksums

WP-CLI compares installed core files against the published checksums for the installed WordPress version.

A successful result means the checked core files match their expected contents. It does not prove that the rest of the site is clean.

A malicious plugin, altered theme, compromised user account, or additional file outside the checked core paths may remain undetected.

Investigate checksum mismatches. If the site uses a localized WordPress package, supply the appropriate locale when required.

Copy this checklist for each WordPress site

Record one copy per installation. Agencies should track the site hostname, hosting provider, and person responsible alongside it.

CheckHow to checkExpected resultDone
WordPress versionDashboard > Updates or wp core versionMatches the fixed version for its branch[ ]
Server blockInspect Nginx or Apache configurationPublic access to the upgrade directory is denied[ ]
HTTP 403 testUse the curl command aboveReturns 403 from the public hostname[ ]
Access logsSearch for PHP requests under wp-content/upgrade/No unexplained successful access or suspicious activity left uninvestigated[ ]
Administrator accountsDashboard > Users or wp user listEvery administrator is recognized and authorized[ ]
Plugin inventoryReview installed plugins using WP-CLIEvery installed plugin has a known purpose and owner[ ]
Core checksumsRun wp core verify-checksumsCore files verify, or every mismatch is explained[ ]

Save the evidence with the site's maintenance record. Record the installed version, the date of the HTTP test, and any log entries that need further investigation.

A clean checklist today does not establish whether an earlier compromise occurred. Limited log retention, deleted evidence, and changes outside core files can prevent detection.

What to do if your site is still vulnerable

If you find an unpatched version, apply the server restriction and verify that it returns 403. Then install the fixed release and confirm the installed version.

For WordPress 4.6 and earlier, arrange a migration to a maintained version. There is no corresponding security backport for those branches.

Keep the server restriction after updating. It limits unnecessary public access to temporary installation files during future updates.

For broader site protection beyond this issue, use the WordPress security hardening checklist.

If your review reveals an unknown administrator, unexplained PHP files, modified core files, or other convincing signs of compromise, preserve the relevant logs and begin a cleanup. The guide to cleaning a hacked WordPress site covers that process.

If you need help investigating or restoring a compromised installation, the WordPress malware removal service offers a free assessment followed by a fixed-price single-site cleanup.

Frequently asked questions

Is WordPress 7.1.4 safe to install?

WordPress released 7.1.4 specifically to fix security vulnerabilities, including the updater race. Install it, but first restrict public access to wp-content/upgrade/ if your server allows it. The old updater code can still run while the security update is being installed.

Do I need to update if WordPress automatic updates are enabled?

Yes, you must verify the installed version. WordPress automatic updates can fail or be restricted by hosting settings. Check Dashboard > Updates and confirm that the installed version matches the fixed release for your branch.

Does Wordfence Free protect against CVE-2026-119977?

Wordfence says its free firewall rule is scheduled for November 27, 2026. As of November 1, that rule has not reached Free users under the published schedule. Update WordPress and restrict web access to the temporary upgrade directory instead of relying on a delayed firewall rule.

Can hackers exploit the WordPress updater flaw without logging in?

Yes, the vulnerable path requires no WordPress account. Successful exploitation requires a full-package core update, a reachable temporary installer, and precise timing. Wordfence has documented attempts, but its published request counts do not prove successful compromise.

Does a successful WordPress checksum check prove my site was not hacked?

No. Core checksum verification checks whether the relevant WordPress files match published versions. It does not verify administrator legitimacy, plugin behavior, all uploaded files, or the site's earlier activity. Combine it with a user review, plugin inventory, and access-log inspection.

How this article was made: drafted with AI assistance from a researched brief, then checked against primary documentation before publishing.

Message

Ask me about your site

Tell me what is wrong or what you need built. I reply by email.

Prefer email? info@hamzaahmadaslam.com

Enjoyed this? Get the next article by email.

Occasional, useful posts. No spam, and you can unsubscribe anytime.

  • Decompressor machine jammed by a malformed data capsule, its small buffer tray overflowing with glowing bytesSecurity

    11 min read

    HTTP2Shell (CVE-2026-111497): WordPress and Next.js exposure

    HTTP2Shell is CVE-2026-111497, a flaw in Google's Brotli decoder that can corrupt memory when software decompresses malicious data. Also called Node2Shell and Broccoli2Shell, it has fixes in Node.js 22.23.4, 24.22.1 and 26.12.1, plus Brotli 1.0.10, 1.1.1 and 1.2.1.

    • Security
    • WordPress
    • Incident Response
    Read article
  • Illustration of files moving along a server upload rail past a progress meter, with a switch turned off and a shield lock on the serverSecurity

    11 min read

    PHP session upload progress vulnerability after the PHP2Shell patch

    The PHP session upload progress vulnerability remains open after the PHP2Shell patch. On 23 October 2026, php.net warned about an unlikely remote code execution path tracked as CVE-2026-115560; the 21 October security releases still fix the two original PHP2Shell vulnerabilities.

    • PHP
    • Security
    • WordPress
    Read article
  • Robotic arm fitting a fresh gear into a brass engine while the cracked old gear sits on a tray under a warning lampSecurity

    14 min read

    PHP critical security update: PHP2Shell leak and fixes

    PHP released a PHP critical security update on Wednesday, October 21, 2026, for two vulnerabilities known as PHP2Shell that allow remote code execution without authentication. The fixed versions are PHP 8.5.12, 8.4.27, 8.3.36 and 8.2.35.

    • PHP
    • Security
    • WordPress
    Read article