Partly. A WAF can block the exploit requests its rules recognize, but coverage differs by vendor, rule version and mode. Cloudflare, AWS and Sucuri each describe their own protections in their own notices, and each still says to patch PHP.123 Keep the WAF on, confirm it blocks instead of logging, close every path to your origin that skips it, and install the fixed PHP build.4
You need this if your site sits behind Cloudflare, AWS WAF, Sucuri, Imunify360 or another WAF and you have not confirmed that the PHP on the origin is a fixed build. A WAF does not change which PHP your server runs. The fixed builds are 8.2.35, 8.3.36, 8.4.27, 8.5.12 or a vendor package whose changelog names both CVEs.4 If you already run one, keep the WAF as a second layer. Status as of 4 November 2026: PHP has no fix for CVE-2026-115560, and the 21 October releases do not cover it.4
The complete PHP2Shell guide covers both flaws. This article answers one question: does a WAF in front of your site count as protection?
What "protected by default" claims
Cloudflare says customers on its free or paid WAF were "protected by default against php2shell" from 03:02 UTC on 21 October.1 Paid-plan customers on Professional, Business and Enterprise are asked to confirm that the Managed Ruleset runs in block mode.1
I found no vendor that says a WAF alone is enough. Every notice I opened tells readers to patch PHP. So "I'm behind Cloudflare, so I'm covered" is a reading of "protected by default", not something I can quote from anyone.
The strongest case for the WAF
The case is real. Cloudflare says its rules went live about nine hours before disclosure, on every plan with the WAF deployed, Free included.1 PPC Land notes the post does not say which event it counts as disclosure.5 PHP's own release came at 14:00 UTC, just under eleven hours after the rules went live.4 Either way, the rules were on before most site owners read the news.
Cloudflare shipped seven rules in its free ruleset, seven in its paid ruleset and a response rule that inspects the origin's reply as well as the request.1 AWS says customers on the default version of its PHP rule group are protected automatically.2 Hadrian reported that most of the attacks it saw abused PHP's session upload-progress path, the path these rules aim at.3
For a site on PHP that cannot be upgraded this week, a WAF can be a useful interim layer that needs no change on the server. How much it helps depends on whether its rules cover the flaw, whether it is in blocking mode and whether all relevant traffic passes through it.
What the vendors say, and what is only reported
The rows below do not carry equal weight. Cloudflare, AWS and Sucuri are the vendors' own notices or documentation. Barracuda is general product documentation, not a PHP2Shell statement. The Fastly, Bunny, Imunify360 and Azure Front Door rows are secondary reporting and are marked as reported in the table. Those claims date from 21 to 23 October. I did not re-verify them on 4 November, so a limitation listed here may no longer hold.
| Vendor | What it says | The gap it names |
|---|---|---|
| Cloudflare | Rules are a defense-in-depth layer. Patch PHP. Updating website code or plugins alone does not fix the flaws.1 | Attackers were mutating payloads to evade the rules.1 The post gives no blocked-request counts and does not say whether any mutation got through.5 |
| AWS WAF | Patching is the only complete fix. Default-version rule groups protect automatically. Pinned versions must update.2 | Version 2.3 (21 October) added PHP2Shell_BODY for CVE-2026-109619 and, for CVE-2026-109618, pointed to the Core rule set's SizeRestrictions_BODY rule, which blocks request bodies over 8 KB. Version 2.4 (22 October) added direct detection of CVE-2026-109618 to the PHP rule group, and 2.5 improved the signatures for both.6 A web ACL pinned to 2.3 lacks the direct rule, so its cover for the second flaw depends on the Core rule set being in the ACL. |
| Sucuri | Its rules block known exploit requests. They do not replace patching.3 | Traffic that reaches the origin directly can skip the rules.3 |
| Barracuda | Its WAF documentation says passive mode logs violations without blocking them.7 | Mode. This is general product documentation, not a PHP2Shell statement. |
| Fastly, Bunny Reported | Fastly's Next-Gen WAF rule requires opt-in. Bunny's upload-progress rule blocks only when the zone's WAF is in blocking mode, according to webhosting.today's roundup.8 | Defaults. |
| Imunify360 Reported | On 22 October CloudLinux reported that no rule yet blocked the out-of-memory path of CVE-2026-109618, and that a variant built to look like a normal upload from the site's own page could still get through.8 | Coverage of the second flaw as of 22 October. CloudLinux's own pages blocked my requests, so this is webhosting.today's account. It may have changed since. |
| Azure Front Door Reported | The response rule is disabled by default and writes no log entries or hit counts, according to ESEOSpace's summary of Microsoft's post.9 | Default state and visibility. I could not open Microsoft's post. |
PPC Land adds a point about Cloudflare's response rule. A response rule inspects what the origin sends back, so the request has already reached the origin by then, and the post does not say what the origin did with it.5 Blocking a response is not the same as stopping the server from processing the request. Neither PPC Land nor Cloudflare says whether any request was successfully exploited that way, and this article does not claim one was. The point concerns the response rule only, not Cloudflare's other rules. Hosts that run the WAF for you split the same way: edge rules first, fixed builds later. How hosting providers responded has the timeline.
I searched on 4 November 2026 for an independent test of any vendor's managed rules against PHP2Shell, including mutated payloads. I found none. I found single-author lab write-ups and vendor statements. Nobody has published a measured bypass rate, so nobody can say how often the rules miss.
The origin problem
A WAF only protects traffic that passes through it. Sucuri puts it plainly: "WAF protection only works when requests pass through the firewall."3 If attackers can reach your origin directly, they can send requests to PHP without meeting the rules.3 PPC Land notes that Cloudflare's post does not address origins reachable outside its proxy.5
The fixes come from the vendors' own documentation:
- Sucuri's checklist: restrict direct IPv4 and IPv6 access to the origin, accept web traffic only from the firewall's addresses, remove old DNS records and alternate hostnames that expose the origin, protect staging and backup copies, and check unprotected subdomains and alternate ports.3
- Cloudflare's documentation: use proxied DNS records, audit DNS-only records for origin addresses, and rotate origin IPs after onboarding.10 It rates authenticated origin pulls and Cloudflare Tunnel "very secure". It rates allowlisting Cloudflare's IP ranges "moderately secure" and notes it is vulnerable to IP spoofing.10
Opinion Test only systems you own or are authorized to test, and use a test or maintenance window where you can. A useful direct-origin test sends the Host header and TLS server name your site expects, covers every origin IPv4 and IPv6 address, old hostnames and non-standard ports, and is read against your firewall rules. A refused connection to a bare IP address does not prove the origin is unreachable, because a default virtual host, an alternate hostname or another route may still serve your application.
The strongest objection to this view
"Patching is slow or impossible for many sites, so telling people a WAF isn't enough doesn't help them."
Agreed on the first half. A WAF is a useful interim layer for a site that cannot patch today. Use it well:
- Confirm it blocks. Cloudflare's paid plans need block mode confirmed. AWS needs the default or latest rule-group version. Fastly needs the opt-in.128
- Read the matches. Cloudflare says to filter Security Analytics by rule ID.1
- Lock the origin, as above.10
- Add request limits at the proxy. PHP suggests limits on decoded request size, field count, multipart parts, header count and nesting depth, including for requests with no usable Content-Length.4
- Turn off session upload progress in PHP at server level. PHP lists it for CVE-2026-109619 and recommends it for CVE-2026-115560.4
On PHP 8.1 or older with no vendor backport, workarounds when you can't patch lists the PHP settings that go with the WAF.
Opinion A WAF is a good first hour and a poor last step. PHP states that updating is "the only safe choice", and the vendors' notices agree.4
What would change this
Three kinds of evidence would move me toward "covered":
- An independent test showing a vendor's managed rules block published exploit variants, mutated payloads included, on both mod_php and PHP-FPM.
- A vendor statement that its rules cover both CVEs, including the out-of-memory path. AWS's changelog now says its PHP rule group detects CVE-2026-109618 directly from version 2.4, which meets this for AWS.6 I found no equivalent statement from the others I checked.
- Measured bypass rates close to zero over time.
CVE-2026-115560 adds a condition. Cloudflare says its WAF covers that flaw only for sites that keep PHP's default upload-progress field name. Customers who changed session.upload_progress.name are not covered.1
How you'd notice
A WAF hit means an attempt reached the filter. It says nothing about whether the origin is patched. Pantheon blocked more than 60,000 suspicious requests on 21 October at network level alone, and attempts are not compromises.8
Your WAF is probably not covering you if any of these is true:
- The ruleset is in log, passive or detection mode.
- The vendor's rule is opt-in or disabled by default, and nobody switched it on.
- A pinned AWS PHP rule-group version predates 2.4 and nothing else in the web ACL, such as the Core rule set's body-size rule, covers CVE-2026-109618.
- Your origin's access log shows client addresses that do not belong to your proxy. Sucuri's checklist exists to close exactly that path.3
If you search Cloudflare events for "PHP", you may find nothing. PPC Land reported the rules under generic names at launch, and Cloudflare's post now lists PHP-named labels.51 Filter by rule ID instead.
Do this
Do today
- Check which PHP the origin runs and patch the PHP runtime itself, then restart every worker.
- Confirm the WAF blocks: Cloudflare Managed Ruleset in block mode, the AWS PHP rule group on the default version or a pinned 2.4 or later, Barracuda in active mode, Fastly and Azure rules switched on.
- If you are authorized to test the system, check from outside your network whether the origin answers web requests that skip the WAF. Try each origin IPv4 and IPv6 address, old and alternate hostnames and non-standard ports, send the Host header and TLS server name your site expects, and compare the result with your firewall's allow rules. A refused connection to a bare IP proves little.
- If you cannot patch today, set
session.upload_progress.enabled=0at server level and apply the proxy limits above.
Do this week
- Read your rule matches as attempts. What to look for in WAF logs covers what separates a blocked probe from a real hit.
- Audit DNS-only records, alternate hostnames and staging copies for origin exposure. Rotate the origin IP if it leaked.
- On AWS, move off a pinned rule-group version and subscribe to AWS's managed-rules notification topic, as its bulletin advises.2
- Ask your host in writing which PHP build runs your site and whether the WAF is in block mode.
Can wait
- Re-check your vendor's notice for coverage of the out-of-memory path and CVE-2026-115560.
- Re-read PHP's advisory when the CVE-2026-115560 fix ships.
CISA added both PHP2Shell CVEs to its Known Exploited Vulnerabilities catalog on 26 October and updated its PHP alert.11 The bulletin I opened states no remediation due date, so check the catalog entry for one. CISA says BOD 26-04 applies only to federal civilian agencies and encourages all organizations to prioritize KEV vulnerabilities.11 The listing alone does not say how many sites were compromised.


Comments