1. Red
  2. Learn
  3. PHP2Shell

PHP2Shell checker: what a check can and can't confirm

Is my site vulnerable to PHP2Shell? A checker sees a banner, not a patch. What it can confirm, why version numbers mislead, and how to get proof from your host.

By Alexander Gusev, run.cloudPublished 24 October 20266 min readHow we check facts
On this page
  1. What can a PHP2Shell checker actually confirm?
  2. Why does the version number mislead?
  3. Who is affected?
  4. How do I get real proof that I'm patched?
  5. Was anything exploited before I patched?
  6. What changed on 23 October?
  7. What is the bug, without the exploit?

If your site runs PHP, treat it as exposed to PHP2Shell (CVE-2026-109618 and CVE-2026-109619) until the PHP that serves it is confirmed fixed. A checker can see that PHP is present and sometimes a version banner. It cannot see a backport or a worker restart. Get the fixed build and restart time from your host or your server.

FactDetailSource
CVE idsCVE-2026-109618 (RCE via out-of-memory corruption), CVE-2026-109619 (RCE via stale global state)PHP notice
SeverityCVSS v4.0 9.2 for both, per the 20 October pre-noticePHP notice
Disclosed21 October 2026, 14:00 UTCAWS, Canonical
Fixed releases8.5.12 · 8.4.27 · 8.3.36 · 8.2.35PHP notice, changelog
ScopeAll PHP installations serving web requests: PHP-FPM, mod_php, php-cgi, FrankenPHP, LiteSpeedPHP notice
Older branches8.1 and older get no supported release from the PHP project. Its security team published minimal source backports for 7.4, 8.0 and 8.1 for people building from source. Some distributions and LTS vendors also backportPHP notice
ExploitationHoneypot attempts from 17 October (vendor-claimed); no named victim in a primary source at our checkAWS
CheckedAt our check on 24 October 2026this page

What can a PHP2Shell checker actually confirm?

Less than its result screen suggests. Public checkers use one of three methods, and each has a blind spot.

MethodWhat it can showWhat it cannot show
Reads headers and page content for a version bannerThat PHP is present, and the version the server chooses to announceBackports, the real build, which runtime serves other virtual hosts, whether workers restarted. Many servers hide the banner
Sends a test request and watches the responseA reaction to that one request on that one pathThat the server is fixed. A miss can come from a patch, a high memory limit, a rejected request or a path that was not affected
Asks you to paste server outputWhat you pastedAnything you did not paste

The second row is the checker's own wording. Aikido's page says its clean result does not prove PHP is patched, and that a banner version "may not account for vendor backports" (at our check on 24 October 2026). Its optional crash probes can exhaust memory and interrupt requests on the target, so run those only on servers you own, with permission, off peak.

Red's free scan is a lookup. It identifies the technologies your site serves, the way Wappalyzer does, then looks each version up in public vulnerability records. It can say a version is affected. It cannot say whether your setup is exposed, and it cannot see a vendor backport.

Why does the version number mislead?

Two traps, each documented by the vendors:

  1. Backports keep the old number. Ubuntu's fixed PHP for 24.04 is package 8.3.6-0ubuntu0.24.04.13, and for 22.04 it is 8.1.2-1ubuntu2.28 (Canonical, 21 October). Both still announce an old PHP version (the backport version trap in full). CloudLinux says its backport builds stay below PHP.net's numbers, so a version scanner may flag them wrongly, and that most builds are checked by changelog and its native PHP 8.2 and 8.3 rebuilds by installed version.
  2. A fixed package is not a restarted worker. Canonical says the application that uses the PHP interpreter would likely need to be restarted, and that restarting the apache2 daemon is required with mod_php. The PHP project's 21 October advisory says to restart every worker after setting session.upload_progress.enabled=0.

It also fails in the other direction. A banner can say 8.5.12 on a site where an unrelated PHP build handles a different path. A hidden banner says nothing either way.

Who is affected?

