CVE-2026-87902 WordPress Page-Template LFI
Read the public WordPress version and compare it with the CVE-2026-87902 fixes, starting at 7.1.2. GET only. No path-traversal request.
Read the public WordPress version and compare it with the CVE-2026-87902 fixes, starting at 7.1.2. GET only. No path-traversal request.
This workflow takes a list of site URLs and tells you which of them advertise a WordPress version inside the CVE-2026-87902 range. The affected window starts at 4.7.0 and runs through 7.1.1. The fix line starts at 7.1.2, with backports on the 7.0, 6.9, 6.8, 6.7, and 4.8 branches. Detect reads the public version fingerprint with GET requests: the generator meta tag, a core asset query string, or the feed generator. It does not send a path-traversal request and it does not include a file. A second node then records that the remaining host-side conditions were not verified from outside. Point the list at scope you are authorised to test and treat an affected version as the ticket for exposure management.
Run it again after core updates. A site that was in range before 7.1.2 should come back patched once that release, or its branch backport, is in place.
targets reads a file of site URLs, or writes https://wordpress.example.com when none is attached.detect GETs each site and reads the WordPress version. Each row is classified against the fixed releases.poc runs after detect. On an affected row it records the extra host-side conditions as unverified. It does not send a traversal request.summary writes counts by status and the affected subset.url or host. If no file is attached, the default is https://wordpress.example.com.wordpress_findings.jsonl. One detect row per URL: target, version, version source, and status.cve_2026_87902_poc.jsonl. The detect row plus whether the extra host-side conditions were left unverified.summary.jsonl. One object: targets checked, status counts, and the affected subset.The records below are an illustrative fixture for the default host, not a live result. They show a site with no WordPress version fingerprint, so the follow-up node does not run.
detect| target | is_wordpress | version | cve | status | evidence |
|---|---|---|---|---|---|
| https://wordpress.example.com | false | — | CVE-2026-87902 | VERSION_UNKNOWN | no WordPress version fingerprint |
poc| target | cve | status | poc_attempted | poc_result |
|---|---|---|---|---|
| https://wordpress.example.com | CVE-2026-87902 | VERSION_UNKNOWN | false | skipped_not_affected |
summary{"cve": "CVE-2026-87902", "product": "WordPress Core", "affected_range": "4.7.0 - 7.1.1", "fixed_in": "7.1.2", "targets_checked": 1, "status_counts": {"VERSION_UNKNOWN": 1}, "poc_result_counts": {"skipped_not_affected": 1}, "affected_targets": []}4.7.0 through 7.1.1, unless the branch already has its backport. 7.1.2 is the current-branch fix. Backports include 7.0.6, 6.9.9, 6.8.10, 6.7.9, and 4.8.32. A site with no readable version comes back VERSION_UNKNOWN, not affected.
No. Affected is a version comparison. The second node does not send a path-traversal request and does not include a file. It marks the remaining host-side conditions unverified.
It runs after detect. A row that is not affected is recorded as skipped. An affected row is kept for review with those host-side conditions still unverified.
The version read is a GET of public pages. The follow-up does not send a traversal request. Run it only against scope you are authorised to test.
Get a personalized demo
A 30-minute walkthrough. We map the platform to your stack and answer pricing and deployment questions for your environment.