{"id":3914,"date":"2026-11-04T06:48:33","date_gmt":"2026-11-04T14:48:33","guid":{"rendered":"https:\/\/cyber.mag212.com\/cve-2026-119977-wordpress-core-update-race-cisa-kev\/"},"modified":"2026-11-04T06:48:33","modified_gmt":"2026-11-04T14:48:33","slug":"cve-2026-119977-wordpress-core-update-race-cisa-kev","status":"publish","type":"post","link":"https:\/\/cyber.mag212.com\/fr\/cve-2026-119977-wordpress-core-update-race-cisa-kev\/","title":{"rendered":"CVE-2026-119977\u00a0: La vuln\u00e9rabilit\u00e9 de mise \u00e0 jour du noyau WordPress dans CISA KEV, expliqu\u00e9e, avec les versions corrig\u00e9es pour chaque branche"},"content":{"rendered":"<p class=\"wp-block-paragraph\"><strong>CVE-2026-119977<\/strong> is a race condition in the way WordPress core installs its own updates. For the few seconds a full-package core update runs, a copy of the WordPress installer sits in a predictable, web-reachable folder. An unauthenticated attacker who requests it at the right moment can reach remote code execution. WordPress fixed it in <strong>7.1.4<\/strong> on October 28, 2026, with backports for every branch back to 4.7. On November 3, CISA added it to its Known Exploited Vulnerabilities (KEV) catalog, citing evidence of active exploitation.<\/p>\n\n<p class=\"wp-block-paragraph\">This guide explains how the race works, which version fixes your branch, the one web-server rule to add <em>before<\/em> you update, and how to check whether a site was hit.<\/p>\n\n<h2 class=\"wp-block-heading\">Key facts<\/h2>\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Item<\/th><th>Detail<\/th><\/tr><\/thead><tbody><tr><td>CVE<\/td><td>CVE-2026-119977 (CWE-367, time-of-check to time-of-use race)<\/td><\/tr><tr><td>Affected<\/td><td>WordPress core 4.7.0 through 7.1.3, every branch<\/td><\/tr><tr><td>Fixed<\/td><td>7.1.4, plus a backport for every branch back to 4.7 (table below)<\/td><\/tr><tr><td>Severity<\/td><td>WordPress rates it Low; Wordfence, the CVE Numbering Authority, scores it CVSS 3.1 8.1 (High, high attack complexity)<\/td><\/tr><tr><td>Exploitation<\/td><td>Listed in CISA KEV on November 3, 2026, with forensic triage flagged<\/td><\/tr><tr><td>Federal deadline<\/td><td>November 6, 2026 (BOD 26-04)<\/td><\/tr><tr><td>Login needed?<\/td><td>No<\/td><\/tr><\/tbody><\/table><\/figure>\n\n<h2 class=\"wp-block-heading\">What went wrong<\/h2>\n\n<p class=\"wp-block-paragraph\">A full-package core update downloads the new release, unpacks it into a folder under <code>wp-content\/upgrade\/<\/code>, copies the files into place, then cleans up. According to the WordPress advisory, that folder had a predictable name and sat inside the web-served upgrade directory. Patchstack&#8217;s analysis adds two details: the folder name came from the package itself, and the cleanup routine deleted the <code>index.php<\/code> that normally stops directory listing.<\/p>\n\n<p class=\"wp-block-paragraph\">So for a few seconds a complete WordPress copy, including <code>wp-admin\/setup-config.php<\/code>, was browsable at a guessable path. An attacker who keeps polling that path can hit the installer mid-update and run it against a database the attacker controls, which leads to PHP running as the web-server user.<\/p>\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1598\" height=\"703\" src=\"https:\/\/cyber.mag212.com\/wp-content\/uploads\/2026\/11\/mag212-2026-11-04-fig-wp.jpg\" alt=\"Diagram of the WordPress upgrade-window race: update steps, the brief vulnerable window, attacker polling of the staged installer, the 7.1.4 fix and a web-server deny rule\" class=\"wp-image-3897\" srcset=\"https:\/\/cyber.mag212.com\/wp-content\/uploads\/2026\/11\/mag212-2026-11-04-fig-wp.jpg 1598w, https:\/\/cyber.mag212.com\/wp-content\/uploads\/2026\/11\/mag212-2026-11-04-fig-wp-300x132.jpg 300w, https:\/\/cyber.mag212.com\/wp-content\/uploads\/2026\/11\/mag212-2026-11-04-fig-wp-1024x450.jpg 1024w, https:\/\/cyber.mag212.com\/wp-content\/uploads\/2026\/11\/mag212-2026-11-04-fig-wp-768x338.jpg 768w, https:\/\/cyber.mag212.com\/wp-content\/uploads\/2026\/11\/mag212-2026-11-04-fig-wp-1536x676.jpg 1536w, https:\/\/cyber.mag212.com\/wp-content\/uploads\/2026\/11\/mag212-2026-11-04-fig-wp-18x8.jpg 18w\" sizes=\"auto, (max-width: 1598px) 100vw, 1598px\" \/><figcaption class=\"wp-element-caption\">The upgrade-window race. Amber marks the vulnerable window; red dashed arrows show the attacker path described in the advisory and research. Timings are illustrative. MAG212 CYBER original diagram.<\/figcaption><\/figure>\n\n<p class=\"wp-block-paragraph\">Version 7.1.4 closes the gap three ways: it appends 16 random characters to the staging folder name, keeps <code>index.php<\/code> in place, and never copies <code>wp-config.php<\/code> out of the working directory.<\/p>\n\n<h2 class=\"wp-block-heading\">How serious is it in practice?<\/h2>\n\n<p class=\"wp-block-paragraph\">The attack needs three things at once: a full-package core update must be running, the staging folder must be reachable over HTTP, and the attacker&#8217;s request must land inside a window measured in seconds. That is why the vendor rates it Low and the CNA marks attack complexity as High. But the window reopens on <em>every<\/em> such update, including unattended background updates. Wordfence reported automated polling for the staging path within hours of the release, and CISA now lists it as exploited. Treat it as urgent.<\/p>\n\n<p class=\"wp-block-paragraph\">One subtlety matters: <strong>the update that installs the fix runs under the old, vulnerable code<\/strong>. That is why researchers advise blocking the staging directory before you update.<\/p>\n\n<h2 class=\"wp-block-heading\">Fixed version for every branch<\/h2>\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Branch<\/th><th>Affected<\/th><th>Fixed in<\/th><\/tr><\/thead><tbody><tr><td>7.1<\/td><td>7.1.0 \u2013 7.1.3<\/td><td>7.1.4<\/td><\/tr><tr><td>7.0<\/td><td>7.0.0 \u2013 7.0.7<\/td><td>7.0.8<\/td><\/tr><tr><td>6.9<\/td><td>6.9.0 \u2013 6.9.10<\/td><td>6.9.11<\/td><\/tr><tr><td>6.8<\/td><td>6.8.0 \u2013 6.8.11<\/td><td>6.8.12<\/td><\/tr><tr><td>6.7<\/td><td>6.7.0 \u2013 6.7.10<\/td><td>6.7.11<\/td><\/tr><tr><td>6.6<\/td><td>6.6.0 \u2013 6.6.10<\/td><td>6.6.11<\/td><\/tr><tr><td>6.5<\/td><td>6.5.0 \u2013 6.5.13<\/td><td>6.5.14<\/td><\/tr><tr><td>6.4<\/td><td>6.4.0 \u2013 6.4.13<\/td><td>6.4.14<\/td><\/tr><tr><td>6.3<\/td><td>6.3.0 \u2013 6.3.13<\/td><td>6.3.14<\/td><\/tr><tr><td>6.2<\/td><td>6.2.0 \u2013 6.2.14<\/td><td>6.2.15<\/td><\/tr><tr><td>6.1<\/td><td>6.1.0 \u2013 6.1.15<\/td><td>6.1.16<\/td><\/tr><tr><td>6.0<\/td><td>6.0.0 \u2013 6.0.17<\/td><td>6.0.18<\/td><\/tr><tr><td>5.0 \u2013 5.9<\/td><td>see advisory<\/td><td>5.9.20, 5.8.19, 5.7.21, 5.6.23, 5.5.24, 5.4.25, 5.3.27, 5.2.30, 5.1.28, 5.0.31<\/td><\/tr><tr><td>4.7 \u2013 4.9<\/td><td>see advisory<\/td><td>4.9.35, 4.8.34, 4.7.39<\/td><\/tr><tr><td>4.6 and older<\/td><td>\u2014<\/td><td>No fix: migrate<\/td><\/tr><\/tbody><\/table><\/figure>\n\n<h2 class=\"wp-block-heading\">Step 1: block the staging folder before you update<\/h2>\n\n<p class=\"wp-block-paragraph\">Deny HTTP access to <code>\/wp-content\/upgrade\/<\/code> at the web server or CDN. WordPress writes to this folder through the filesystem, not over HTTP, so updates keep working. A security plugin running inside PHP will not stop this attack: Patchstack notes the staged copy loads its own files, so the site&#8217;s PHP firewall never runs for that request.<\/p>\n\n<pre class=\"wp-block-code\"><code># NGINX: inside the site's server { } block\nlocation ^~ \/wp-content\/upgrade\/ {\n    deny all;\n}\nsudo nginx -t &amp;&amp; sudo systemctl reload nginx\n\n# Apache 2.4: in the VirtualHost (not a file inside upgrade\/)\n&lt;Directory \"SITE_DOCROOT\/wp-content\/upgrade\"&gt;\n    Require all denied\n&lt;\/Directory&gt;\nsudo apachectl configtest &amp;&amp; sudo systemctl reload apache2<\/code><\/pre>\n\n<p class=\"wp-block-paragraph\">Put the Apache rule in the virtual host, not in an <code>.htaccess<\/code> inside the upgrade folder: before 7.1.4, cleanup deleted files there. Replace <code>SITE_DOCROOT<\/code> with your document root, and adjust the path if WordPress lives in a subdirectory. On managed hosting, ask your host to confirm the block at its web or CDN layer.<\/p>\n\n<h2 class=\"wp-block-heading\">Step 2: update and verify<\/h2>\n\n<p class=\"wp-block-paragraph\">Install 7.1.4 or your branch&#8217;s fixed release, then confirm with WP-CLI (run as the site&#8217;s system user from the WordPress root):<\/p>\n\n<pre class=\"wp-block-code\"><code>wp core version                       # expect the fixed release for your branch\nwp core verify-checksums              # compares core files with WordPress.org\nwp user list --role=administrator --fields=ID,user_login,user_registered\nfind wp-content\/upgrade -mindepth 1 -maxdepth 3 -ls   # normally only index.php\ncurl -sI https:\/\/SITE\/wp-content\/upgrade\/              # expect 403<\/code><\/pre>\n\n<h2 class=\"wp-block-heading\">How to tell whether a site was hit<\/h2>\n\n<ul class=\"wp-block-list\"><li><strong>Web logs since October 28:<\/strong> requests for PHP files under <code>\/wp-content\/upgrade\/<\/code>, especially <code>setup-config.php<\/code>, and bursts of repeated polling from one source. A <strong>200<\/strong> response to one of these is a red flag. A 404 outside an update window is normal and proves nothing.<\/li><li><strong>Site state:<\/strong> administrator accounts, plugins or PHP files nobody on your team created.<\/li><li><strong>Timing:<\/strong> line up suspicious requests with your core update times. Hits outside an update window are probably scanning, not a successful race.<\/li><\/ul>\n\n<pre class=\"wp-block-code\"><code>sudo zgrep -E '\/wp-content\/upgrade\/[^\" ]*\\.php' \/var\/log\/nginx\/access.log*<\/code><\/pre>\n\n<p class=\"wp-block-paragraph\">If you find signs of compromise, preserve logs, a file listing with timestamps and a database export before cleaning. Then remove unknown administrators and files, rebuild from known-good core and plugins if needed, and rotate database credentials, WordPress salts and hosting or SFTP passwords.<\/p>\n\n<p class=\"wp-block-paragraph\"><em>Commands were checked against WP-CLI and web-server documentation but not run against live systems for this article. Use them only on sites you are authorized to manage.<\/em><\/p>\n\n<h2 class=\"wp-block-heading\">Frequently asked questions<\/h2>\n\n<h3 class=\"wp-block-heading\">Which WordPress version fixes CVE-2026-119977?<\/h3>\n\n<p class=\"wp-block-paragraph\">7.1.4 on the 7.1 branch. Older branches have their own fixed releases, such as 7.0.8, 6.9.11 and 6.8.12, all the way down to 4.7.39. Sites on 4.6 or older get no fix.<\/p>\n\n<h3 class=\"wp-block-heading\">Is CVE-2026-119977 being exploited?<\/h3>\n\n<p class=\"wp-block-paragraph\">Yes. CISA added it to the KEV catalog on November 3, 2026, based on evidence of active exploitation. Public sources do not say how many sites were compromised.<\/p>\n\n<h3 class=\"wp-block-heading\">Does my security plugin protect me?<\/h3>\n\n<p class=\"wp-block-paragraph\">Not on its own. The staged installer loads its own files, so a PHP-level firewall plugin does not run for that request. Block the folder at the web server or CDN.<\/p>\n\n<h3 class=\"wp-block-heading\">Why does the vendor rate it Low if CISA lists it as exploited?<\/h3>\n\n<p class=\"wp-block-paragraph\">The vendor&#8217;s rating reflects how hard the race is to win. CISA&#8217;s listing reflects evidence that attackers are trying it in the wild. Prioritize by the exploitation evidence.<\/p>\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n<div class=\"wp-block-buttons is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-fe48e5de wp-block-buttons-is-layout-flex\"><div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/cyber.mag212.com\/when-the-update-becomes-the-attack-mag212-cyber-daily-november-4-2026\/\">Read today&#8217;s full MAG212 CYBER Daily (free) \u2192<\/a><\/div><div class=\"wp-block-button is-style-outline is-style-outline--1\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/cyber.mag212.com\/subscribe-free\/\">Subscribe free<\/a><\/div><\/div>\n\n<h2 class=\"wp-block-heading\">Sources<\/h2>\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/github.com\/WordPress\/wordpress-develop\/security\/advisories\/GHSA-4w3m-c66w-69mg\" target=\"_blank\" rel=\"noreferrer noopener\">WordPress security advisory GHSA-4w3m-c66w-69mg (Oct 29, 2026)<\/a><\/li><li><a href=\"https:\/\/www.cisa.gov\/news-events\/alerts\/2026\/11\/03\/cisa-adds-one-known-exploited-vulnerability-catalog\" target=\"_blank\" rel=\"noreferrer noopener\">CISA: Adds One Known Exploited Vulnerability to Catalog (Nov 3, 2026)<\/a><\/li><li><a href=\"https:\/\/www.cisa.gov\/known-exploited-vulnerabilities-catalog\" target=\"_blank\" rel=\"noreferrer noopener\">CISA Known Exploited Vulnerabilities Catalog<\/a><\/li><li><a href=\"https:\/\/patchstack.com\/articles\/wordpress-7-1-4-security-release\/\" target=\"_blank\" rel=\"noreferrer noopener\">Patchstack: WordPress 7.1.4 Security Release<\/a><\/li><li><a href=\"https:\/\/www.rescana.com\/post\/wordpress-core-7-1-4-upgrade-staging-race-rce\" target=\"_blank\" rel=\"noreferrer noopener\">Rescana: WordPress Core 7.1.4 upgrade-window race analysis<\/a><\/li><\/ul>\n\n<h2 class=\"wp-block-heading\">Related coverage on MAG212 CYBER<\/h2>\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/cyber.mag212.com\/when-the-update-becomes-the-attack-mag212-cyber-daily-november-4-2026\/\">When the Update Becomes the Attack: MAG212 CYBER Daily, 4 November 2026<\/a><\/li><li><a href=\"https:\/\/cyber.mag212.com\/cpguard-update-channel-hijacked-linux-servers\/\">cPGuard Update Channel Hijacked<\/a><\/li><li><a href=\"https:\/\/cyber.mag212.com\/apt29-watering-hole-outdated-iphone-android-exploits\/\">APT29 Watering Holes Target Outdated Phones<\/a><\/li><li><a href=\"https:\/\/cyber.mag212.com\/3am-ransomware-uk-school-veeam-domain-trusts\/\">3AM Ransomware at a UK School Estate<\/a><\/li><li><a href=\"https:\/\/cyber.mag212.com\/synology-c3rb3r-ransomware-dsm-builds\/\">Synology C3RB3R Ransomware: Safe DSM Builds<\/a><\/li><li><a href=\"https:\/\/cyber.mag212.com\/drupal-commerce-core-cve-2026-118539-exploited\/\">Drupal Commerce Core CVE-2026-118539 Exploited<\/a><\/li><li><a href=\"https:\/\/cyber.mag212.com\/magazine-library\/\">Every issue in the Magazine Library<\/a><\/li><\/ul>\n\n","protected":false},"excerpt":{"rendered":"<p>CVE-2026-119977 lets an unauthenticated attacker reach the WordPress installer during the seconds a core update runs. CISA added it to KEV on November 3. Here are the fixed versions for every branch, the web-server rule to add first, and how to check for compromise.<\/p>","protected":false},"author":1,"featured_media":3909,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[19,14],"tags":[62,174,31,175],"class_list":["post-3914","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-critical-cves","category-vulnerabilities","tag-cisa-kev","tag-cve-2026-119977","tag-incident-response","tag-wordpress"],"_links":{"self":[{"href":"https:\/\/cyber.mag212.com\/fr\/wp-json\/wp\/v2\/posts\/3914","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cyber.mag212.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cyber.mag212.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cyber.mag212.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/cyber.mag212.com\/fr\/wp-json\/wp\/v2\/comments?post=3914"}],"version-history":[{"count":0,"href":"https:\/\/cyber.mag212.com\/fr\/wp-json\/wp\/v2\/posts\/3914\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cyber.mag212.com\/fr\/wp-json\/wp\/v2\/media\/3909"}],"wp:attachment":[{"href":"https:\/\/cyber.mag212.com\/fr\/wp-json\/wp\/v2\/media?parent=3914"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cyber.mag212.com\/fr\/wp-json\/wp\/v2\/categories?post=3914"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cyber.mag212.com\/fr\/wp-json\/wp\/v2\/tags?post=3914"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}