Any site served by PHP, which includes WordPress, WooCommerce, Magento, Shopware, Drupal, Joomla and Laravel. The bug is in the engine, so up-to-date application code does not help. mod_php is the highest-risk setup according to the PHP notice; the other server types are in scope too. Sites with no PHP (static, Node.js, Ruby, Python) are not affected by this bug. The wider picture is on the PHP2Shell page.

How do I get real proof that I'm patched?

If a host manages PHP for you

Send support this question and keep the reply:

For [your domain], is the PHP runtime that serves web requests patched for CVE-2026-109618 and CVE-2026-109619? Please give the fixed package, build or backport identifier, confirm that all PHP-FPM, CGI or Apache workers serving it have been restarted or replaced, and say whether I need to redeploy or change a setting.

Some hosts name evidence you can check yourself. Hostinger's status page said on 22 October (06:44 UTC) that for its managed hosting a Build Date of 21 October 2026 or later in hPanel's PHP Info means the site has the fix, and that some sites show 8.5.11 rather than 8.5.12 as expected (vendor-claimed, at our check on 24 October 2026). Hostinger's own page has the detail. Its notices cover Web, Agency and cPanel Hosting. Its 23 October update says VPS clients manage PHP themselves. A selector that shows only "8.4" proves nothing on its own. If you are on shared hosting, the questions to put to your host has the longer version. Per-host status is in the SiteGround page and the other host pages.

  • Send the question above for each domain, not once per account.
  • Ask for the answer in writing, with the build identifier.
  • Redeploy anything on a managed platform that bundles its own PHP, if the host says so.
  • Keep the reply with the date.

If you manage the server yourself

  • Update PHP from your distribution or vendor. Check the installed package version against your vendor's fixed version. On cPanel and CloudLinux, CloudLinux (updated 23 October 2026) says most ea-php and alt-php builds name both CVE ids in rpm -q --changelog, but its native PHP 8.2 and 8.3 builds name none, so check for 8.2.35 or 8.3.36 or later with rpm -q php-cli. On Ubuntu, compare the installed package with Canonical's table.
  • Debian: the tracker shows bookworm's php8.2 fixed in 8.2.35-1~deb12u1 and trixie's php8.4 in 8.4.27-1~deb13u1, both in the security suite. The main-suite builds (8.2.32-1~deb12u1, 8.4.24-1~deb13u1) are listed as vulnerable. Here the package version does match the upstream fixed release (Debian tracker, at our check on 24 October 2026).
  • Restart every PHP worker or the web server, then note the time (how to restart PHP-FPM after the update).
  • Rebuild and redeploy container images that bundle PHP.
  • Check each virtual host if the server runs more than one PHP version.

If you cannot patch yet, the PHP project lists partial mitigations and says only an update is a complete solution (PHP notice).

Am I affected? Where you stand right now

A passive check can only reach the first two states. Evidence from your server or host is the only way to the third.

  1. Detected The site serves PHP and the announced version is below the fixed release for its branch. Ask your host the question above, or patch and restart today. A backport can still make this a false alarm, so ask for the build.
  2. Unknown The site serves PHP but hides the version, or the version could be a backport. This is the common case. Get the package or build identifier and the restart time from whoever runs the server.
  3. Confirmed by owner evidence You hold the fixed package or build identifier your vendor documents, plus a restart or redeploy time after it. The runtime is fixed. Whether anything got in before then is a separate question.

No scan, ours included, moves you from "unknown" to "confirmed".

Was anything exploited before I patched?

Attempts, yes. AWS reported a honeypot attempt dating to 17 October and more on 21 October, and says it is unclear whether the 21 October attempts would have succeeded on real systems. Its advice is to start any investigation from 17 October, review web server logs, and check application servers for unexpected processes or file changes. See is PHP2Shell being exploited for the dated record.

"Is the runtime fixed?" and "did anything get in before it was?" are two separate answers. A fix does not remove anything planted earlier. Signs your site was already exploited are on their own page, and the rest sit under the PHP2Shell topic.

What changed on 23 October?

