WordPress Core CVE-2026-119977 upgrade race condition listed in CISA KEV as exploited
CISA lists CVE-2026-119977 as known exploited. It is a WordPress Core TOCTOU race during full-package core upgrades that could allow unauthenticated code execution, and the federal due date is 2026-11-06. Today: inventory WordPress sites, patch to the fixed release, and hunt web logs for requests into upgrade staging paths.
Triage: CISA confirms exploitation of a WordPress Core flaw that could allow unauthenticated code execution, with a 2026-11-06 due date [S1].
The CISA KEV catalog, a primary government source, confirms exploitation [S1][S2]. Version range and fixed release come from pipeline exposure data that cites advisories not among S1–S3.
Changed since version 2
- what_happened and verdict now state the flaw is a TOCTOU race abusing predictable web-accessible staging paths, and use 'could allow' code execution as the source does [S1].
- Added eradicate and reenter_when sections. The eradicate steps are generic, because the sources describe no persistence.
What happened
- CISA added CVE-2026-119977 to the KEV catalog on 2026-11-03, with a federal due date of 2026-11-06 [S1][S2].
- The flaw is a TOCTOU race in WordPress Core. It could let unauthenticated attackers execute code during full-package core upgrades [S1].
- The race abuses predictable, web-accessible staging paths created during the upgrade [S1].
- BOD 26-04 requires federal agencies to perform forensic triage for this entry [S1].
- The sources reviewed give no attacker behaviour, payloads or IoCs [S1][S3].
Timeline
| 2026-10-31 | CVE published in NVD (per pipeline coverage data) |
| 2026-11-03 | Added to CISA KEV S2 |
| 2026-11-06 | Federal remediation due date S1 |
Detect
Web requests into WordPress upgrade staging paths · Web server / reverse proxy / WAF access logs
index=* "/wp-content/upgrade" | rex field=_raw "(?<req_path>/wp-content/upgrade[^\s\"?]*)" | search req_path="*.php*" | stats count earliest(_time) as first_seen latest(_time) as last_seen values(status) as status by host, req_path | convert ctime(first_seen) ctime(last_seen)
FROM logs-* | WHERE url.path LIKE "*/wp-content/upgrade*" AND url.path LIKE "*.php*" | STATS count = COUNT(*), first_seen = MIN(@timestamp), last_seen = MAX(@timestamp), status = VALUES(http.response.status_code) BY host.name, url.path
A hit means: A client requested a PHP file in the upgrade staging area. This matches the predictable staging-path condition [S1]. The search assumes the default WordPress directory, because the sources do not name the path. A 200 response to an external client during an upgrade window warrants forensic triage.
Shell or download tools spawned by the web server or PHP process · EDR / Sysmon / auditd process creation on WordPress hosts
index=* (parent_process_name="php*" OR parent_process_name="httpd" OR parent_process_name="apache2" OR parent_process_name="nginx" OR parent_process_name="w3wp.exe") (process_name="sh" OR process_name="bash" OR process_name="dash" OR process_name="curl" OR process_name="wget" OR process_name="python*" OR process_name="perl" OR process_name="nc" OR process_name="cmd.exe" OR process_name="powershell.exe") | stats count earliest(_time) as first_seen values(process) as cmdline by host, parent_process_name, process_name
FROM logs-* | WHERE (process.parent.name LIKE "php*" OR process.parent.name IN ("httpd", "apache2", "nginx", "w3wp.exe")) AND (process.name IN ("sh", "bash", "dash", "curl", "wget", "perl", "nc", "cmd.exe", "powershell.exe") OR process.name LIKE "python*") | STATS count = COUNT(*), first_seen = MIN(@timestamp), cmdline = VALUES(process.command_line) BY host.name, process.parent.name, process.nameA hit means: The web server executed a command. This is consistent with the code execution the KEV entry describes [S1]. Correlate the time with core upgrade windows and with Hunt 1 hits.
Verify
- True positive: an external client fetches or executes a .php file under the staging path while a core upgrade is running. Look for follow-on activity such as new PHP files, web-server child processes or new admin users.
- Compare hit times with actual core upgrade times in WordPress or host logs. The race exists only during full-package upgrades [S1].
- Benign look-alike: WordPress itself writing and extracting files in the upgrade directory during legitimate updates.
- Benign look-alike: scanners and uptime checks probing wp-content paths. These typically return 403 or 404 and show no execution.
- Benign look-alike: cron, WP-CLI or backup plugins spawning shell or PHP subprocesses.
Scope
Affected
- WordPress Core sites vulnerable to CVE-2026-119977 [S1]. Pipeline exposure data gives 4.7.0 through 7.1.3, citing a Wordfence advisory that is not among S1–S3.
Only if
- A full-package core upgrade is performed, which creates web-accessible staging paths during the upgrade window [S1].
Not affected if
- Core is at a fixed version: 7.1.4 or later per pipeline exposure data, which cites a vendor release note not among S1–S3.
Fixed in: 7.1.4 (per pipeline exposure data; confirm against the WordPress release note)
Enumerate
- All WordPress instances and their core versions, including marketing, campaign, and third-party or agency-hosted sites.
- Which sites ran full-package core upgrades, and when. Check auto-update logs and hosting-panel history.
- Whether the staging directory is reachable over the web on each site.
- Admin accounts, application passwords and API keys on each site.
- Secrets stored on WordPress hosts, such as wp-config.php database credentials and cloud keys.
Contain
- Preserve evidence first: export web access logs and snapshot wp-content/upgrade and the web root. Deleting staging contents cannot be undone.
- Patch to the fixed release. Run the upgrade with the site restricted (maintenance mode, IP allowlist or WAF deny on staging paths) if feasible. This precaution is derived from the mechanism in [S1]; it is not vendor guidance.
- Until patched, avoid unattended full-package core upgrades on exposed sites, or block web access to the staging directory.
- Isolate any site with a confirmed hit from internal networks and databases pending forensic triage, as BOD 26-04 requires for federal agencies [S1].
Eradicate
- Remove any unknown PHP files and webshells found in staging or web directories. The sources give no specific persistence artefacts.
- Remove unknown admin users and rotate wp-config.php database credentials, application passwords and keys on any affected host.
- Reinstall core from a verified package if checksums do not match.
Recover
- Before restoring traffic, confirm the core version is fixed, checksums match, and no unknown PHP files or admin accounts remain.
- Monitor web logs for staging-path requests and web-server child processes for at least the next upgrade cycle.
- Watch outbound connections from WordPress hosts for unexpected destinations.
Re-enter the loop when
- A vendor or researcher publishes IoCs, payloads or the exact staging path.
- The WordPress advisory changes the affected range or fixed version.
- Exploitation is reported outside upgrade windows, or in plugin and theme updates.
- A hit appears on a site not in the original inventory.
Debrief
- Record each WordPress site with its version, upgrade times and hunt results.
- Record the time from KEV listing (2026-11-03) to patch for each site.
- Gap: no source reviewed gives the exact staging path, exploit timing or IoCs.
- Gap: the version range and fixed version come from advisories not among S1–S3.
- Gap: whether the inventory covered third-party or agency-hosted sites.
Detection coverage — checked automatically
| Category | Source | Status |
|---|---|---|
| Vendor | Impacted vendor / CERT advisory | published — primary source among the thread's sources: https://www.cisa.gov/known-exploited-vulnerabilities-catalog |
| Government | CISA KEV · CVE-2026-119977 | published — listed 2026-11-03, federal due 2026-11-06 |
| Reference | NVD · CVE-2026-119977 | published — published 2026-10-31, CVSS 3.1 8.1 |
| VM scanners | Qualys · CVE-2026-119977 | published — ThreatPROTECT: CISA Warns of WordPress Vulnerability Exploited in the Wild (CVE-2026-119977) |
| VM scanners | Rapid7 · CVE-2026-119977 | published — InsightVM coverage stated |
| VM scanners | Tenable · CVE-2026-119977 | published — 26 plugins: 115791 WordPress 7.1.x < 7.1.4 Multiple Vulnerabilities; 115794 WordPress 6.8.x < 6.8.12 Multiple Vulnerabilities; 115806 WordPress 5.6.x < 5.6.23 Multiple Vulnerabilities; 115808 WordPress 5.4.x < 5.4.25 Multiple Vulnerabilities; … |
| EDR / endpoint VM | CrowdStrike blog | nothing found — no post names it among the feed's 10 newest items |
| EDR / endpoint VM | Microsoft Security blog | nothing found — no post names it among the feed's 10 newest items |
| EDR / endpoint VM | SentinelOne blog | nothing found — no post names it among the feed's 10 newest items |
| EDR / endpoint VM | SentinelOne Labs | nothing found — no post names it among the feed's 10 newest items |
| WAF / edge | Akamai blog | nothing found — no post names it among the feed's 1185 newest items |
| WAF / edge | Cloudflare WAF managed-ruleset changelog | nothing found — no post names it among the feed's 139 newest items |
| Cloud / container | Wiz blog | nothing found — no post names it among the feed's 719 newest items |
| Linux distro errata | Debian tracker · CVE-2026-119977 | published — tracker entry with fixed versions |
| Linux distro errata | Red Hat · CVE-2026-119977 | nothing found — entry exists, no errata yet |
| IDS / research | Cisco Talos blog | nothing found — no post names it among the feed's 15 newest items |
| IDS / research | Emerging Threats open · CVE-2026-119977 | nothing found — no open rule names it (exploit, web_server, web_specific_apps sets) |
| Detection content | Elastic detection rules | published — 3 files name WordPress: rules/linux/persistence_webserver_php_file_creation_in_wordpress_plugin_dir.toml, rules/_deprecated/defense_evasion_code_injection_conhost.toml, rules/macos/privilege_escalation_user_added_to_admin_group.toml |
| Detection content | Elastic Security Labs | nothing found — no post names it among the feed's 102 newest items |
| Detection content | SigmaHQ rules | published — 17 files name WordPress: deprecated/windows/win_susp_vssadmin_ntds_activity.yml, deprecated/windows/proc_creation_win_susp_squirrel_lolbin.yml, rules/windows/file/file_event/file_event_win_iso_file_mount.yml, rules/web/proxy_generic/proxy_ua_frameworks.yml |
| Detection content | Splunk ESCU | published — 12 files name WordPress / TOCTOU: stories/wordpress_vulnerabilities.yml, detections/web/wordpress_bricks_builder_plugin_rce.yml, stories/xworm.yml, stories/clop_ransomware.yml |
| Community | Nuclei template · CVE-2026-119977 | nothing found — no template under http/cves |
| MSSP / IR firms | Arctic Wolf blog | nothing found — no post names it among the feed's 10 newest items |
| MSSP / IR firms | Huntress blog | nothing found — no post names it among the feed's 754 newest items |
| MSSP / IR firms | Rapid7 blog | nothing found — no post names it among the feed's 20 newest items |
| MSSP / IR firms | Sophos threat research | nothing found — no post names it among the feed's 15 newest items |
| Research | Unit 42 | nothing found — no post names it among the feed's 15 newest items |
Checked automatically 2026-11-10 18:12Z from public sources: 10 published, 17 nothing found, 0 not machine-checkable, 0 failed. "Nothing found" means the public source answered and had nothing, as of that moment; a feed covers only its newest posts. Re-checked daily.
What a person would still look up (4)
| VM scanners | Check whether your scanner has a check for CVE-2026-119977 that reads the core version. |
| WAF / edge | Check whether a managed rule blocks requests to WordPress upgrade staging paths. |
| EDR / endpoint | Check whether web-server child-process detection is enabled on Linux WordPress hosts. |
| Detection content | Check whether SIEM content covers PHP file creation in wp-content directories. |
Exposure queries — generated automatically
Where each CVE comes from: CVE-2026-119977 — WordPress Core CVE-2026-119977 TOCTOU race enables unauthenticated code execution during upgrade; added to CISA KEV. A product row answers "is the software from that story reachable from the internet", not "is this card about that software".
shodan · cve · CVE-2026-119977
vuln:CVE-2026-119977
open · Shodan tags a service with a CVE from its banner version; a paid-tier filter. Exact for this CVE, blind to a host Shodan has not fingerprinted.
28,373services internet-wide on Shodan · 2026-11-10▲ 0 on 2026-11-04 (+28,373) · 17,087 on 2026-11-09 (+11,286 +66%)
shodan · cpe · wordpress:wordpress
cpe:"cpe:/a:wordpress:wordpress"
open · Every Wordpress service Shodan fingerprinted, any version (CPE 2.2 form of cpe:2.3:a:wordpress:wordpress). Affected per NVD: >= 4.7 < 4.7.39; >= 4.8 < 4.8.34; >= 4.9 < 4.9.35; >= 5.0 < 5.0.31; >= 5.1 < 5.1.28; >= 5.2 < 5.2.30; >= 5.3 < 5.3.27; >= 5.4 < 5.4.25.
2,819,674services internet-wide on Shodan · 2026-11-10▲ 2,296,854 on 2026-11-04 (+522,820 +23%) · 2,747,017 on 2026-11-09 (+72,657 +3%)
shodan · product · wordpress:wordpress
product:"Wordpress"
open · Banner product name, NVD's spelling; adjust if Shodan's differs. Affected per NVD: >= 4.7 < 4.7.39; >= 4.8 < 4.8.34; >= 4.9 < 4.9.35; >= 5.0 < 5.0.31; >= 5.1 < 5.1.28; >= 5.2 < 5.2.30; >= 5.3 < 5.3.27; >= 5.4 < 5.4.25.
0match this spelling on Shodan · 2026-11-10▬ 0 on 2026-11-04 (+0) · 0 on 2026-11-09 (+0)
censys · product · wordpress:wordpress
host.services: (software.product = "Wordpress")
Censys Platform host search, software as fingerprinted at layer 7. Affected per NVD: >= 4.7 < 4.7.39; >= 4.8 < 4.8.34; >= 4.9 < 4.9.35; >= 5.0 < 5.0.31; >= 5.1 < 5.1.28; >= 5.2 < 5.2.30; >= 5.3 < 5.3.27; >= 5.4 < 5.4.25.
shodan · alias · wordpress:wordpress
http.html:"wp-includes/js/wp-emoji-release.min.js"
open · Banner spelling suggested by the model from the card text (core script path present on nearly every WordPress front end); counted against Shodan before it was shown.
201,822services internet-wide on Shodan · 2026-11-10▼ 208,044 on 2026-11-04 (-6,222 -3%) · 200,643 on 2026-11-09 (+1,179 +1%)
Internet-wide count, trend
| Query | First | Latest | Change |
|---|---|---|---|
product:"Wordpress" | 0 2026-11-04 | 0 2026-11-10 | +0 over 7 days |
vuln:CVE-2026-119977 | 0 2026-11-04 | 28,373 2026-11-10 | +28,373 over 7 days |
cpe:"cpe:/a:wordpress:wordpress" | 2,296,854 2026-11-04 | 2,819,674 2026-11-10 | +522,820 (+23%) over 7 days |
http.html:"wp-includes/js/wp-emoji-release.min.js" | 208,044 2026-11-04 | 201,822 2026-11-10 | -6,222 (-3%) over 7 days |
Shodan's count of matching services on the whole internet, one point a day; the scope (your ranges) is never part of it. A count moves with Shodan's crawl as much as with patching, so read the direction, not the digit.
Banner spellings: a model read 1 from the NVD names and this card's text (former and marketing names, console titles); 1 matched something on Shodan and is shown above, the rest were dropped.
Scope every query in your own tool, never in a shared document: Shodan `net:<your_ranges>`, `org:"<your_org>"` or `hostname:<your_domain>` (or a Shodan Monitor network alert, which applies the scope for you); Censys `host.ip: <your_ranges>` or `host.dns.names: <your_domain>`. Then compare the banner version with the affected range. Generated automatically 2026-11-10 18:12Z from the CVE ids and NVD's CPE configurations, each Shodan query counted against Shodan itself; re-built daily with the coverage check.
Open questions
- The input flags one material development on watch, but today's story repeats the prior facts. What changed is not identified in S1–S3.
- Exact staging path and race timing are not given by S1–S3.
- Affected range 4.7.0–7.1.3 and fix 7.1.4 need confirmation from the WordPress or Wordfence advisory.
- Who is exploiting this, and how widely?
Sources
- [S1] https://www.cisa.gov/known-exploited-vulnerabilities-catalog · Cybersecurity and Infrastructure Security Agency (CISA)
- [S2] https://www.cisa.gov/news-events/alerts/2026/11/03/cisa-adds-one-known-exploited-vulnerability-catalog · CISA
- [S3] https://thehackernews.com/2026/11/cisa-confirms-hackers-exploiting.html · The Hacker News
Public OSINT only. AI-generated by the pipeline; structure follows the DAIR model from Dynamic Incident Response (Joshua Wright). Published automatically; a dismissed draft unpublishes it.