On October 21, 2026, the PHP project shipped an emergency fix for two critical vulnerabilities (CVE-2026-109618 and CVE-2026-109619). We analyzed 6.7M of the world’s most-visited PHP sites to see how many sit in the blast radius. Shocker: 49% of all PHP sites are EOL.
We tracked patching for 24 hours after the release.
UPDATE: Our 24-hour follow-up is out. See the PHP2Shell patch status: 23% of PHP sites had been patched, while 77% were still running a vulnerable version.
Key takeaways
This applies to anyone running PHP in production.
- The PHP security team released an emergency fix on Wednesday, October 21, 2026, for two critical remote code execution vulnerabilities tracked as php2shell (CVE-2026-109618 and CVE-2026-109619). The fixed versions are PHP 8.2.35, 8.3.36, 8.4.27 and 8.5.12.
- Both are rated CVSS 9.2, and the flaw is in PHP itself, not in one plugin or framework.
- PHP’s supported branches, 8.2 through 8.5, received a fix. Everything older, 8.1 and down, is EOL, and PHP published only minimal source backports for 7.4, 8.0 and 8.1.
- Of the top 6.7M PHP websites we analyzed, 49% of those that reveal a version run an End-of-Life branch.
- What to do now: find out what you run, update to the fixed release, set expose_php = Off, and make sure logging and alerting are on.
- If you can’t update yet: PHP’s security advisory lists temporary mitigations, but says they reduce exposure and do not make an installation safe.
What is php2shell (CVE-2026-109618 and CVE-2026-109619)?
| php2shell at a glance | |
|---|---|
| Vulnerabilities | CVE-2026-109618 and CVE-2026-109619 |
| Type | Remote code execution (RCE) in PHP core |
| Severity | CVSS v4.0 9.2 (out of 10), per PHP’s advance notice |
| Affected versions | PHP 8.2 before 8.2.35, 8.3 before 8.3.36, 8.4 before 8.4.27, and 8.5 before 8.5.12, per the CVE records (CVE-2026-109618, CVE-2026-109619). EOL branches aren’t listed, but PHP shipped backports for 7.4, 8.0 and 8.1, so treat older versions as affected too |
| Fix release | PHP 8.2.35, 8.3.36, 8.4.27 and 8.5.12, released Wednesday, October 21, 2026 |
| Gets a fix | Supported branches, PHP 8.2 through 8.5 |
| End-of-Life | PHP 8.1 and older |
| Exploited in the wild | Millions of attempts per Matthew Prince of Cloudflare |
On October 20, the PHP security team dropped notice of an emergency security release for Wednesday, October 21, 2026, at 14:00 UTC. Both flaws were rated CVSS 9.2 (out of 10). The pair is being tracked under the name of “php2shell” (CVE-2026-109618 and CVE-2026-109619).
PHP held back the full technical details, the exact affected versions, and the patched versions until the release itself. That embargo was deliberate: it gave defenders time to prepare without handing attackers a map. But it also started a countdown. Once a patch is public, its code change points straight at the bug, and attacks on unpatched servers usually follow within hours to days.

UPDATE: Less than 12 hours after the patch was released, millions of attempts have already been made to exploit the vulnerability, according to Matthew Prince, CEO of Cloudflare.
When was php2shell announced, and when was it fixed?
PHP announced the release on October 20, less than a day before it shipped.
| When (UTC) | What happened |
|---|---|
| October 20, 20:32 | The PHP security team posted advance notice of a security release for two critical vulnerabilities, both rated CVSS v4.0 9.2. |
| October 21, 13:48 and 13:54 | cve.org published CVE-2026-109618 and CVE-2026-109619, with the affected versions. |
| October 21 | PHP released 8.2.35, 8.3.36, 8.4.27 and 8.5.12 with a security advisory. |
| October 23 | PHP suggested keeping session.upload_progress.enabled=0 until its next regular bugfix release, to block a separate, unlikely RCE path (CVE-2026-115560). |
Why is a PHP core flaw close to worst-case?
Remote code execution (RCE) means an attacker can run their own commands on your server without logging in (meaning, without any authentication). From there, the familiar outcomes follow: stolen data, web shells, ransomware, and a foothold to move deeper into the network. A CVSS score of 9.2 signals that this is reachable over the network, with no login and no user action, and that a successful attack means total compromise. It isn’t trivial to pull off (both CVEs are rated high attack complexity), but PHP says a demonstrated exploit already exists for mod_php.
What sets php2shell apart from the average CVE is where it lives. This is not a bug in one plugin or framework. It is in PHP itself, the runtime beneath roughly three-quarters of all websites whose server-side language is known.
Which PHP versions got a fix?
PHP’s supported branches, 8.2 through 8.5, received a fix. Everything older, 8.1 and down, is EOL and gets no regular update from the PHP project. Given the severity, PHP’s security team published minimal source backports for PHP 7.4, 8.0 and 8.1, aimed at people who build PHP from source or have no LTS vendor. Some distributions and LTS vendors, like CloudLinux, provide backported fixes. Note: Many servers can easily be ported to CloudLinux.
UPDATE: CloudLinux has released patched builds of its PHP versions, including EOL branches such as 7.4 and 8.0 (alt-php for CloudLinux 6 is not confirmed yet).
How many PHP sites are exposed? Our October 20 measurement (the day before the patch)
To size the problem, we analyzed the top 6.7M PHP websites. We identified PHP sites by their technology fingerprints and, where the server advertised it, read the PHP version from the response.
| Measure | Count | Share |
|---|---|---|
| Sites running PHP (top 15M) | 6,689,581 | 45% of the top 15M sites |
| Expose a PHP version | 1,719,818 | 26% of PHP sites |
| On supported branches (8.2-8.5) | 884,769 | 51% of version-visible |
| On End-of-Life branches (8.1 and older) | 835,049 | 49% of version-visible |
Among sites that reveal a version, the most common are PHP 8.3 (23%), 7.4 (20%), 8.2 (16%), 8.1 (9%), and 8.4 (9%). PHP 7.4 (EOL since 2022) is the second most common version on the web, and PHP 7.x and older together form the single largest group at about 34%.

