Patching PHP closes the hole. The filter below doesn't replace that. It is a second layer: it stops the attack traffic early, saving your hosting from handling the bot scanning load, and leaves a record of who is trying.
In short: two serious PHP vulnerabilities were fixed on 21 October 2026, and automated attacks started within hours. Updating PHP is the real fix. If your websites sit behind Varnish (a caching layer many PHP sites use), you can also add a small filter that turns the attack traffic away before it ever reaches PHP. Here is what it does, why it is safe for real visitors, and how to set it up. Technical details are in the boxes, for whoever runs your servers.
What happened
PHP powers a large share of the web, including WordPress. The two vulnerabilities (CVE-2026-109618 and CVE-2026-109619) let an attacker send a specially shaped request to a PHP site and potentially take control of it. Patched versions of PHP were released on 21 October, and within hours we saw automated tools trying the attack against websites.
What the filter does
Varnish sits in front of your website and handles every request first. The filter adds three quick checks there. They only look at the outside of each request (its type and its declared size), never at what is inside, so normal visitors are not slowed down.
1) Form submissions that don't say how big they are are turned away. The attack relies on this. Web browsers always state the size when someone submits a form, so real visitors are never affected.
2) Form submissions that are far too large (over 2 MB) are turned away. A real contact or checkout form is a few KB. The published attack sends several MB.
3) Unusual request types are turned away. Automated scanners use odd request types to probe websites. Normal browsing never does.
Your own team's addresses can be exempted, so staff can still test and use admin tools.
| Technical detail: the three rules |
|---|
|
1) POST/PUT/PATCH with a form 2) 3) Any method outside GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS, PURGE returns 405 Method Not Allowed (scanner noise such as TRACK, PROPFIND and HAAD). Rules 1 and 2 skip clients in a |
How to set it up
For whoever manages your Varnish servers, it takes five steps and about half an hour:
1) Add the filter to the Varnish configuration.
2) Switch it on.
3) Reload Varnish and check it is active.
4) Test that attack-shaped requests are refused and normal ones still work.
5) Turn on a log so you can see what it blocks.
| Technical detail: steps 1 and 2, the VCL |
|---|
|
Add this to
Then call it in
Rule 1 deliberately checks only for a missing |
| Technical detail: step 3, compile and reload |
|---|
|
A Varnish reload is asynchronous, so confirm the new VCL is active afterwards.
|
| Technical detail: step 4, testing |
|---|
|
Run these from an address that is not in the
If a site sits behind a CDN, the CDN may add a |
| Technical detail: step 5, the log |
|---|
Contents of which are;
Gotcha: in a systemd unit a literal Log rotation, in
Enable and watch;
|
What we saw, and is it safe?
On the websites we look after, the filter caught real attack attempts on its first night. They were aimed at WordPress sites, disguised as ordinary web browsers, and every one was turned away. The rest was routine scanning. No genuine visitor was blocked.
Attacks only reached sites that were directly reachable. Sites behind a CDN such as Cloudflare saw almost none.
Because every refusal is logged, it is easy to check that nothing legitimate is being caught. If something ever is, you exempt that one site or page rather than switching the filter off.
| Technical detail: the attack pattern and false positives |
|---|
|
Exploit attempts: chunked Scanner noise: PROPFIND, TRACK and misspelled methods (e.g. HAAD) aimed at bare server IPs. All 405. To check for false positives, look at log lines from your own addresses, or browser User-Agents that don't fit the pattern above. A genuine client caught by rule 1 would be something like an API tool streaming a form body without a length: exempt that host or path from rule 1. |
Optional extra: a stricter check
There is a fourth check you can add if you want to go further. It looks inside file uploads for a marker the public attack tool uses, and turns those requests away. It is the most precise of the checks, and it also catches attempts that the first three would let through.
The trade-off is cost. To look inside, Varnish has to hold each upload (up to 1 MB) in memory before passing it on, which can slow uploads on busy sites. Uploads bigger than 1 MB aren't checked at all. And if any of your sites shows a progress bar during uploads, this check may break it. Our advice: run it in "log only" mode for a week first, and switch it on only if nothing legitimate shows up.
| Technical detail: rule 4, multipart body inspection |
|---|
|
The public exploit tool reaches CVE-2026-109619 through PHP's session upload progress, via a
Log-only mode: comment out the |
Taking it out later
This is a temporary measure. Once the log goes quiet, usually a few weeks after everyone has patched, the filter can be removed. We suggest putting a review date in the diary on the day you add it.
| Technical detail: removal |
|---|
|
Delete
Tested on Varnish 6.6 with varnish-modules 0.18. |
If you'd like help checking your servers or setting this up, get in touch.