Remote code execution
Commands run as the web server's PHP worker account. That gives the attacker a foothold to steal data, plant web shells or move further into the network.
PHP2Shell lets an unauthenticated attacker corrupt PHP worker memory, read sensitive memory, or run code on affected servers. Enter a domain to check the PHP version it reports.
Sends one passive GET / to the site and reads its X-Powered-By header. Nothing is exploited and nothing is stored. Only check sites you own or are authorized to assess.
Try a demo: vulnerable server · patched server
PHP2Shell is the name researchers gave to two critical vulnerabilities in the PHP runtime itself, CVE-2026-109618 and CVE-2026-109619. They are memory-safety flaws (use-after-free, CWE-416) in how PHP handles web requests. They are not bugs in any single application, so any site running an affected PHP version can be exposed, whatever framework or CMS it uses.
According to the PHP project, all PHP installations serving web requests are at risk, including PHP-FPM, Apache with mod_php, php-cgi, FrankenPHP and LiteSpeed. Risk is highest for mod_php, where an unauthenticated request can trigger the attack before any application code runs.
An attacker needs no account and no user interaction. Sending crafted requests to a vulnerable server can lead to:
Commands run as the web server's PHP worker account. That gives the attacker a foothold to steal data, plant web shells or move further into the network.
The attacker can read sensitive worker memory, which can include session data, credentials, API keys and other users' requests.
Corrupting process memory can crash workers and disrupt the service, even when code execution isn't achieved.
There is no complete workaround. The PHP project says updating is the only safe choice. PHP 8.1 and older are end-of-life and get no official release. The PHP security team published source-code backports for 7.4, 8.0 and 8.1, and some OS and LTS vendors ship backported packages.
Enter a domain above. The checker sends one passive request to the site's home page and reads the PHP version it reports in the X-Powered-By header. It then compares that version with the fixed releases.
Nothing is exploited, nothing is probed beyond that one request, and no domains or results are stored. Only anonymous daily totals per verdict are kept, and page visits are counted without cookies.
A remote version check has limits, so confirm the result on the server itself:
expose_php.php -vcurl -sI https://your-site.com/ | grep -i x-powered-byUpgrade to the fixed release for your branch, or later:
| Branch | Vulnerable | Upgrade to |
|---|---|---|
| 8.5 | 8.5.0 – 8.5.11 | 8.5.12+ |
| 8.4 | 8.4.0 – 8.4.26 | 8.4.27+ |
| 8.3 | 8.3.0 – 8.3.35 | 8.3.36+ |
| 8.2 | 8.2.0 – 8.2.34 | 8.2.35+ |
| 8.1, 8.0, 7.4 | All releases | End-of-life, with no official release. Upgrade to a supported branch, use your OS or LTS vendor's backported package, or apply PHP's source backport. |
| 7.3 and older | Not covered by the advisory | End-of-life with no security fixes of any kind. Upgrade to a supported branch. |
| 8.6 (pre-release) | Builds before 8.6.0RC4 | 8.6.0RC4+ (not for production) |
Development, alpha, beta and RC builds of a fixed version predate the fix and count as vulnerable. Partial mitigations exist (see the PHP announcement), but they do not make an installation safe.