00:00 — Replace “should be” with a verified fact
A colleague writes, “Auto-updates are enabled.” Someone else adds, “The site is behind a WAF.” Yet nobody can immediately name the WordPress version that is actually running, show a successful update, or confirm that the security rule blocks requests instead of merely recording them.
This is not the time to find someone to blame. The goal of the first hour is to replace assumptions with facts. You need to identify which sites are exposed, apply temporary protection, install the real fix, and inspect the available logs.
On July 17, 2026, Cloudflare published the results of coordinated work with the WordPress security team on two REST API issues: a high-severity SQL injection and a critical RCE. WAF protection can help, but the source explicitly warns that it is not a substitute for updating WordPress.
00:05 — Find the version of every site
Start with a short table containing the site address, environment, WordPress version, verification method, verification time, and responsible person. Include separate installations for regions, brands, and publicly reachable test environments.
Check the state that is actually running on the server. If you have access, you can use wp core version, the administration panel, or the version file in the deployed package. For containers and multi-server deployments, inspect every active image or node. A deployment system that lists the desired version does not prove that the same version is serving traffic.
An automatic update may have failed because of file permissions, insufficient storage, a blocked background process, or managed-hosting behavior. You can investigate the exact cause after the urgent check. For now, the priority is the version you can observe on each active site.
00:15 — Classify the exposure correctly
According to Cloudflare’s disclosure, the two issues have different boundaries:
- versions before 6.8 are not affected by these two specific vulnerabilities;
- the 6.8 branch is exposed to the SQL injection;
- versions from 6.9 are also exposed to the SQL injection;
- the RCE affects versions from 6.9 when no persistent object cache is present;
- the fixed releases for the relevant branches are 6.8.6, 6.9.5, and 7.0.2.
Configuration and hosting documentation commonly use the term persistent object cache. Do not treat its presence as general protection. This condition changes the RCE assessment, but it does not remove the separate SQL injection risk.
Likewise, the statement that a version before 6.8 is unaffected does not mean that an old WordPress installation is secure overall. It applies only to these two disclosed issues. An outdated installation can contain other known vulnerabilities and needs a separate upgrade plan.
00:25 — Confirm that the WAF blocks instead of watches
A WAF can provide time for patching if the relevant rule applies to the correct site and its action is Block. A Log action only creates a record of the match. The request may still reach WordPress.
Check three things: whether the required managed rule is enabled, which domains or zones receive it, and whether an exception changes its action. Pay particular attention to temporary overrides created earlier because of false positives. After changing the configuration, record the time, rule, and person who made the change.
Cloudflare users can inspect related activity in Security Events and check rule status in the managed ruleset settings. Other products use different names and may offer different coverage. Find the equivalent controls in your service instead of assuming that every WAF already has the same protection.
Do not paste an exploitation request into a production site to “test the block.” A safer approach is to inspect the configuration, confirm events from the official rule, and use a testing method approved by the provider. Do not disable the entire rule after the first false positive either. First determine whether a narrow exception can solve the problem.
00:35 — Install the real fix
Create a recoverable backup or snapshot, but do not turn it into a multi-hour prerequisite. Update the supported branch to 6.8.6, 6.9.5, or 7.0.2 according to the site’s current version and compatibility plan.
After the update, check the version again on the active server. If traffic is distributed across multiple nodes, confirm that an old image has not remained in rotation. Run a short check of sign-in, publishing, important forms, checkout, or other critical site functions.
Do not remove the WAF protection immediately after patching. First verify the version on every node and complete the initial log review.
00:50 — Inspect the traces without jumping to conclusions
Define the risk period. At minimum, review events from the time of the public disclosure. When retention permits, start from the last confirmed safe state instead.
Search WAF events and web server logs for requests to /wp-json/, then narrow the results using the route and signature from the official rule. Look for repeated requests, unusual methods, error spikes, traffic sources, and response timing. Correlate suspicious records with WordPress, database, process, and file-change logs.
A WAF rule match means that a request met the rule’s conditions. It is not automatic proof that code ran or data was accessed. At the same time, an absence of events does not prove safety. Log retention may be short, the rule may have been disabled, or some traffic may have bypassed the WAF.
If the logs show unknown process execution, changed files, new administrator accounts, or unexpected database activity, move to a separate incident investigation. Reinstalling the update alone is not enough in that situation.
When the first hour is complete
The work should produce a clear result: the actual version is known for every site; the relevant fixed release is installed; the WAF action has been verified; exceptions have been reviewed; the risk period has been defined; logs have received an initial review; and continued monitoring has an owner.
The most dangerous anti-pattern is treating a setting as proof of an outcome. “Auto-updates are enabled” is not the same as “the patch is installed.” “The WAF is running” is not the same as “the rule is blocking.” The first hour exists to close that gap.
Sources
- Cloudflare, “Cloudflare WAF protects WordPress applications from two high-severity vulnerabilities”: https://blog.cloudflare.com/wordpress-vulnerabilities/
Quick checklist
- record the actual version of every public WordPress site
- check for a persistent object cache without ignoring the separate SQL injection risk
- confirm that the relevant WAF rule blocks requests instead of only logging them
- install the fixed release for the current branch and verify the version again
- review WAF events and server logs for the selected risk period
- assign an owner for continued monitoring
First-Hour Plan for Checking Vulnerable WordPress Sites
Help me create a safe first-hour response plan for newly disclosed WordPress vulnerabilities. Inputs: - list of sites and environments; - actual or expected WordPress version for each site; - method and time of the last version check; - persistent object cache status: yes, no, or unknown; - WAF provider, rule name, rule action, and known exceptions; - available web server, WAF, application, and hosting logs; - start and end of the period that must be reviewed; - owners of patching and monitoring tasks. Produce the result in this format: 1. Priority table for every site. 2. Confirmed facts, assumptions, and missing information. 3. WAF checks that do not use exploitation requests. 4. Backup, update, and version-verification sequence. 5. Plan for finding related REST API requests in logs. 6. Indicators that require a separate incident investigation. 7. Completion criteria and an owner for every follow-up action. Apply these version boundaries: the SQL injection affects versions from 6.8; the RCE affects versions from 6.9 when no persistent object cache is present. Fixed releases are 7.0.2, 6.9.5, and 6.8.6. Do not call a site compromised only because a WAF rule matched. Do not provide working exploits or suggest dangerous requests against a production site.