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.

  1. 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 --list

    A 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.

  2. 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 7

    CloudLinux 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.

  3. 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 upgrade

    Native php packages arrive with an ordinary full dnf upgrade (or yum update on CloudLinux OS 7). Avoid --security here: CloudLinux had not published advisory metadata for these packages, so a security-only run passes over them.

  4. 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,args

    The lstart column 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.

  5. 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-common

    To 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.

3D group of users around a secured server, for alt-php chosen per account

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.

3D hosting servers in the cloud, for cPanel's ea-php packages on CloudLinux

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.

3D server rack, for the operating system's own PHP packages

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.

3D rocket lifting off, for lsphp under mod_lsapi or LiteSpeed

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
  • elX stands for el7, el8, el9 or el10. ea-php52 to ea-php73 received backported builds on 21 October too, for example ea-php56 5.6.40-25.elX.cloudlinux.18.
  • For alt-php, CloudLinux gives alt-php85 8.5.11-5 as an example of an early fixed build, and lists 8.2.35-1, 8.3.36-1, 8.4.27-1 and 8.5.12-1 as 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. 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. 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. 3. No lsphp process predates the update. ps -C lsphp -o pid,lstart shows only start times after the package update, and cPanel's PHP-FPM service was restarted.
  4. 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.

Updating ea-php in cPanel

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.

PHP end of life dates

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.

3D rocket illustration above the call to find every exposed PHP server

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.