CVSS 9.2 CriticalCVE-2026-109618CVE-2026-109619

PHP2Shell. Check Exposure. Hunt for Compromise.

A passive domain check for public signs of PHP, clear steps to update and isolate, and a reactive hunt pack to find abuse across your estate or your clients'.

At a Glance

Facts from PHP's security advisory and public alerts. Last updated 21 October 2026, 17:25 BST, after PHP's security release (fixed versions 8.5.12, 8.4.27, 8.3.36 and 8.2.35).

20 Oct

Leak of two PHP RCE flaws. PHP publishes advance notice the same evening.

21 Oct 14:00 UTC

PHP releases 8.5.12, 8.4.27, 8.3.36 and 8.2.35 with full advisories. Every version below these in each branch is affected.

Now

Update internet facing PHP first, Apache mod_php servers before anything else. Apply PHP's interim settings where you cannot update yet, and hunt for PHP workers spawning shells.

What to Do in the Next 24 Hours

Proactive on the left. Reactive on the right. Tick both tracks.

Check a Domain

Enter a domain you own or manage. We make one normal request to its home page and look for public signs of PHP. Nothing else is sent. Exact versions and raw headers are never shown.

A passive check cannot prove a server is safe. Many servers hide their PHP version, and PHP can run on paths, subdomains or servers this check does not see. Results are a starting point; confirm on the server with the steps below.

Proactive: Check Your Servers

The only reliable answer comes from the server. Work through these on every host that runs PHP.

Free Checker Scripts

Tested by the CybaVerse threat hunt team. Run them on any Linux or Windows host that runs PHP to get a clear verdict per PHP install, whether you look after your own business or your clients' estates.

Read-only by design

Both scripts read files and query package and event databases. The only programs they run are the PHP binaries they find, with -v and -i and a timeout. On Linux a file is only run if it has a PHP binary name (such as php, php8.3, php-fpm or php-cgi) and is a compiled binary, so tools like phpunit or phpcs and wrapper scripts are never run. On Windows only php.exe and php-cgi.exe are run. The scripts do not change configuration, restart services or write files. Review any script before you run it.

Verdicts

  • PATCHEDThe package changelog mentions both CVE IDs (a distro backport), or the version is at or above the fixed release for its branch.
  • LIKELY VULNERABLEThe version is below the fixed release, or the branch has no listed fix (8.1 and older), and the changelog mentions neither CVE.
  • UNKNOWNThe version can't be read, only one CVE is in the changelog, the package looks vendor-specific, or it is a release candidate or development build (RC, beta, -dev) that may not contain the final fix. Check with your vendor.

Exit codes

CodeMeaning
0Everything PATCHED, or no PHP found
1At least one LIKELY VULNERABLE
2At least one UNKNOWN, none vulnerable
3Nothing vulnerable or unknown, but the log hunt found entries to review

MSPs and internal IT teams can use the exit code in RMM or deployment tooling to flag hosts at scale.

Know the limits

  • Verdicts rely on versions and package changelogs only. The scripts cannot confirm a patch in custom builds, vendor-bundled PHP or packages whose changelogs don't list CVEs.
  • PHP published minimal source backports for 7.4, 8.0 and 8.1. The scripts cannot detect these in custom builds and report them as LIKELY VULNERABLE, so confirm with whoever built your PHP.
  • The ini values come from php.ini and conf.d. The scripts miss per-site overrides such as FPM pool settings, .htaccess, .user.ini and IIS web.config, so check those by hand.
  • Only standard log paths are searched. A clean log is not proof of safety, because a failure can happen before PHP writes anything.

Reactive: How to Hunt

Hunt on behaviour: look for the activity that follows successful exploitation of a PHP server. CybaOps can run these hunts across your estate or your clients'.

CybaVerse guidance

Our own advice from the CybaVerse threat hunt team, in addition to PHP's advisories:

  • Hunt for oversized PHPSESSID cookies in responses. A session cookie far longer than your normal baseline is worth investigating.
  • If you find signs of compromise, rotate the secrets your PHP processes held: database passwords, API keys, session tokens and certificates. Patching does not undo what an attacker may already have read.
  • Updating WordPress, Laravel or another application does not patch the PHP runtime. Update PHP itself, or the package your vendor ships.

PHP2Shell FAQ

Short answers based on PHP's security advisory and public alerts as of 21 October 2026.

What is PHP2Shell?

PHP2Shell is the name researchers use for two critical PHP vulnerabilities, CVE-2026-109618 and CVE-2026-109619. PHP rates both 9.2 on CVSS v4.0. They let an unauthenticated attacker run code on a web server as the web worker account by abusing how PHP handles memory when a request fails. The name is the researchers', not PHP's.

Which PHP versions are affected?

Every PHP version below 8.5.12, 8.4.27, 8.3.36 and 8.2.35 in its branch, plus PHP 8.1 and older unless your vendor has backported the fix. All PHP installations serving web requests are at risk, including PHP-FPM, Apache mod_php, php-cgi, FrankenPHP and LiteSpeed. PHP rates mod_php as highest risk.

Is there a patch?

Yes. PHP released 8.5.12, 8.4.27, 8.3.36 and 8.2.35 on 21 October 2026 at 14:00 UTC (15:00 BST). Linux distributions and long term support vendors received the fix in advance, so check your vendor for updated packages. PHP says there are no complete mitigations and updating is the only safe choice. After updating, review memory_limit and post_max_size: the fix adds a hard memory limit that ends the PHP process if it is reached.

What if I cannot update straight away?

PHP lists interim settings that reduce exposure but do not make a server safe. Set memory_limit=-1 administratively (for example with php_admin_value), keep post_max_size low (8M, or 32M if you need uploads), set session.upload_progress.enabled=0 in php.ini or the FPM pool, set fatal_error_backtraces=0 on PHP 8.5, enforce request size limits at the web server or proxy, then restart every worker. If you cannot do that quickly, take the system offline until it is updated.

Is PHP2Shell being exploited?

Public proof of concept code is available and attack attempts against websites were reported on 21 October 2026. Government agencies had not confirmed successful exploitation at the time of writing, and the flaws were not yet in CISA's Known Exploited Vulnerabilities catalogue. Treat internet facing PHP as a target and update now.

What if I run PHP 8.1 or older?

The PHP project no longer updates 8.1 and older. Some Linux distributions and long term support vendors provide backported fixes, and PHP's security team published minimal source backports for PHP 7.4, 8.0 and 8.1 for people who build from source. Otherwise upgrade to a supported branch, or take the system off the internet until you can. PHP 8.2 reaches end of life on 31 December 2026, so plan that upgrade too.

Does a clean result from the checker mean I am safe?

No. The checker only reads what a site shares publicly on its home page. Many servers hide the PHP version, and PHP can still run on other paths, subdomains, admin panels or behind a proxy or CDN. Always confirm on the server itself.

What does the checker send to my site?

One normal web request for the home page, over HTTPS first and then HTTP, the same as a browser visit. It sends no exploit code or attack traffic, and IP addresses and private or internal names are refused.

Detect and Remediate PHP2Shell Across Your Estate

CybaOps finds vulnerable PHP across every system you look after, whether that's your own business or your clients'. It runs hunts like the KQL and Sigma rules above through our SOC and drives remediation through to a verified fix, so proactive remediation and reactive hunting happen in one place.