Security advisory · Disclosed October 21, 2026

PHP remote code executionphp2shell check

CVE-2026-109618 and CVE-2026-109619 let attackers run code on PHP web servers without authentication. Check your site's exposure by address and find the fix for your environment.

CVSS v4.0
9.2 Critical(act now)
Attack
Remote · No authentication

Based on information public as of October 22, 2026

Site check

Judged from the PHP version exposed in response headers. No attack requests are sent.

Sends extra requests to 5 well-known phpinfo paths in the web root. If one is found, you get the real version and settings even when headers hide the version.

Paths checked and caveats
  • Paths: /phpinfo.php, /info.php, /test.php, /i.php, /php_info.php
  • One GET request per path, stopping at the first phpinfo page. Only the first 512 KB of a response is read.
  • These are not attack requests, but they ask for unpublished paths, so the site's security devices or logs may record them as path probing.
  • Only the path found, PHP version, SAPI and related settings are stored. Page content is not stored.
  • Non-intrusive
  • Results in seconds
  • Server check script included

We keep the checked address and result for one year for internal statistics.

Affected and fixed versions

PHP in the ranges below must be updated. Any PHP that handles web requests is affected (PHP-FPM, Apache mod_php, CGI/FastCGI).

PHP versionVulnerable versionsFixed versions
PHP 8.5Below 8.5.128.5.12 or later
PHP 8.4Below 8.4.278.4.27 or later
PHP 8.3Below 8.3.368.3.36 or later
PHP 8.2Below 8.2.358.2.35 or later
PHP 8.1 and olderAllNo fixed release (end of life)
  • PHP 8.6.0 includes the fix from RC4. It is a development release, so do not use it in production.
  • PHP 8.2 reaches end of life on December 31, 2026. Even if you update to 8.2.35, plan a move to a newer branch.

Distribution backports

  • Ubuntu, Debian and RHEL-based distributions, cPanel and managed hosting sometimes apply security fixes without changing the version number (backports). For example, PHP on Ubuntu 24.04 shows 8.3.6 but may already include the fix.
  • The version number in the table above can therefore mislead. Confirm with the package revision and the distribution security notice (Ubuntu USN, Debian DSA, Red Hat RHSA).
  • Commands that search the package changelog for the CVE numbers are in the "1. Check" tab of the response guide below. The server check script also shows a note when it finds signs of a backport.

Response guide

Pick a stage and your server environment to see only the commands and settings you need.

Response headers show only part of the picture. Servers that hide their version, internal servers and servers with several PHP installs must be checked on the server itself.

Cloudbric server check script

Finds every PHP install (PHP-FPM, CGI, CLI, Apache mod_php) and checks its version, related settings, overrides, and processes not restarted after an update. Read-only, no network connections. Run a site check to download it from the result page.

Go to the site check

Check with commands

Server environment

Examples use PHP 8.3. Adjust version numbers to your server. The CLI and the web (PHP-FPM, mod_php) can use different settings.

php -v
php-fpm8.3 -v                     # FPM binary name differs per version
dpkg -l | grep -E '^ii\s+(php|libapache2-mod-php)'
apt changelog php8.3-common | grep -iE 'CVE-2026-10961[89]'

Done when

Ticks are not saved.

Vulnerability summary

On October 21, 2026, the PHP project disclosed two vulnerabilities and released security updates. Together they are called php2shell.

CVE-2026-109618 State corruption during out-of-memory handling
If out-of-memory handling interrupts PHP while request data is only partly initialized, request cleanup can treat the invalid data as valid, which can lead to remote code execution.
CVE-2026-109619 Stale global state reused by the worker
Internal state from one request survives after its memory is freed, and a later request on the same worker uses it (use-after-free). The session.upload_progress feature is a related path.

Scope

  • Any PHP that handles web requests: PHP-FPM, Apache mod_php, CGI/FastCGI
  • Reachable before application code runs, so sites without login features are affected too
  • Network devices, appliances and management consoles that embed PHP (vendor patches needed)
  • CLI-only PHP is not exposed through the web, but should be updated too

Close the gap until you can update, with Cloudbric WAF+

Live services often can't be updated right away. Cloudbric WAF+ applies security rules that detect and block php2shell (CVE-2026-109618, CVE-2026-109619) attack attempts, reducing your web services' exposure while you prepare the update.

A WAF does not replace patching. If your origin server can be reached directly, it is not protected, so restrict origin access and update as well.

Talk to us about urgent onboarding

FAQ

Does 'Version hidden' mean my site is safe?

No. It means the response headers do not reveal a PHP version. A server that hides its version can still be vulnerable, so check it with the server check script.

Can I test with exploit code (PoC) found online?

We advise against it. The official PHP announcement and advisories contain no exploit code. Code circulating as a 'php2shell PoC' is hard to trace and may contain malware, so do not run it on production servers or work PCs. Check exposure with a non-intrusive check like this page.

What does the phpinfo exposure check do?

When you turn on this option in the check form, we also send GET requests in turn to well-known phpinfo paths in the web root (/phpinfo.php, /info.php, /test.php, /i.php, /php_info.php), in addition to the header check. If a phpinfo page is found, you get the real PHP version and the settings applied to the web, even when headers hide the version. An exposed phpinfo page is itself an information leak, so we recommend deleting it. Because unpublished paths are requested, the site's security devices or logs may record this as path probing. Turn it on only for sites you manage.

My distribution package version is lower than the fixed version.

Ubuntu, Debian, and RHEL-based distributions sometimes backport security fixes without changing the version number. Check your distribution's security notice for the package version that fixes these CVEs. For each PHP it checks, the script looks for the CVE numbers in the changelog of the package that PHP belongs to and shows a note, and it tells you when a PHP was not installed from a package, so distro backports do not apply to it.

The script flags only the CLI entry.

The CLI does not handle web requests, so it is not exposed through the web. It is still safer to update every PHP install on the same server.

How do I check internal servers or containers?

Even if the address cannot be reached from outside, you can download the script from the result page. For containers, run the script inside the container.

What do you store?

We keep the address you entered, the target server's response details (IP, status code, headers), the verdict, the page language, the visitor's country, and whether the script was downloaded or the contact link clicked, for one year for internal statistics. The requester's IP address and browser details are not stored in the check records. Web server access logs keep IP and browser details for 90 days, but they do not contain result links or check record IDs, so they cannot be joined to check records. Clicking Contact us passes only the verdict type (for example, vulnerable) to the Cloudbric website. This page does not use cookies. With the phpinfo option on, we also keep the path found, PHP version, SAPI and related settings, but not the page content.

Where do the check requests come from?

Check requests use the User-Agent 'Cloudbric-php2shell-check/1.0 (+https://php2shell.cloudbric.com)'. We send one HEAD request. If it is refused, we send one GET request and do not read the response body. With the phpinfo option on, we also send GET requests to 5 well-known paths and read only the first 512 KB of each response.