Active Exploitation of WordPress Core Path Traversal Vulnerability (CVE-2026-87902)
October 06th, 2026
High
.jpg)
Our Cyber Threat Intelligence Unit has identified active exploitation of CVE-2026-87902, a high-severity WordPress core vulnerability (CVSS v3.1 8.1 per NVD; Critical at CVSS v4.0 9.2 per the vendor) that allows an unauthenticated attacker to force a site to load a PHP file from outside its theme folders. Reported on July 20, 2026, the vulnerability prompted WordPress to release fixes on September 22. Exploitation began the same day, escalated to writing files that execute shell commands by September 23, and public scanning tooling is now in circulation. CISA added it to the Known Exploited Vulnerabilities (KEV) catalog on September 25. On some servers, it can lead to remote code execution as the web server account. It affects WordPress 4.7.0 through 7.1.1, including sites that recently updated to 7.1.1. Organizations running WordPress should treat patching as urgent.
Technical Details
Threat Type: Unauthenticated path traversal leading to local PHP file inclusion, with conditional remote code execution (CWE-98).
Severity: High.
CVE ID: CVE-2026-87902 (GHSA-7hp8-65ch-5whp).
CVSS: 8.1 High (v3.1, CISA-ADP score on NVD): CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H
Vendor (CNA): 9.2 Critical (v4.0),CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N. AT:P reflects the preconditions below. NVD lists no v4.0 score.
Affected Products: WordPress Core 4.7.0 through 7.1.1. NVD lists no lower version bound, and no source says whether releases before 4.7 are affected.
Fixed Versions: 7.1.2 and branch backports down to 4.7.37 (full list in Section 6.0).
Authentication: None required. No user interaction.
Exploit Status: Exploited in the wild, with a public proof of concept and public scanning tooling.
Added to CISA KEV on September 25, 2026 (due September 28). CISA-ADP SSVC: exploitation active, automatable: no, technical impact: total.
Patchstack observed first activity on September 22 at 11:49 UTC and the first file-write attempt at 15:34 UTC.
Previdian honeypots recorded 3,056 attempts from 18 IPs between September 23 and October 5.
Root Cause: The template name built from the pagename request value was not checked with validate_file(), unlike a neighboring code path. The fix adds that check and a containment check on every resolved template path.
Preconditions for code execution:
The active parent or child theme has a top-level page-directory, such as page-templates. A symlink works, and it need not be writable. SecurityWeek names Twenty Twelve,Twenty Fourteen, Neve, Hestia and Sydney as themes with this layout.
A published Page is selectable by page_id, with no earlier valid assigned custom template.
A readable local .php file exists to include. The observed chain uses PEAR's pearcmd.php.
PHP runs with register_argc_argv On (default in official PHP Docker images and cPanel on PHP below 8.5, per Patchstack).
PHP can write to a temporary directory.
Attack Chain/Method:
Initial access: An unauthenticated GET or POST to / or /index.php carries an encoded traversal in pagename (single or double encoded, either hex case, one to twelve levels), usually prefixed with templates%2f, plus a valid page_id. WordPress reads pagename from the POST body before the query string, and POST is now more common than GET.
Exploitation: WordPress decodes the value,builds page-{value}.php and includes a local PHP file outside the theme folders.
Reconnaissance: Attackers include core files to confirm the site is vulnerable, most often wp-links-opml.php, also wp-includes/feed-rss2.php, wp-cron.php, wp-includes/functions.php, wp-login.php and install.php.
Verification: Attackers include pearcmd.php with +config-show to confirm PEAR and register_argc_argv, trying /usr/local/lib/php/pearcmd.php, /usr/share/php/pearcmd.php and /usr/share/pear/pearcmd.php.
Payload delivery: +config-create writes attacker controlled PHP to /tmp or /var/tmp. Some payloads write only a marker string (CVE-2026-87902-POC-OK or an obfuscated LUCIFER-RCE-OK); others write a short tag that runs a shell command when the file is accessed. Previdian also reports requests that write a file to /tmp and then include a PHP upload script hosted on GitHub (Section 5.0).
Persistence and C2: Not confirmed. Files in /tmp are usually not web reachable, so activity so far shows execution rather than a persistent backdoor, though the same write primitive could target other locations. Previdian reports two callback hosts but does not publish them in its public content.
Post-exploitation: Not reported beyond the GitHub-hosted upload script. Code runs with the web server account's privileges.

