Insight

PHP2Shell: Critical PHP RCE Vulnerabilities (CVE-2026-109618 & CVE-2026-109619)

Insight Published Updated 9 min read
Security alert for php2shell vulnerabilities CVE-2026-109618 and CVE-2026-109619, showing an elePHPant mascot on a server.

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.

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
VulnerabilitiesCVE-2026-109618 and CVE-2026-109619
TypeRemote code execution (RCE) in PHP core
SeverityCVSS v4.0 9.2 (out of 10), per PHP’s advance notice
Affected versionsPHP 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 releasePHP 8.2.35, 8.3.36, 8.4.27 and 8.5.12, released Wednesday, October 21, 2026
Gets a fixSupported branches, PHP 8.2 through 8.5
End-of-LifePHP 8.1 and older
Exploited in the wildMillions 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:32The 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:54cve.org published CVE-2026-109618 and CVE-2026-109619, with the affected versions.
October 21PHP released 8.2.35, 8.3.36, 8.4.27 and 8.5.12 with a security advisory.
October 23PHP 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.

MeasureCountShare
Sites running PHP (top 15M)6,689,58145% of the top 15M sites
Expose a PHP version1,719,81826% of PHP sites
On supported branches (8.2-8.5)884,76951% of version-visible
On End-of-Life branches (8.1 and older)835,04949% 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%.

Bar chart of the most common PHP versions among sites that reveal their version, October 20, 2026: PHP 7.x or older 34% (End-of-Life), PHP 8.3 23%, PHP 8.2 16%, PHP 8.1 9% (End-of-Life) and PHP 8.4 9%.

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.

X thread showing The PHP Foundation's critical Oct 21, 2026 security alert, with Cloudflare confirming they have it covered.

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 = Off so 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.

Reference

Cite this page

Dany Mirza. “PHP2Shell: Critical PHP RCE Vulnerabilities (CVE-2026-109618 & CVE-2026-109619).” Melurna, October 20, 2026. https://www.melurna.com/blog/php2shell-php-vulnerability-cve-2026-109618/