CloudLinux OS 7, 8, 9 and 10, with cPanel or another panel
How to update PHP on CloudLinux
CloudLinux fixed PHP2Shell in its alt-php builds for PHP Selector, its ea-php builds for cPanel and its native PHP packages between 21 and 23 October 2026, including branches as old as 5.2. Most fixes are backports that keep the old version number, so run a regular update, restart lsphp and PHP-FPM, then check each changelog.
Last reviewed against CloudLinux's status page, CloudLinux's documentation, cPanel and php.net.
CloudLinux's fixed packages
Where each PHP family stands
CloudLinux opened a status incident for CVE-2026-109618 and CVE-2026-109619 on 20 October 2026, the day the PHP project gave notice of the release, and has posted package news there since. The table below is its position at the last update. Each row is a separate set of packages, and a cPanel server usually has at least two of them installed.
Last update: 23 October 2026, 21:36 UTC
The incident still read "Identified" on 27 October 2026, with no newer entry. The final update corrected earlier advice about the ELS alt-php repository: CloudLinux now asks servers to keep it enabled.
| Packages | CloudLinux's status | How to install |
|---|---|---|
| alt-php on CloudLinux OS 7, 8 and 9 | Fixed in stable for alt-php 5.2 to 5.6, 7.0 to 7.4 and 8.0 to 8.5 (release completed 22 October) | Regular update of alt-php* |
| alt-php on CloudLinux OS 10 | alt-php 5.2 fixed in stable; every other version fixed in the ELS alt-php repository, where CloudLinux OS 10 already gets alt-php | Regular update of alt-php* |
| alt-php on CloudLinux OS for Ubuntu 22.04 | Fixed in stable for alt-php 5.2, 5.6, 7.0 to 7.4 and 8.0 to 8.5 | apt-get update, then apt-get upgrade |
| alt-php on CloudLinux 6 | Listed as not confirmed yet | Interim settings, then decide on exposure |
| ea-php52 to ea-php85 (cPanel EasyApache 4) | Fixed in stable on CloudLinux OS 7, 8, 9 and 10 (from 21 October) | Regular update of ea-php*, then restart Apache and PHP-FPM |
| Native php packages | Fixed in stable for every affected version (from 22 October) | Regular package update |
Primary sources: CloudLinux's PHP2Shell post and its status incident. The upstream fixed releases and the interim settings are on PHP2Shell explained.
Five steps, run as root
Patch every PHP family on the server
These are CloudLinux's own commands, gathered into one order. Sites stay on the version each account has chosen; nothing here changes which PHP a site uses.
-
List what is installed
# alt-php: one -common package per installed version rpm -qa 'alt-php*-common' | sort # ea-php, on servers that run cPanel rpm -qa 'ea-php*-php-cli' | sort # The versions PHP Selector offers, with the path to each binary selectorctl --listA hosting server can hold many alt-php versions at once, and each one that can serve a site needs the fix. Keep this list: it is the checklist for step 5.
-
Make sure cloudlinux-release is current
rpm -q cloudlinux-release # Older than CloudLinux's current list? Update it, then clear the cache dnf update cloudlinux-release && dnf clean all # CloudLinux OS 8, 9, 10 yum update cloudlinux-release && yum clean all # CloudLinux OS 7CloudLinux found servers that could not see the fixed packages because this package was out of date. On 22 October 2026 it listed the current versions as 7.9-2.17 for CloudLinux OS 7, 8.10-16 for 8, 9.8-3 for 9 and 10-5 for 10.
-
Run a regular update, not a security-only one
# CloudLinux OS 8, 9 and 10 dnf clean all dnf upgrade 'alt-php*' dnf upgrade 'ea-php*' # cPanel servers # CloudLinux OS 7 yum clean all yum update 'alt-php*' 'ea-php*' # CloudLinux OS for Ubuntu 22.04 apt-get update && apt-get upgradeNative php packages arrive with an ordinary full
dnf upgrade(oryum updateon CloudLinux OS 7). Avoid--securityhere: CloudLinux had not published advisory metadata for these packages, so a security-only run passes over them. -
Restart PHP so the new build is the one serving
# cPanel: Apache first, then cPanel's PHP-FPM service /scripts/restartsrv_httpd /scripts/restartsrv_apache_php_fpm # Any lsphp still running from before the update? ps -C lsphp -o pid,user,lstart,argsThe
lstartcolumn shows when each lsphp process began. Anything older than the update is still running the vulnerable code: see restarting lsphp below. On LiteSpeed Web Server, PHP is detached and needs its own restart, covered in the LiteSpeed guide. -
Confirm each package carries the fix
# Backported builds: the newest changelog entries name the CVEs rpm -q --changelog alt-php74-common | grep -E 'CVE-2026-(109618|109619)' rpm -q --changelog ea-php81-php-cli | grep -E 'CVE-2026-(109618|109619)' # Renumbered alt-php82 to alt-php85: read the version instead rpm -q alt-php85-commonTo check every alt-php version in one pass, count the CVE mentions in each changelog. A zero is fine only on a renumbered alt-php82 to alt-php85 build at or above 8.2.35-1, 8.3.36-1, 8.4.27-1 or 8.5.12-1; anywhere else it means that version is still unpatched.
for p in $(rpm -qa --qf '%{NAME}\n' 'alt-php*-common' | sort); do printf '%s ' "$p" rpm -q --changelog "$p" | grep -c -E 'CVE-2026-(109618|109619)' done
alt-php, ea-php and native PHP
Which build a CloudLinux site actually runs
CloudLinux's PHP Selector setup guide for cPanel expects the server's default PHP to be ea-php, not alt-php. PHP Selector calls that default "native", so an account left on native is served by cPanel's ea-php version and any other choice in PHP Selector means alt-php.
alt-php, behind PHP Selector
CloudLinux's own PHP builds, installed side by side under /opt/alt/ and offered to each account through PHP Selector. Its version table runs from alt-php 5.1 up to 8.5, depending on the CloudLinux release.
ea-php, behind cPanel's MultiPHP
The EasyApache 4 packages that cPanel installs. CloudLinux's fixed ea-php builds carry a cloudlinux tag in their release string, and it published them for every version from ea-php52 to ea-php85.
Native php from the OS
The operating system's own php packages, outside both families. CloudLinux fixed PHP 8.3 on CloudLinux OS 10, 8.0 to 8.3 on 9, and 7.2, 7.3, 7.4, 8.0 and 8.2 on 8. PHP 5.4 on 7 comes from TuxCare ELS.
lsphp, the process doing the work
With mod_lsapi or LiteSpeed in front, alt-php and ea-php run as lsphp processes. An lsphp process that started before the update is still executing the old build.
CloudLinux's ea-php build numbers
Either build in a row is fixed. The renumbered builds only bring the version in line with php.net and with cPanel's own EasyApache 4 release of 21 October 2026.
| Package | Backported build, 21 October | php.net-numbered build, 23 October |
|---|---|---|
| ea-php85 | 8.5.11-2.elX.cloudlinux.1 | 8.5.12-1 (CloudLinux OS 8, 9, 10, Ubuntu 22.04) |
| ea-php84 | 8.4.26-2.elX.cloudlinux.1 | 8.4.27-1 (CloudLinux OS 8, 9, 10, Ubuntu 22.04) |
| ea-php83 | 8.3.35-2.elX.cloudlinux.2 | 8.3.36-1 (CloudLinux OS 7 to 10, Ubuntu 22.04) |
| ea-php82 | 8.2.34-2.elX.cloudlinux.1 | 8.2.35-1 (CloudLinux OS 7 to 10, Ubuntu 22.04) |
| ea-php81 | 8.1.34-4.elX.cloudlinux.1 | None: backport only |
| ea-php80 | 8.0.30-11.elX.cloudlinux.1 | None: backport only |
| ea-php74 | 7.4.33-18.elX.cloudlinux.13 | None: backport only |
-
elXstands for el7, el8, el9 or el10. ea-php52 to ea-php73 received backported builds on 21 October too, for example ea-php565.6.40-25.elX.cloudlinux.18. -
For alt-php, CloudLinux gives alt-php85
8.5.11-5as an example of an early fixed build, and lists8.2.35-1,8.3.36-1,8.4.27-1and8.5.12-1as the renumbered alt-php82 to alt-php85 builds for CloudLinux OS 7, 8 and 9. -
Native PHP 8.3 on CloudLinux OS 10, 8.2 and 8.3 on 9, and 8.2 on 8
were rebased to 8.2.35 or 8.3.36, and CloudLinux says their
changelogs name no CVE: check those with
rpm -q php-cli. Module streams and native package names are explained in the RHEL family guide.
mod_lsapi and lsphp
Restarting lsphp under Apache
CloudLinux's mod_lsapi PRO is an Apache module that passes PHP requests to an lsphp parent process, which forks children to run them. The PHP2Shell flaw that leaves stale state in a worker makes this matter: a long-lived lsphp parent keeps old code and old memory until it is replaced.
Check whether an Apache restart reaches lsphp
# Does Apache keep lsphp alive across restarts? "Off" means it does
grep -rh 'lsapi_terminate_backends_on_exit\|lsapi_criu' /etc/apache2 /etc/httpd 2>/dev/null lsapi_terminate_backends_on_exit
is On by default, which stops lsphp whenever Apache restarts. Some
servers set it Off to keep the opcode cache warm, and CloudLinux's
documentation is explicit that lsphp then survives the restart. On
those servers, use the cold restart CloudLinux's troubleshooting
notes give:
service httpd stop; sleep 2; killall lsphp; service httpd start If CRIU is switched on
With lsapi_criu On, mod_lsapi
freezes lsphp into images and restores from them later. The
documentation says those images survive an Apache restart and
must be deleted by hand whenever php.ini or a file in php.d
changes, which applies to the interim settings. The images live in
the lsapi_criu_imgs_dir_path
folder, /var/mod_lsapi/ unless it
has been moved.
Servers that use PHP-FPM rather than mod_lsapi follow the PHP-FPM restart guide; CloudLinux's documentation asks for PHP-FPM to be disabled wherever mod_lsapi is the handler.
PHP Selector from the command line
Find who runs which alt-php version
selectorctl is the tool behind PHP
Selector. Use it to see which accounts sit on old branches, so
you know whose sites depend on CloudLinux's backported fixes.
# Accounts on a given alt-php version
selectorctl --list-users --version=7.4
# One account's view: "s" marks the version it has selected
selectorctl --user-summary --user=USERNAME An account that is not inside CageFS does not use PHP Selector, and the summary command reports that rather than a version list.
Moving accounts off an end-of-life branch
# Move the accounts on alt-php 7.4 to alt-php 8.3
selectorctl --change-to-version=8.3 --version=7.4 This changes the PHP version real sites run, so test the applications first and warn the account owners. Accounts can also choose a version themselves in cPanel's Select PHP Version page, where the host has enabled it in Feature Manager.
One interim setting for every alt-php version
Where an alt-php version cannot be patched yet, the PHP project's interim setting for CVE-2026-109619 can be applied to all alt-php versions at once. CloudLinux reads options from a global file and ignores its section headings:
# /etc/cl.selector/global_php.ini
[Global PHP Settings]
session.upload_progress.enabled = 0 selectorctl --apply-global-php-ini Then restart PHP as in step 4. The setting reduces exposure; it does not fix either CVE, and CVE-2026-109618 has no complete configuration workaround. ea-php versions take the same setting through cPanel's MultiPHP INI Editor. The full list of interim measures is in the interim settings.
The ALT-ELS repositories
Where alt-php updates come from now
CloudLinux is moving alt-php delivery to one repository scheme,
called ALT-ELS, shared across its products and served from
repo.alt.tuxcare.com.
CloudLinux OS 10 already takes alt-php only from there, which is
why most of its PHP2Shell fixes were listed in the ELS alt-php
repository rather than in stable.
- Licence. CloudLinux's documentation says access depends on a valid licence and a registered machine. If the licence lapses, the server stops receiving PHP Selector updates.
- Tokens. On CloudLinux OS 10 the
access token is linked into dnf's variables automatically, for PHP
as
/etc/dnf/vars/phpelstoken. - CloudLinux OS 7, 8 and 9. Some
servers added the repository (
php-els) on 21 October to get fixed alt-php early. CloudLinux's last update asks them to keep it, since these releases will move to the same scheme.
# The machine must be registered with CLN for the repository to answer
ls /etc/sysconfig/rhn/jwt.token
# Switch the ELS alt-php repository back on if it was disabled
dnf config-manager --set-enabled php-els # CloudLinux OS 8, 9
yum-config-manager --enable php-els # CloudLinux OS 7 Confirm it worked
Checks before you close the job
- 1. No alt-php version is left unchecked. The loop from step 5 printed a non-zero count, or a renumbered version, for every line of the step 1 list.
- 2. ea-php and native PHP were checked too. Each ea-php package matches a row of the build table or its changelog names both CVEs.
- 3. No lsphp process predates the update.
ps -C lsphp -o pid,lstartshows only start times after the package update, and cPanel's PHP-FPM service was restarted. - 4. A real site answers with the patched build. Pick one site per alt-php version and check the PHP version it reports. A backported build reports the old number, so match it against the changelog result, not against php.net.
CISA listed both CVEs as known to be exploited on 26 October 2026. A shared server that ran an unpatched alt-php version on the internet before its update should be checked for web shells in every account: has your PHP site been compromised?
Troubleshooting
When the CloudLinux update stalls
The update finds nothing to install
Go back to step 2. CloudLinux's first suggestion for this
symptom is an outdated cloudlinux-release
package; update it, clear the cache and run the update again.
"No match for argument: els-php-release"
The release package is too old to provide the ELS alt-php repository. CloudLinux needs 8.10-16 or newer on CloudLinux OS 8 and 9.8-3 or newer on 9, and notes that the update may have to run more than once to get there.
The php-els repository refuses access
Check that /etc/sysconfig/rhn/jwt.token
exists and that the licence is active. Without both, the
repository will not serve packages.
A scanner flags alt-php 8.5.11 or ea-php 8.4.26
CloudLinux expects this: its backported builds keep version numbers below php.net's. Keep the changelog output from step 5 as the evidence, or install the renumbered build where one exists.
Still on CloudLinux 6
CloudLinux had not confirmed fixed alt-php for CloudLinux 6 by its last update. Apply the interim setting above, then decide whether the sites should stay online until the server is rebuilt on a supported release.
For ea-php on servers without CloudLinux, see updating PHP in cPanel. Other distributions are covered from the Linux overview, including Ubuntu and Debian, containers in the Docker guide, and every other setup in the main update guide.
Quick answers
CloudLinux and alt-php questions
Why does my fixed alt-php still show an older PHP version?
Because CloudLinux patched most builds in place. The first fixed alt-php85, for example, was 8.5.11-5: the PHP2Shell patch applied to PHP 8.5.11 rather than a move to 8.5.12. CloudLinux later published builds carrying php.net's numbers for alt-php82 to alt-php85, but says servers on the earlier fixed builds were already protected. A scanner that compares version numbers alone will report a false positive.
Does updating ea-php also fix the alt-php versions?
No. They are separate packages. An account set to native in PHP Selector runs the ea-php version chosen in cPanel's MultiPHP Manager, while an account that has picked a version in PHP Selector runs alt-php. Update both families on a cPanel server, even if you think every site uses one of them.
Are old alt-php versions such as 5.6 and 7.4 patched?
On CloudLinux OS 7, 8 and 9, yes: CloudLinux lists fixed builds for alt-php 5.2 to 5.6 and 7.0 to 7.4 alongside 8.0 to 8.5, and on CloudLinux OS 10 they come from the ELS alt-php repository. The PHP project publishes no release for those branches, and alt-php 5.1 is not on CloudLinux's fixed list. A patched old branch is still an unsupported one.
Why does yum --security not offer the PHP fix on CloudLinux?
Because CloudLinux had not yet published the security metadata (OVAL and UpdateInfo) for these packages when its status page was last updated on 23 October 2026. Security-only filters therefore skip them. Run the ordinary update shown in step 3 instead.
Should the php-els repository stay switched on?
Yes. On 23 October 2026 CloudLinux withdrew its earlier advice that servers could disable it after the fix. It says the ELS alt-php repository is becoming the single source of alt-php packages: CloudLinux OS 10 already uses only that repository, and CloudLinux OS 7, 8 and 9 are due to follow.
Know your exposure
Find every PHP server you run
Patching the server you know about is the easy part. A vulnerability scan finds the forgotten staging site, the old microsite and the appliance with PHP inside, then tells you which ones are still exposed.