Impact
Exposure: Self hosted WordPress 4.7.0 through 7.1.1 is exposed to file inclusion. Code execution needs the Section 2.0 preconditions, and the researcher has not measured how many sites meet them.
Code execution: PHP runs as the web server account, so impact is bounded by that account's permissions. No privilege escalation or host escape was demonstrated.
Credential exposure: Depending on those permissions, attackers can read configuration files that hold database credentials.
Data theft and tampering: Attackers can read or change site content and data and modify writable application resources. Analyst assessment: this may create privacy and compliance exposure.
Downtime and reputation: Attackers can disrupt the site. Analyst assessment: disruption or defacement can interrupt revenue and erode customer trust.
Further access: Analyst assessment: a compromised web server can be a foothold for wider access, depending on network segmentation.
Detection Method
Traversal in requests: Search web server and WAF logs for %2e%2e or %252e%252e (either hex case) in pagename, in both the query string and POST body (for example /var/log/apache2/access.log or /var/log/nginx/access.log).
Parameter pairing: Alert when pagename and page_id appear together on / or /index.php, or when pagename starts with templates%2f or another page- directory name (template and a malformed page-templates prefix have also been seen). A 200 response returning OPML or RSS output from a normal page URL confirms the inclusion ran; treat it as a confirmed vulnerable window.
PEAR abuse: Alert on requests containing pearcmd, +config-show or +config-create.
Scanner user agents: Flag cve-2026-87902-poc/1.0 and nuclei-cve-2026-87902/1.0, but do not filter on user agent, because most traffic spoofs browsers.
Unexpected files: Monitor /tmp and /var/tmp for new .php files, including the names in Section 5.0 and luci_<random>.php or zeta_<random>.php patterns, using EDR, auditd file watches or Sysmon for Linux Event ID 11 (FileCreate). Treat any match as a compromised host.
Suspicious processes and network: Alert when apache2, httpd or php-fpm spawns sh or bash (EDR, auditd execve or Sysmon for Linux Event ID 1, ProcessCreate), or when web server processes make outbound requests to raw.githubusercontent.com.
Indicators of Compromise
Type | Indicator | Description |
IP Address | 43[.]250[.]53[.]42 | Source IP observed by Patchstack |
IP Address | 180[.]251[.]159[.]243 | Source IP observed by Patchstack |
IP Address | 195[.]178[.]110[.]247 | Source IP observed by Patchstack |
IP Address | 107[.]189[.]14[.]87 | Source IP observed by Patchstack |
IP Address | 45[.]61[.]184[.]170 | Source IP observed by Patchstack |
IP Address | 92[.]246[.]130[.]76 | Source IP observed by Patchstack |
IP Address | 169[.]58[.]48[.]193 | Listed by BleepingComputer as blocklist sources; not in Patchstack’s article. Pending confirmation |
IP Address | 169[.]58[.]48[.]195 | Listed by BleepingComputer as blocklist sources; not in Patchstack’s article. Pending confirmation |
IP Address | 2001[:]df1[:]e8c0[::]106b | Listed by BleepingComputer as blocklist sources; not in Patchstack’s article. Pending confirmation |
IP Address | 104[.]194[.]9[.]227 | Source IP reported by Previdian via The Hacker News. Pending confirmation |
URL | https[:]//raw[.]githubusercontent[.]com/MrG3P5/web-shell/refs/heads/main/uploader[.]php | PHP upload script included after a pearcmd file write; reported by Previdian via The Hacker News |
File Name | wp-pear-rce-flag.php | Written to /tmp or /var/tmp via pearcmd |
File Name | poc87902.php | Written to /tmp or /var/tmp via pearcmd |
File Name | luci_<random>.php | Random suffix; written to /tmp or /var/tmp via pearcmd |
File Name | zeta_<random>.php | Random suffix; written to /tmp or /var/tmp via pearcmd |
User Agent | cve-2026-87902-poc/1.0 | Scanner user agent observed by Patchstack |
User Agent | nuclei-cve-2026-87902/1.0 | Scanner user agent observed by Patchstack |

Recommendations
Apply the patch immediately: Update every site, including those on 7.1.1, to the fixed release for its branch, and confirm completion on production, staging and hosted instances (sites with automatic background updates may already be patched):
7.1.2, 7.0.6, 6.9.9, 6.8.10, 6.7.9, 6.6.9, 6.5.12, 6.4.12, 6.3.12, 6.2.13, 6.1.14, 6.0.16
5.9.18, 5.8.17, 5.7.19, 5.6.21, 5.5.22, 5.4.23, 5.3.25, 5.2.28, 5.1.26, 5.0.29
4.9.33, 4.8.32, 4.7.37
Migrate legacy sites: Move sites older than 4.7 to a supported release. No fix is listed for them, and no source says whether they are affected. Only the latest WordPress version is actively supported.
Apply interim controls if patching is delayed: Reject %2e%2e and %252e%252e (case-insensitive) in pagename at the WAF or web server, set register_argc_argv to Off for web requests, and remove unused PEAR components, including pearcmd.php. These reduce risk but do not fix the vulnerability: they break only the observed PEAR chain, and other local PHP files may still be includable.
Restrict file system and network access: Limit the PHP account's file system access and write permissions. Analyst recommendation: restrict outbound connections from web servers to what the site needs.
Assess exposure: Check active and parent themes for a top level page- directory, and check register_argc_argv in the PHP configuration the website actually uses, not only the command line one.
Monitor logs: Send web server, WAF and file integrity events to the SIEM and alert on the Section 4.0 detections. Log POST parameters pagename and page_id where feasible.
Hunt for prior compromise: Review logs from September 22, 2026 (earliest observed exploitation) onward, including sites exposed before patching, and inspect /tmp and /var/tmp. Treat any hit as a compromised host. Analyst recommendation: isolate it, rotate database credentials and WordPress secret keys, and rebuild from a known good source.
Do not rely on IP blocking alone: Source addresses now span a few hundred hosts.
Isolate backups and verify restores: Analyst recommendation: keep backups offline or immutable, test restores, and confirm the restore point predates any compromise.
Conclusion
CVE-2026-87902 is a high-severity (CVSS v3.1 8.1; vendor score Critical) WordPress core vulnerability listed in CISA KEV that is actively exploited and allows unauthenticated attackers to include local PHP files and, on some servers, execute code. We urge organizations to update every WordPress site to a patched release now, and review logs and temporary directories for earlier activity.
References
https://github.com/WordPress/wordpress-develop/security/advisories/GHSA-7hp8-65ch-5whp
https://nvd.nist.gov/vuln/detail/CVE-2026-87902
https://www.cve.org/cverecord?id=CVE-2026-87902
https://wordpress.org/news/2026/09/wordpress-7-1-2-release/
https://patchstack.com/articles/wordpress-7-1-2-security-release-unauthenticated-lfi-to-rce/
https://ressl.ch/blog/cve-2026-87902-wordpress/
https://previdian.com/CVE-2026-87902
https://thehackernews.com/2026/09/attackers-exploit-wordpress-cve-2026.html