On 23 October the PHP project posted an informational advisory on session upload progress. It suggests setting session.upload_progress.enabled=0 until the next regular bugfix release, and says a full advisory for CVE-2026-115560 will be published with that release. The notice does not mention restarting workers; the 21 October advisory is where the PHP project says to restart every worker after setting it. CVE-2026-115560 is a different issue from the two PHP2Shell CVEs, so a build that fixes those two does not tell you about this one. No 8.5.13 was listed in the PHP 8 changelog at our check on 24 October 2026.

What is the bug, without the exploit?

Both are memory-safety problems in the PHP engine, reachable by an unauthenticated web request. The conditions are in the two advisories (CVE-2026-109618, CVE-2026-109619). We do not reproduce how to trigger them, and you do not need that to fix your site.

Questions people ask

Is my site vulnerable to PHP2Shell?

If the site runs PHP, treat it as exposed until the PHP that serves it is confirmed fixed. A check from outside can tell you the site serves PHP and sometimes the version it announces. It cannot tell you whether a vendor backport is installed or whether the workers restarted.

How do I check I'm actually patched?

Get the fixed package or build identifier for the PHP that serves your domain, and a restart or redeploy time after it was installed. On your own server that is the installed package version checked against your vendor's fixed version. On a host, it is a written reply to the support question on this page.

php -v shows an old version. Am I vulnerable?

Not necessarily. Ubuntu and CloudLinux ship fixes as new package builds that keep the old version number (see the vendor pages above). Debian does not do this for this fix: its tracker lists fixed packages 8.2.35-1~deb12u1 and 8.4.27-1~deb13u1, which carry the upstream fixed version numbers. Check the installed package against your vendor's fixed version.

Does a clean result from a PHP2Shell checker mean I'm patched?

No. A checker that reads a version banner cannot see backports, and one that sends a test request can miss for reasons that have nothing to do with patching. At least one public checker says this about its own result. Only evidence from the server or the host settles it.

My host says it patched. What should I ask for?

Ask for the fixed package, build or backport identifier for your domain, confirmation that every PHP worker serving it was restarted or replaced, and whether you must redeploy or change a setting. Keep the reply. A status page that names the evidence you can check yourself is better than a general statement.

Does updating WordPress or my plugins fix PHP2Shell?

No. The two bugs are in the PHP engine, not in WordPress, WooCommerce or any plugin. The fix is a patched PHP package on the server and a restart of the workers. Application updates are still worth doing, but they do not close this hole.

Sources

  1. PHP security notice, 21 October 2026, and follow-up notice, 23 October (php.net)Names both CVEs, the fixed releases, the server types in scope, and the 23 October notice about CVE-2026-115560.
  2. GHSA-w8hw-w9fx-j79w: CVE-2026-109618 (php/php-src advisory)
  3. GHSA-6wmf-4rv5-p3rp: CVE-2026-109619 (php/php-src advisory)
  4. PHP 8 changelog (php.net)8.5.12 and 8.4.27 entries dated 22 October cite both advisories. No 8.5.13 was listed at our check on 24 October 2026.
  5. Canonical: PHP2Shell vulnerability fixes available (Ubuntu blog, 21 October 2026)Fixed package versions per Ubuntu release, and the restart step.
  6. Debian security tracker: CVE-2026-109618
  7. CloudLinux: fixed ea-php and alt-php packages (blog, updated 23 October 2026)Says most backport builds keep version numbers below PHP.net's and name both CVE ids in the changelog, while its native PHP 8.2 and 8.3 rebuilds name no CVE ids and are checked by version.
  8. Hostinger status page: PHP Security Update for Web, Agency and cPanel HostingVendor-claimed. Covers Web, Agency and cPanel Hosting; VPS clients manage PHP themselves (23 October update). An example of a host naming the evidence it considers proof (Build Date in hPanel PHP Info).
  9. Aikido PHP2Shell checker (own page)Describes its own method and says a clean result does not prove PHP is patched.
  10. Amazon Threat Intelligence: PHP2Shell attempts seen in MadPot honeypots before disclosure (AWS Security Blog, 21 October 2026)Vendor telemetry. AWS says it is unclear whether the attempts would have succeeded on real systems.

Facts on this page are dated and point at the primary source next to them. If a vendor status changes after the date shown, the vendor's page wins; tell us at support@run.cloud and we will update it.