Not php.net · Not NVD · Not CISA

PHP Vulnerability Tracker

Unofficial briefing on PHP security vulnerabilities

English简体中文

Security alert

PHP2Shell: upgrade PHP. That is the only complete fix.

CVE-2026-109618 and CVE-2026-109619 are critical, unauthenticated remote-code-execution bugs in PHP itself. The PHP project shipped fixes on 21 October 2026 for the supported 8.2–8.5 branches. Restart PHP after you upgrade. A firewall is not a substitute.

Remediation steps

Remediation

How to fix PHP2Shell: upgrade PHP and restart workers

The PHP project, AWS, and CISA agree on the operational point: upgrading is the only complete fix for CVE-2026-109618 and CVE-2026-109619. The commands below are the usual shapes of that work. Package versions still depend on your distribution’s advisory. A CLI that prints a fixed version does not prove the pool behind your website has been restarted onto that binary.

Last updated

Target versions

Source tarballs and Windows builds are on the PHP downloads page. Linux distributions and LTS vendors received patches ahead of the public release, according to php.net, so the distro package is often the right path. The same note says the volunteer Remi repository at rpms.remirepo.net would not have the updates on 21 October, and urges people who rely on it to switch to distribution packages or build from source.

Debian, Ubuntu, and other apt systems

Refresh metadata and install the updated php packages your archive actually published. Names track the minor branch (php8.3-fpm, php8.3-cli, php8.3-common, and the Apache module package if you use mod_php). If the candidate version is still below the fix, you are waiting on the distro, not on a missing flag.

Illustrative apt flow for the 8.3 packages. Confirm the candidate version is 8.3.36 or later before you call the job done.
sudo apt-get update
apt-cache policy php8.3-cli php8.3-fpm php8.3-common
sudo apt-get install --only-upgrade php8.3-cli php8.3-fpm php8.3-common
php8.3 -v
# Web SAPI, not just the CLI:
php-fpm8.3 -v
sudo systemctl restart php8.3-fpm
# If Apache loads mod_php, restart Apache as well:
sudo systemctl restart apache2

RHEL, Alma, Rocky, Fedora: dnf or yum

Illustrative dnf flow. On older derivatives, yum update php php-fpm php-cli is the same idea. Trust the vendor errata for the version string.
sudo dnf clean expire-cache
sudo dnf update php php-cli php-fpm php-common
php -v
php-fpm -v
sudo systemctl restart php-fpm
# mod_php under httpd:
sudo systemctl restart httpd

Docker and other images

Rebuild and redeploy. Pulling a new base image does nothing until the workload that serves traffic is replaced. Official image tags usually follow PHP’s version; confirm the tag exists on Docker Hub before pinning it. Google Cloud’s note for Cloud Run and GKE is the same idea: rebuild the image you deploy, unless you are on a serverless base image Google says it is replacing for you.

Pin a patched tag, rebuild, and recycle the service. The apache tag is the mod_php-style official image; use the variant you already run.
FROM php:8.3.36-fpm
# or: php:8.3.36-apache, php:8.4.27-fpm, php:8.2.35-fpm, php:8.5.12-cli

# then, on the host:
# docker pull php:8.3.36-fpm
# docker build -t your-app:php2shell-fix .
# redeploy and confirm the running container's PHP version

cPanel

  1. Update cPanel itself so EasyApache has a patched PHP build available. Menus move; the cPanel documentation is the authority if the labels differ.
  2. In WHM, open EasyApache 4 and provision a PHP version at or above the fix for that branch. MultiPHP Manager is where domains are pointed at a specific PHP version.
  3. Switch internet-facing domains off any PHP 8.1 or older handler unless your vendor has stated that the build includes the backport.
  4. Restart Apache and PHP-FPM from WHM, then check a domain’s PHP version the same way you would check a pool, and remove any temporary probe page.

Plesk

  1. Install Plesk and system-package updates. The Plesk documentation covers the current click-path.
  2. Under Tools & Settings, review Updates and the PHP handler list. Domain PHP Settings shows which version a subscription actually runs.
  3. Select a patched handler (8.2.35, 8.3.36, 8.4.27, or 8.5.12, or a vendor build you have verified). Apply it to public sites first.
  4. Restart the PHP service Plesk is using and confirm with a version check against the domain, not only the panel host.

宝塔面板 (BT Panel)

宝塔’s notice, updated 22 October 2026, says the Linux and Windows panels have synced 8.2.35, 8.3.36, 8.4.27, and 8.5.12. Linux-only packages numbered 7.4.34, 8.0.31, and 8.1.35 are 宝塔 builds, not PHP project releases. The click path and the incomplete Windows setting are on the BT Panel page.

mod_php compared with PHP-FPM

Both are in the PHP project’s at-risk list. mod_php is the highest risk because the demonstrated unauthenticated path fires before application code. Restarting Apache is what reloads mod_php. PHP-FPM is a separate process: restart every pool (systemctl restart php8.3-fpm, or the equivalent unit), and remember that pools can pin their own binary. php on your shell PATH can be a different build from the pool. FrankenPHP, php-cgi, and LiteSpeed are named by PHP as serving web requests and therefore in scope; follow those vendors’ upgrade instructions rather than assuming an apt php-fpm package covers them.

Interim measures, which PHP says are incomplete

Use these only as a bridge copied from the php.net advisory. They reduce specific paths. They do not make a host safe. Put them in php.ini or in an admin-level pool or Apache setting (php_admin_value). ini_set() and per-directory .user.ini run too late for the session-upload path, according to PHP.

CVE-2026-109618

CVE-2026-109619

Web application firewalls

CISA says a web application firewall may provide some protection until systems are updated. Cloudflare says managed rules covering this issue were deployed for customers on free and paid WAF plans starting 21 October 2026 at 03:02 UTC, developed with the PHP Foundation and others while the bug was still under embargo, and that customers should patch anyway. A rule can be bypassed. Cloudflare’s own post says it watched payloads change as attackers tried to get around the rules. Keep the WAF. Do not use it as the fix.

After the upgrade

Sources

Outbound links leave this site. We do not host exploit code.

  1. News archive 2026: security advisory, 21 October 2026 — PHP project (php.net)
  2. PHP downloads — PHP project (php.net)
  3. Today’s PHP security release, and how we’re strengthening PHP security — The PHP Foundation
  4. Critical vulnerabilities in PHP require immediate patching (21 October 2026) — CISA
  5. Amazon Threat Intelligence identifies PHP2Shell exploitation prior to public disclosure in MadPot — AWS Security Blog
  6. Cloudflare deploys protections against php2shell vulnerability — Cloudflare
  7. Critical security issue affecting PHP — UK NCSC
  8. Notice: php2shell, critical PHP vulnerabilities (status as of 21 October 2026, 20:00 UTC) — Expel
  9. Responding to core PHP vulnerabilities CVE-2026-109618 and CVE-2026-109619 — Google Cloud
  10. php image on Docker Hub — Docker Official Images
  11. cPanel documentation — cPanel
  12. Plesk documentation — Plesk
  13. PHP 与 Node.js 紧急安全更新公告(更新于 2026-10-22) — 宝塔面板 (BT Panel)
  14. php2shell product-inventory notes — NCSC-NL