‹ TOOLS  /  PHP2SHELL CHECK
 CRITICAL · PATCHED 21 OCT 2026

PHP2Shell Vulnerability Checker

Two critical remote-code-execution bugs, CVE-2026-109618 and CVE-2026-109619, affect every PHP release from 5.4 up to 8.5.11. Enter a website URL or a server IP, or paste the version from php -v, and see whether it is at or above the fixed release.

Passive check: one normal page request, then the advertised PHP version is compared with the fixed releases. No exploit traffic is ever sent. A bare IP is probed directly, http first then https, which is what an attacker who knows your origin sees behind the CDN. A pasted version is judged in your browser and never leaves it.

IF YOU RUN PHP, PATCH TODAY

Fixed releases: 8.5.12 · 8.4.27 · 8.3.36 · 8.2.35. Older branches get no release. After updating, restart PHP-FPM / Apache — running workers keep the vulnerable code until they do. Need hands? LB Clouds patches and hardens servers in Lebanon and the region.

What PHP2Shell is

On 20 October 2026 the details of two unreleased PHP core vulnerabilities leaked ahead of a coordinated disclosure. The PHP project shipped the fixes the next day, 21 October, as a security release across all four supported branches. Both bugs are rated CVSS 4.0 9.2 (Critical) and both allow unauthenticated remote code execution on a server that merely serves web requests — no application bug, no login, no plugin required.

CVERoot causeAdvisory
CVE-2026-109618 Out-of-memory during request setup is handled with longjmp(), leaving half-initialised request memory that shutdown code later treats as valid. Triggerable with a crafted multipart POST inside normal size limits. GHSA-w8hw-w9fx-j79w
CVE-2026-109619 Request-owned global state survives after its memory is freed, so a later request on the same worker reads stale data. Session upload progress is one confirmed path. GHSA-6wmf-4rv5-p3rp

Every way of serving PHP over HTTP is in scope: PHP-FPM, Apache with mod_php, php-cgi, FrankenPHP and LiteSpeed. The PHP team demonstrated a full exploit against mod_php with default settings, firing before any application code runs. Cloudflare has already reported attack traffic aimed at these bugs, and CISA has issued an alert.

Fixed versions

BranchVulnerableFixed inStatus
8.58.5.0 – 8.5.118.5.12Active support
8.48.4.0 – 8.4.268.4.27Active support
8.38.3.0 – 8.3.358.3.36Security fixes until 31 Dec 2027
8.28.2.0 – 8.2.348.2.35Security fixes until 31 Dec 2026
7.4 · 8.0 · 8.1allsource backports onlyEnd of life. Minimal patches for building from source; some LTS vendors ship packages.
5.4 – 7.3allnoneEnd of life. CISA: take these systems offline until upgraded.

PHP 8.6 release candidates were not patched at release time. If you test an 8.6 RC on anything reachable from the internet, treat it as vulnerable.

How this check works, and what it cannot see

The checker fetches the URL once, like a browser would, and reads the X-Powered-By and Server headers. If they carry a PHP version it is compared with the table above. If the version is hidden, the page body is fingerprinted for WordPress, Joomla, Drupal, Laravel and similar so you at least know PHP is there. That is the whole method: no exploit payload, no malformed multipart request, nothing that could crash a worker.

Given a bare IP address (IPv4 or IPv6, optional port), the checker goes to the origin directly: plain http first, then https with certificate validation skipped, since an IP never has a matching certificate. That bypasses whatever CDN or WAF sits in front of the domain and shows what the server itself advertises. Private and loopback ranges are refused.

Three limits are worth knowing:

Check on the server itself

The authoritative answer comes from the machine. Any of these takes a second:

# version of the CLI binary (may differ from the web SAPI!) php -v # the version the web server actually runs php-fpm8.3 -v # Debian/Ubuntu naming php-fpm -v # RHEL/Alma/Rocky # Debian/Ubuntu: does the installed package carry the fix? dpkg -s php8.3-common | grep Version apt changelog php8.3-fpm 2>/dev/null | grep -m1 -i 'CVE-2026-109618' # RHEL/Alma/Rocky/Fedora rpm -q --changelog php | grep -m1 -i 'CVE-2026-109618' # cPanel / Plesk: list every installed PHP, you may have several ls /opt/cpanel/ | grep ea-php # cPanel ls /opt/plesk/php/ # Plesk

A server frequently runs more than one PHP: the CLI, one or more FPM pools, a Plesk or cPanel multi-PHP tree, Docker images. Each one has to be at or above the fixed release.

How to update

PlatformCommand / action
Debian / Ubuntusudo apt update && sudo apt install --only-upgrade 'php8.*' && sudo systemctl restart php8.3-fpm apache2
Ubuntu with ondrej PPAsudo apt update && sudo apt upgrade && sudo systemctl restart 'php*-fpm'
RHEL / Alma / Rockysudo dnf update php\* && sudo systemctl restart php-fpm httpd
cPanel / WHMWHM › EasyApache 4 › update, or /scripts/upcp --force; then restart Apache and PHP-FPM.
PleskTools & Settings › Updates › install PHP updates (fixed packages were published for 8.2–8.5).
DockerRebuild from php:8.3.36-fpm (or 8.2.35 / 8.4.27 / 8.5.12) and redeploy. Pinned older tags stay vulnerable.
Shared hostingChange the PHP version in the hosting panel to one at or above the fixed release, then ask the host to confirm the build date. SiteGround, GoDaddy and others patched fleet-wide on 21 October.

Restart everything that runs PHP after the update: PHP-FPM pools, Apache (mod_php), LiteSpeed, FrankenPHP, queue workers, Supervisor-managed daemons. A worker started before the update is still the old binary.

If you cannot patch within hours

The PHP project is explicit that these reduce exposure but do not make an installation safe. Set them where applications cannot override them (php_admin_value in the FPM pool or Apache config, never ini_set() or .user.ini), then restart every worker:

; CVE-2026-109618 — avoid the vulnerable out-of-memory path memory_limit = -1 post_max_size = 8M ; 32M if uploads are required; keep upload_max_filesize below it ; CVE-2026-109619 — close the confirmed stale-state path session.upload_progress.enabled = 0 fatal_error_backtraces = 0 ; PHP 8.5 only

Other scanners

Related checks

Sources: php.net security announcement, GitHub advisories GHSA-w8hw-w9fx-j79w and GHSA-6wmf-4rv5-p3rp, CISA alert of 21 Oct 2026. Fixed-version table last verified 21 October 2026.