Panellicense

PHP2Shell CVE-2026-109618/109619: patching hosting servers

Two critical unauthenticated PHP RCEs (PHP2Shell) fixed on 21 October 2026. Fixed builds for cPanel ea-php, CloudLinux alt-php, Plesk, and LiteSpeed, plus restarts and mitigations.

News & changelogs6 min readUpdated 2026-10-22
schema: TechArticleschema: FAQPageschema: BreadcrumbList

On 21 October 2026 the PHP project shipped PHP 8.5.12, 8.4.27, 8.3.36, and 8.2.35 to fix two critical flaws, nicknamed PHP2Shell: CVE-2026-109618 and CVE-2026-109619. Both score 9.2 under CVSS 4.0 and allow unauthenticated remote code execution. The bugs are in PHP itself, not in WordPress, a plugin, or the control panel, so every shared server you run is in scope. PHP's own advisory says there are no complete mitigations: updating is the only safe choice.

This is for anyone running cPanel, Plesk, or CloudLinux servers with customer PHP sites. The short version: update every PHP build on the box, including the end-of-life ones customers still use, then restart every PHP worker. A package update alone does not replace processes that are already running.

The two CVEs

CVERoot causeKnown attack path
CVE-2026-109618Out-of-memory handling interrupts PHP while request data is half-initialised; cleanup then trusts invalid dataNo WAF rule covers it; config only narrows it
CVE-2026-109619Request-owned state survives after its memory is freed; the next request on the same worker uses itSession upload progress handling

PHP says the risk is highest for mod_php, where a demonstrated exploit fires before any application code runs. PHP-FPM, php-cgi, and LiteSpeed's lsphp are affected too. watchTowr reports exploitation in its honeypot network since 21 October, and CloudLinux reports a public exploit tool being used for mass scanning.

Fixed builds by platform

Vendor packages carry backported fixes, so the version number is not a reliable check. CloudLinux's patched ea-php84, for example, still reports 8.4.26. Check the package changelog for the CVE IDs instead.

PlatformStatus
Upstream PHP 8.2–8.58.2.35, 8.3.36, 8.4.27, 8.5.12
Upstream PHP 7.4, 8.0, 8.1No PHP release; source backports only
cPanel EasyApache 4 (ea-php52–ea-php85)Fixed packages released
CloudLinux alt-php 5.2–8.5 (CL 7/8/9, Ubuntu 22.04)Fixed in stable
CloudLinux alt-php (CL 10)Fixed; 5.3–8.5 via the TuxCare ELS repo
Plesk for Linux and Windows, PHP 8.2–8.5Fixed
Plesk for Linux, PHP 7.4.33, 8.0.30, 8.1.34Fixed in builds dated 21 October 2026 (same version number)

PHP 8.2 reaches end of life on 31 December 2026, so treat this as a good moment to move customers off it.

cPanel and EasyApache 4

yum clean all
yum update "ea-php*"
/scripts/restartsrv_httpd
/scripts/restartsrv_apache_php_fpm

Confirm the fix landed for each installed version:

rpm -q ea-php84-php-cli --changelog | grep -E 'CVE-2026-(109618|109619)'

To see which domains still run an old PHP you might have forgotten about, whmapi1 php_get_vhost_versions lists every vhost and its version. The PHP handlers comparison explains why a domain on the DSO handler (mod_php) is the one to prioritise.

CloudLinux alt-php

dnf clean all
dnf upgrade 'alt-php*'
rpm -q --changelog alt-php82-common | grep -E 'CVE-2026-(109618|109619)'

On CloudLinux 7 use yum update 'alt-php*'. On CloudLinux 7, 8, and 9, CloudLinux shipped some builds through a temporary php-els repo. Disable it once your packages are current: dnf config-manager --set-disabled php-els (or yum-config-manager --disable php-els on CL 7). Customers selecting old versions in the CloudLinux PHP Selector are covered because alt-php 5.2 to 7.4 were patched too, which is the point of hardened legacy PHP.

Plesk

Update through Tools & Settings › Updates or from the shell:

plesk installer --select-release-current --upgrade-installed-components

Plesk also fixed its own sw-engine PHP, which runs the panel, in Obsidian 18.0.81 Update 4 and 18.0.80 Update 11. Handlers that use the OS vendor's PHP rather than Plesk's builds update through apt or dnf, not the Plesk installer. plesk bin php_handler --list shows which is which; see Plesk PHP handlers compared.

LiteSpeed: restart lsphp explicitly

LiteSpeed on cPanel runs the same ea-php or alt-php binaries, so the package update covers it. But LSWS runs PHP in detached mode, and a web server restart leaves the old, vulnerable lsphp parents running. Kill them:

pkill lsphp

