Skip to content

How to patch PHP for CVE-2026-109618 in rConfig

How to patch PHP for CVE-2026-109618 and CVE-2026-109619

Section titled “How to patch PHP for CVE-2026-109618 and CVE-2026-109619”

This page gives example steps for updating PHP on the server that hosts rConfig to a release that fixes CVE-2026-109618 and CVE-2026-109619 (known as PHP2Shell). It covers the rConfig Docker image, Ubuntu, CentOS / Rocky Linux and RHEL, and accompanies the rConfig Security Advisory rCFG-SA-2026-01.

Use this page as a reference when you and your systems team update PHP on a server running rConfig Pro, Vector or Core. The PHP project says all PHP installations serving web requests are at risk, including PHP-FPM, Apache with mod_php, php-cgi, FrankenPHP and LiteSpeed, with the highest risk for mod_php. The rConfig Docker image runs PHP as an Apache module (mod_php).

  • Root or sudo access to the rConfig server, or to the Docker host
  • A current backup of the rConfig application directory and database. See backing up rConfig before an update
  • A maintenance window agreed with your team. Apache, PHP-FPM and the Horizon queue workers restart during the update
  • Your rConfig version, so you can match it to the PHP version it runs on in the advisory’s rConfig Pro and Core tables

Which PHP version fixes the vulnerabilities?

Section titled “Which PHP version fixes the vulnerabilities?”

The PHP project released the fixed versions on 21 October 2026. Update to the fixed release for the PHP version you already run.

Your PHP versionFirst fixed releaseNotes from the advisory
8.5.x8.5.12Replaces 8.5.11
8.4.x8.4.27Replaces 8.4.26
8.3.x8.3.36Replaces 8.3.35
8.2.x8.2.35Replaces 8.2.34. PHP 8.2 reaches end of life on 31 December 2026
8.1 or olderNo update from the PHP projectUse a vendor backport, build from source with the PHP security team’s backport, or upgrade to a supported PHP version. Restrict access and contact prosupport@rconfig.com before changing PHP

Linux distributions and LTS vendors received the patches in advance, so check your vendor for updated packages. Third-party repositories can take longer. The advisory’s Availability of fixed PHP packages table shows the latest known status for Remi, ppa:ondrej/php and the rConfig Docker image.

If you have not already, restrict access to rConfig, ideally to a VPN or trusted management IP addresses. Do not expose the web interface directly to the internet. Keep the restriction in place until PHP is updated.

For firewall examples, see rConfig security hardening.

2. Check your current PHP version and how PHP is served

Section titled “2. Check your current PHP version and how PHP is served”
  1. Check the PHP CLI version:

    Terminal window
    php -v
  2. Check whether Apache runs PHP as a module (mod_php):

    Terminal window
    # Ubuntu
    apache2ctl -M 2>/dev/null | grep -i php
    # CentOS / Rocky / RHEL
    httpd -M 2>/dev/null | grep -i php

    A line such as php_module (shared) means mod_php.

  3. Check whether PHP-FPM is running:

    Terminal window
    systemctl list-units --type=service | grep -i fpm

Note the results. They tell you which services to restart and, if needed, which workaround applies.

rConfig V8 Pro Docker image