One caveat: About 70% of sites do not advertise their version, so version-level findings describe the roughly 30% that do.
How big is the patching gap?
Among sites that do reveal their version, the split is nearly even: a little over half run a supported branch (which has a patch), and just under half run an EOL branch that doesn’t get a regular patch. Given the size of this vulnerability, we wouldn’t be surprised (but don’t count on it) if PHP decides to publish patches for older versions of PHP.
UPDATE: PHP did, in part. Its security team released source-only patches for 7.4, 8.0 and 8.1, for people who build PHP themselves.
When you project that version-share pattern onto the roughly 70% that do hide their version, the picture is sobering. On the order of 3.2 million of these top sites appear to run an EOL version of PHP! Their only real options are to upgrade, or to put compensating controls such as a web application firewall in front of the application. We imagine WAF providers like Cloudflare will also implement rules to protect their orange-clouded customers.

Cloudflare’s CTO, Dane Knecht, announced on October 20, 2026, on X that they’ll have this covered.
The several million sites on supported branches are not safe on day one either; they are simply the group that has a patch available. Whether they are actually protected comes down to how fast they apply it, which is the number we tracked after the release. See how fast PHP sites patched in the first 24 hours.
What should you do after the PHP security release?
Update PHP first. If you can’t update right away, PHP’s security advisory lists temporary mitigations that reduce exposure but don’t make a server safe. One of them, for CVE-2026-109619 only, is setting the following in your php.ini (not in .user.ini or with ini_set(), which PHP says won’t work):
session.upload_progress.enabled = Off
Restart every PHP worker after the change. On October 23, PHP suggested leaving this setting off until its next regular bugfix release, to block a separate, unlikely RCE path (CVE-2026-115560).
On cPanel servers, you can find your php.ini file at:
/opt/cpanel/ea-phpNN/root/etc/php.ini
Replace NN with your cPanel PHP version, e.g., /opt/cpanel/ea-php74/root/etc/php.ini
You may also want to update your cPanel bundled PHP as well:
/usr/local/cpanel/3rdparty/php/NN/etc/php.ini
Replace NN with your cPanel bundled PHP, e.g., /usr/local/cpanel/3rdparty/php/84/etc/php.ini
- Find out what you run. If you’re running cPanel, you can find your php.ini files using this command:
locate php.ini | grep /opt/cpanel - Stop advertising your version. Set
expose_php = Offso your server stops volunteering its version in response headers. It is not a fix, but it removes an easy targeting signal. - Assume probing has already started. Make sure logging and alerting are on so you can spot exploitation attempts.
How do you find every PHP version you run?
The hardest part of php2shell will not be applying the patch. It will be knowing which of your sites, subdomains, and half-forgotten staging servers still run an exposed or EOL PHP version in the first place.
Want to know where php2shell leaves you and where your data is being transmitted? See your exposure at MELURNA.
FAQs
Is php2shell being exploited in the wild?
Cloudflare CEO Matthew Prince said millions of exploitation attempts were made within 12 hours of the patch. As of October 23, 2026, neither CVE is in CISA’s Known Exploited Vulnerabilities catalog. PHP’s advisory says the risk is highest for mod_php, where a demonstrated exploit lets an unauthenticated request trigger the attack before any application code runs.
How can I spot php2shell exploitation on my server?
PHP’s advisory describes the bugs but doesn’t list signs of compromise, so look for the general signs of code running through a web server: your web server or PHP processes starting a shell such as bash, cmd.exe, or powershell.exe (MITRE ATT&CK T1505.003), running a download tool such as curl (MITRE ATT&CK T1105), or running reconnaissance commands such as whoami (NSA guidance on web shells). These checks only cover servers you already monitor, so start with a complete list of where PHP runs.
Is there a public proof of concept for CVE-2026-109618?
Not from PHP. Its advisory says a demonstrated exploit exists for mod_php, but PHP hasn’t published exploit code. Treat any exploit shared on social media as unverified.
Does updating WordPress or my plugins fix php2shell?
No. The fix shipped as a new PHP release, and PHP is the server software WordPress runs on, not part of WordPress. WordPress lists PHP as a server requirement and recommends PHP 8.3 or greater. The PHP installation on your server has to be updated.
What time was the PHP security release in US time zones?
PHP scheduled the release for 14:00 UTC on Wednesday, October 21, 2026, which was 10:00 a.m. EDT and 7:00 a.m. PDT. The fixed versions, PHP 8.2.35, 8.3.36, 8.4.27 and 8.5.12, are out now.
Will my hosting provider patch PHP for me?
Only if they manage PHP on your server. Whoever controls the PHP installation has to install the release, so ask your host whether they have applied it, and when. If you’re on PHP 8.1 or older, the regular release doesn’t cover you, so ask your host or LTS vendor for a backported build, or upgrade. PHP’s supported branches are 8.2 through 8.5, and 8.1 reached end of life on December 31, 2025.