The gradual restart marker is normally gentler, but it leaves idle accounts on the vulnerable binary until their next hit. Detached mode and lsphp restarts covers the trade-off.

Imunify360 virtual patches

CloudLinux pushed three WAF rulesets on 21 October. 8.83 blocks the public exploit on ModSecurity and Coraza but only logs on LiteSpeed. 8.84 blocks the exploit tool and cross-site upload-progress requests on all web servers, LiteSpeed included. 8.85 adds further tool variants. Check and force the update:

cat /etc/apache2/conf.d/modsec_vendor_configs/imunify360-full-apache/VERSION
imunify360-agent update --force modsec-rules

8.84 can break legitimate cross-domain upload forms. More importantly, no rule blocks the CVE-2026-109618 out-of-memory path. As with any Imunify360 virtual patch, this buys time. It does not fix PHP.

Interim mitigations if you can't patch today

From PHP's advisory. Set these in the global php.ini, an FPM pool, or server config, then restart every worker. ini_set() and FPM .user.ini files are applied too late to help.

session.upload_progress.enabled=0
fatal_error_backtraces=0   ; PHP 8.5 only
memory_limit=-1
post_max_size = 32M        ; 8M if the site takes no uploads

The first two target CVE-2026-109619. memory_limit=-1 narrows CVE-2026-109618, but on shared hosting it removes per-account memory protection, so you are relying on CloudLinux LVE limits or cgroups to contain runaway scripts. Do not substitute RLIMIT_AS or RLIMIT_DATA: PHP warns they can trigger the vulnerable allocation failure.

Patched packages reach you through active vendor channels. A server with a lapsed cPanel license or CloudLinux license stops receiving them.

What is PHP2Shell?+
The nickname for CVE-2026-109618 and CVE-2026-109619, two PHP core flaws fixed on 21 October 2026. Both allow unauthenticated remote code execution and score 9.2 under CVSS 4.0.
Which PHP versions fix CVE-2026-109618?+
Upstream PHP 8.5.12, 8.4.27, 8.3.36, and 8.2.35. PHP 8.1 and older get no official release, but cPanel, CloudLinux, and Plesk ship backported builds, often with an unchanged version number.
How do I check if ea-php is patched on cPanel?+
Check the package changelog rather than the version: rpm -q ea-php84-php-cli --changelog | grep -E 'CVE-2026-(109618|109619)'. Repeat for each installed ea-php version.
Does Imunify360 protect against PHP2Shell?+
Partly. Rulesets 8.83 to 8.85 block the public exploit for CVE-2026-109619 on all web servers from 8.84 onward, but no rule covers the CVE-2026-109618 out-of-memory path. Update PHP regardless.
Do I need to restart PHP after updating?+
Yes. Restart Apache and PHP-FPM on cPanel, the plesk-php FPM services on Plesk, and run pkill lsphp on LiteSpeed. Running workers keep the old, vulnerable code in memory until they are replaced.

Next steps

changelog
bridge-stp-uaf (CVE-2026-72389): the CloudLinux kernel advisory
A use-after-free in the kernel bridge STP timer code lets a local user who can configure a network bridge become root. CloudLinux 7h and 8 need the modprobe mitigation now.
5 min read
changelog
Three CISA KEV kernel CVEs: patching CloudLinux servers now
CISA lists CVE-2025-39964, CVE-2026-53266, and CVE-2025-39682 as exploited in the wild. Per-branch CloudLinux status, kernel builds, livepatches, and the one mitigation.
5 min read
changelog
PwnEscape CVE-2026-99999: KVM escape status for CloudLinux
PwnEscape (CVE-2026-99999) lets a VM guest write into host IPv4 headers. CloudLinux branch status, the KernelCare livepatch, and mitigations for VPS and shared hosts.
5 min read
changelog
RtabRace (CVE-2026-68138): mitigating the kernel race on CloudLinux
A traffic-control race in the Linux kernel lets any shell user panic a shared server on demand. CloudLinux 8 and 7 Hybrid need the sysctl mitigation today — here's the command and the patch status.
5 min read
changelog
CVE-2026-33278: the cpanel-unbound DNSSEC RCE, and how to check for it
A critical Unbound DNSSEC validator bug shipped as cpanel-unbound puts remote code execution one malicious signed zone away, no login required. Patched builds and how to check exposure.
7 min read
changelog
CVE-2026-65643: patch the cPanel domain parking root vulnerability
CVE-2026-65643 lets an authenticated cPanel user with parked or addon-domain access create arbitrary server files and potentially execute code as root. Check the fixed builds and update now.
3 min read
Switch in an afternoon

Switch from your current reseller — free.

We migrate active cPanel, Plesk, LiteSpeed and CloudLinux licenses from any reseller. We prorate the first month so you never pay twice, and your customers see zero downtime during the swap.