The rConfig image is built on the official php:8.4-apache-bookworm image. That base image was updated on Docker Hub on 21 October 2026, but the rConfig image has to be rebuilt on it. PHP in the image is compiled from source, so it cannot be patched with apt inside the container.

  1. Check the advisory or contact prosupport@rconfig.com to confirm the updated rConfig image is available. Until it is, see what to do if the fix is not available yet.

  2. Record the PHP version the container runs today, so you can compare it after the update:

    Terminal window
    docker exec rconfig8docker-app-1 php -r 'echo PHP_VERSION, PHP_EOL;'
  3. Back up the data directory from the root of your rconfig8docker clone:

    Terminal window
    tar -czf rconfig-data-backup-$(date +%Y%m%d).tar.gz ./data
  4. Pull the updated image:

    Terminal window
    docker compose pull

    Check the output for the app image. Pulled or Downloaded newer image means a new image arrived. Image is up to date means nothing changed, so the updated image is not on your tag yet. Stop here and contact prosupport@rconfig.com.

  5. Recreate the container so it runs the new image:

    Terminal window
    docker compose up -d --force-recreate
  6. Confirm the PHP version inside the container is now 8.4.27 or later:

    Terminal window
    docker exec rconfig8docker-app-1 php -r 'echo PHP_VERSION, PHP_EOL;'

    If it still shows the version you recorded in step 2, the container is not running the updated image. Do not treat the server as patched. Keep access restricted, apply the interim measures

  7. Confirm all services are running:

    Terminal window
    docker exec rconfig8docker-app-1 supervisorctl status
  1. Run php -v (or docker exec rconfig8docker-app-1 php -v for Docker) and confirm the version is a fixed release. Compare it with the version you noted in step 2: if it has not changed, PHP was not updated. For vendor backports, where the version number stays the same, confirm the package changelog lists both CVE IDs instead.
  2. Log in to rConfig and open Settings → System & Health.
  3. Check the PHP version in the System Info card. This is the PHP that Apache serves, which can differ from the CLI if a service was not restarted.
  4. Run a device backup and open a few pages to confirm rConfig works normally.

What if the fixed PHP package is not available yet?

Section titled “What if the fixed PHP package is not available yet?”

Updating PHP is the only complete solution. The measures in the advisory reduce exposure to specific attack paths but do not make an installation safe. Keep access restricted while you wait for the fixed package.

From the advisory:

  • CVE-2026-109618 (OOM corruption): set memory_limit=-1 in a way applications cannot override (for example php_admin_value in the FPM pool or Apache configuration) and check that nothing puts a finite limit back. Set a low post_max_size (8M if you do not need file uploads, 32M if you do) and keep upload_max_filesize below it. Use a container or cgroup limit as an availability boundary. Do not use RLIMIT_AS or RLIMIT_DATA.
  • CVE-2026-109619 (stale global state): set session.upload_progress.enabled=0 and restart every PHP worker, using php.ini, an FPM pool or server configuration that applies before request parsing. On PHP 8.5, also set fatal_error_backtraces=0.

The examples below show one way to apply these settings on a standard rConfig install. The values are examples. Agree them with your systems team.

  1. Create the configuration file. On a Docker host, run these commands inside the container after docker exec -it rconfig8docker-app-1 bash.

    Terminal window
    cat > /etc/apache2/conf-available/zz-php-cve-2026-10.conf <<'EOF'
    <IfModule php_module>
    php_admin_value memory_limit -1
    php_admin_value post_max_size 32M
    php_admin_value upload_max_filesize 16M
    php_admin_flag session.upload_progress.enabled off
    </IfModule>
    EOF
  2. Enable it:

    Terminal window
    a2enconf zz-php-cve-2026-10
  3. Restart Apache. On Ubuntu:

    Terminal window
    sudo systemctl restart apache2

    Inside the Docker container:

    Terminal window
    supervisorctl restart apache2
  4. On a Docker host, set a container memory limit as an availability boundary. Size it for your server, for example:

    Terminal window
    docker update --memory 4g --memory-swap 4g rconfig8docker-app-1

On PHP 8.5 only, also add php_admin_flag fatal_error_backtraces off (Apache) or php_admin_flag[fatal_error_backtraces] = off (PHP-FPM).

Once PHP is patched, review these settings with your systems team. memory_limit=-1 removes PHP’s per-request memory cap, so you may want to return it to your previous value.

If your rConfig server was reachable from the public internet, rotate all secrets and passwords on the server after you have patched. Depending on your environment, this can include OS account passwords and SSH keys, the database password in the rConfig .env file, rConfig user passwords and API tokens, and the device credentials stored in rConfig.