PHP2Shell.fyi Check a site

What is PHP2Shell?

PHP2Shell is the name for two serious bugs in PHP itself, the language behind many websites. An attacker with no account can use them to run code on your web server or read data from its memory. A PHP update fixes both.

Last reviewed . Rules of .

What you need to know

Each bug has its own CVE number:

The PHP project published both advisories on 21 October 2026. The technical write-up explains how each one works.

Who is affected

The PHP project names five ways to run PHP. The table gives what php.net and the two advisories say about each. We added two common servers that php.net does not name, IIS and Caddy, and marked those rows as our own inference.

Sources: php.net advisory of 2026-10-21 and the two php-src security advisories. Rows marked "our inference" are not from php.net.
Server setupNamed by php.netWhat is known
Apache with mod_phpYesphp.net rates it the highest risk. The demonstrated attack needs no login and runs before any application code.
PHP-FPM (often behind nginx or Apache)YesCode execution was shown for CVE-2026-109619, given a suitable operation in the application. For CVE-2026-109618, code analysis shows FPM is at risk, but no complete attack has been shown.
php-cgiYesAt risk, says php.net.
FrankenPHPYesAt risk, says php.net. Code analysis suggests that, like mod_php, it is open to CVE-2026-109618 without help from the application. No attack has been shown.
LiteSpeed (LSAPI)YesAt risk, says php.net. Attacks through a specific application are likely, but none has been confirmed.
Microsoft IISNoOur inference: the PHP manual sets up IIS with a FastCGI handler that runs php-cgi, which php.net names. Treat IIS as at risk.
CaddyNoOur inference: Caddy's php_fastcgi passes requests to a FastCGI server, usually PHP-FPM, so the PHP-FPM row applies. Caddy with FrankenPHP: see the FrankenPHP row.

Which PHP versions

The fixed versions page lists every branch and its support dates.

How severe it is

The PHP project rates both CVEs 9.2 out of 10 (Critical) on the CVSS v4.0 scale. The full vector is CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N.

What the vector means:

What attackers can do

The researchers report three outcomes:

Why app updates do not fix it

WordPress, Drupal or a custom app is an application that runs on top of PHP. These bugs sit below it, inside PHP.

What to do now

  1. Find your PHP version. Look in your app's admin area or your hosting panel. On your own server, check the PHP that serves the site: php -v can show a different PHP from the one your web server uses.
  2. Update PHP. Install 8.2.35, 8.3.36, 8.4.27 or 8.5.12, or a newer release in the same branch. A patched build from your Linux distribution or host also works. On PHP 8.1 or older, ask your vendor for a patched build, or move to a supported branch.
  3. Restart PHP. Restart Apache, every PHP-FPM pool and any long-running PHP workers. Our advice for containers: pull the updated image, rebuild your own images on top of it, and recreate the containers. A restart alone does not change the PHP inside an old image.
  4. Check again. Run the checker on your site, and ask your host to confirm the PHP build. If you set memory_limit=-1 as a stopgap, set a finite limit again after the update.
  5. Rotate secrets if the server was exposed. The memory leak can reveal passwords, tokens, API keys and certificates. We recommend rotating every one that PHP could read.

Settings do not fix it.

The PHP project says only the update is a complete fix. Some settings can reduce exposure while you wait, and the mitigations page lists them with their sources.

Demonstrations

The researchers who found the bugs report on php2shell.com:

We do not link to attack code or videos.

Credits

The two php-src security advisories credit these GitHub accounts:

The researchers' site is php2shell.com, run by Wiz. php2shell.fyi is an independent checker, not affiliated with the PHP project, php.net or php2shell.com.

Sources

Check your site

The checker sends your site ordinary GET requests (at most three) and reports the PHP signals in the response. The normal check sends no attack traffic. Check my site.