Only check systems you own or are responsible for. This page and our checker work from version numbers you type in. Nothing here tests, probes or scans a server. Independent site, not affiliated with the PHP Group or php.net.
Short answer
Run php -v on the server, then confirm the version your web PHP uses, because the command line and the website can run different builds. On Debian, Ubuntu, Red Hat-family and Alpine, the number you see may be older than the fix and still be patched, because distros back-port fixes: compare the package version with your vendor’s fixed package version, not the upstream number. Then paste both into the checker.
What you are comparing against
php2shell is the name Wiz Research gave to two critical PHP flaws (CVE-2026-109618, CVE-2026-109619). php.net says they “can allow unauthenticated remote code execution” and that all PHP installations serving web requests are at risk, including PHP-FPM, Apache with mod_php, php-cgi, FrankenPHP and LiteSpeed (php.net advisory). Upstream fixed releases:
| Branch | Fixed in |
|---|---|
| 8.5 | 8.5.12 |
| 8.4 | 8.4.27 |
| 8.3 | 8.3.36 |
| 8.2 | 8.2.35 |
| 8.1 and older | No upstream release. php.net only published minimal source back-ports for 7.4, 8.0 and 8.1; otherwise you need a vendor build or an upgrade |
Anything below the fixed number for its branch is affected (GitHub advisory). php.net also says: “There are no complete mitigations, updating is the only safe choice.” The full table, with vendor package versions, is on fixed versions.
Step 1: Command line
php -v
which -a php
php -r 'echo PHP_VERSION, " ", php_sapi_name(), PHP_EOL;'
The first line of php -v is the version, and (cli) is the SAPI (the way PHP is run) (PHP manual). This is only the CLI. Your website is usually served by PHP-FPM, Apache or LiteSpeed, and a server can have several PHP versions installed at once, so php on your shell path may not be the one your site uses. Check the web side directly:
php-fpm8.3 -v # Debian/Ubuntu: the binary name carries the version (try sudo if not found)
php-fpm -v # RHEL-family and others
apache2ctl -M | grep -i php # Apache with mod_php (httpd -M on RHEL-family)
Step 2: What the website really runs
If you can put a file in the site’s web folder, use a one-line test file instead of a full phpinfo() page. It prints only the version and the SAPI (fpm-fcgi, apache2handler, litespeed and so on, per the manual):
f="v-$(openssl rand -hex 8).php"
printf '<?php header("Content-Type: text/plain"); echo PHP_VERSION, " ", php_sapi_name(), PHP_EOL;\n' | sudo tee "/var/www/html/$f" >/dev/null
curl -s "https://your-site.example/$f"
sudo rm -f "/var/www/html/$f"
Use your real web root and domain. Without shell access, upload the same file by FTP or the file manager, open it once, and delete it straight away. If you prefer phpinfo();, look at PHP Version and Server API only, then delete the file: phpinfo() prints paths, settings and environment data that you do not want to leave on a public URL (manual).
Step 3: Your control panel
| Where | How to see the version | Notes |
|---|---|---|
| WordPress | Tools > Site Health > Info > Server (WordPress docs) | Shows the PHP your site runs on. Updating WordPress or plugins does not patch PHP: Patchstack tells you to update PHP itself (or your vendor’s patched package). |
| cPanel / WHM | MultiPHP Manager lists the PHP version each domain uses (cPanel docs). Server owners: rpm -qa 'ea-php*' (or dpkg -l 'ea-php*') | EasyApache 4 25.91 (21 Oct 2026) fixes ea-php74 to ea-php85 (cPanel changelog). Fixed builds below. |
| Plesk | Domains > example.com > PHP Settings for one site (Plesk KB); Tools & Settings > Updates > Add/Remove Components for installed versions (Plesk docs) | Plesk’s 21 Oct 2026 PHP update lists 8.5.12, 8.4.27, 8.3.36 and 8.2.35 (change log). The Plesk advisory lists the same fixed 8.2 to 8.5 builds for Plesk for Linux and Plesk for Windows. On Linux, 7.4.33, 8.0.30 and 8.1.34 keep their version numbers and only builds made on 21 Oct 2026 or later include the fix, so check the build date. Plesk’s call to action is to update Plesk itself. |
| DirectAdmin | CustomBuild: da build versions; each PHP is under /usr/local/phpXY/bin/php | DirectAdmin staff: run da update then da build php; the PHP upgrade is not automatic unless the CustomBuild cron is on (DirectAdmin forum). For 8.1, 8.0 and 7.4 the version number stays the same, and staff have not published a version string to look for. Our DirectAdmin guide has the details. |
cPanel fixed EasyApache 4 builds (Version-Release from cPanel’s own spec files): ea-php85 8.5.12-1, ea-php84 8.4.27-1, ea-php83 8.3.36-1, ea-php82 8.2.35-1. For the end-of-life ea-php81, ea-php80 and ea-php74 the PHP version number does not change, because the fix is a back-port: look for 8.1.34-5, 8.0.30-12 and 7.4.33-19 (ea-php81 spec, ea-php74 spec, ea-php80 spec). On shared hosting you cannot update these yourself; see hosting status for your host.
Step 4: The package version on Linux
Distro packages keep their old upstream number and add a suffix when a fix is back-ported, so php -v can say 8.3.6 on a patched Ubuntu 24.04. Read the full package version instead.
Debian and Ubuntu:
dpkg -l | grep -E '^ii +php'
apt policy php8.3-cli # read Installed, not Candidate
apt changelog php8.3-cli | grep -m3 -E 'CVE-2026-10961[89]'
RHEL-family (RHEL, Alma, Rocky, Oracle, Amazon Linux):
rpm -qa | grep -i '^php'
rpm -q --changelog php-cli | grep -m3 -E 'CVE-2026-10961[89]'
Alpine:
apk list -I | grep -i php
apk version php84
A changelog line naming the CVE is good evidence that the fix is in. No match does not prove the package is vulnerable, so compare with the vendor figure:
| System | Fixed package version | Source |
|---|---|---|
| Ubuntu 24.04 LTS | 8.3.6-0ubuntu0.24.04.13 | Ubuntu CVE page |
| Ubuntu 22.04 LTS | 8.1.2-1ubuntu2.28 | same |
| Debian 13 (trixie) | 8.4.27-1~deb13u1 | DSA-6574-1 |
| Debian 12 (bookworm) | 8.2.35-1~deb12u1 | DLA-4848-1 |
| Alpine 3.24 php83 / php84 / php85 | 8.3.36-r0 / 8.4.27-r0 / 8.5.12-r0, listed in Alpine’s security database and in the 3.24 community repository when we checked on 22 Oct 2026. Alpine 3.23 php83 / php84 / php85 (8.3.36-r0 / 8.4.27-r0 / 8.5.12-r0) and Alpine 3.22 php82 / php83 / php84 (8.2.35-r0 / 8.3.36-r0 / 8.4.27-r0) and Alpine 3.21 php82 (8.2.35-r0) are listed too, even though their community repositories are past their end-of-support dates. We list no fix for the other older community repositories | Alpine secdb |
| RHEL 10 | php (8.3): 8.3.36-1.el10_2 (RHSA-2026:87070); php8.4: 8.4.27-1.el10_2 (RHSA-2026:87071) | Red Hat CVE page |
| RHEL 9 | php:8.3: 8.3.36-1.module+el9.8.0+25109+6886e21a; php:8.2: 8.2.35-1.module+el9.8.0+25111+a1450321; php (8.0): 8.0.30-8.el9_8.1. php:8.4: Red Hat still lists it as “Affected” with no advisory (22 Oct 2026) | same |
| RHEL 8 | php:8.2: 8.2.35-1.module+el8.10.0+25110+f67151d2; php:7.4: 7.4.33-8.module+el8.10.0+25117+30337cca | same |
| Rocky Linux, Oracle Linux | Rocky Linux 10 and Oracle Linux 10 list 8.3.36-1.el10_2 and 8.4.27-1.el10_2; on 9, Rocky has advisories for php 8.0, php:8.2 and php:8.3 and Oracle for php 8.0 (8.0.30-8.el9_8.1), php:8.2 (8.2.35-1.module+el9.8.0+91079+4ad1bd7f) and php:8.3 (8.3.36-1.module+el9.8.0+91082+c865dc1a); on 8, Rocky has advisories for php:7.4 (7.4.33-8.module+el8.10.0+40393+c071e357) and php:8.2 (8.2.35-1.module+el8.10.0+40394+d21b33fb) and Oracle for php:7.4 (7.4.33-8.module+el8.10.0+91080+9785160d) and php:8.2 (8.2.35-1.module+el8.10.0+91081+33b5c645). Still no entry for Rocky 9 php:8.4 or for other Rocky 8 and Oracle Linux 8 streams | RLSA-2026:87071, ELSA-2026-87071 |
| AlmaLinux 8, 9, 10 | AlmaLinux 10 lists 8.3.36-1.el10_2 (php) and 8.4.27-1.el10_2 (php8.4), AlmaLinux 9 php:8.3 8.3.36-1.module_el9.8.0+330+fdc30075 and AlmaLinux 8 php:7.4 7.4.33-8.module_el8.10.0+4321+cf5fd4bb. Other AlmaLinux builds are not confirmed | AlmaLinux errata |
| Amazon Linux 2023 | php8.2 8.2.35-1.amzn2023.0.1, php8.3 8.3.36-1.amzn2023.0.1, php8.4 8.4.27-1.amzn2023.0.1, php8.5 8.5.12-1.amzn2023.0.1. php8.1: “No Fix Planned” | Amazon CVE page |
| Amazon Linux 2 | Core php package: “No Fix Planned”. amazon-linux-extras php8.2: 8.2.35-1.amzn2.0.1 | same |
More releases and the PPA or sury.org builds are in the Ubuntu and Debian guide and the fixed versions table. Remi’s RPM repository is volunteer-maintained and is not the distro’s own: it has 8.2.35, 8.3.36, 8.4.27 and 8.5.12 builds for Enterprise Linux 8, 9 and 10 dated 21 Oct 2026 (for example 8.4.27-1.el9.remi), though it does not name the CVEs (Remi repository). php.net had said on 21 Oct that it would not have updates that day (php.net); the per-version tables are on fixed versions.
Step 5: Docker
An image tag tells you what you pulled, not what is running. Check the container:
docker ps --format '{{.Names}} {{.Image}}'
docker exec <container> php -v
docker exec <container> php-fpm -v # only in -fpm images
Official php image tags combine a version and a variant such as -cli, -fpm, -apache or -alpine (Docker Hub). A moving tag like php:8.4-fpm only changes when you pull again. To update, rebuild or pull the image, then recreate the container (docker compose pull && docker compose up -d, or your orchestrator’s equivalent); restarting the old container keeps the old image. Compare with the upstream numbers in the first table. When we checked the registry on 21 Oct 2026 (17:11 UTC), the official php:8.5, php:8.4, php:8.3 and php:8.2 images had been rebuilt on 8.5.12, 8.4.27, 8.3.36 and 8.2.35, but an older local copy of the same tag stays old until you pull, so confirm with php -v after you pull. Images with no fixed release (8.1 and older) need a patched build or an upgrade.
Step 6: Compare, then update
| What you see | Meaning | Next |
|---|---|---|
| 8.2.35, 8.3.36, 8.4.27, 8.5.12 or higher on a branch you are using | At or above the upstream fix | Done, if the web SAPI shows it too |
| A lower number on Debian, Ubuntu, RHEL-family or Alpine | May still be patched | Compare the full package version with the vendor table |
| A lower number from a php.net build or a Docker tag | Below the upstream fix | Update through your vendor’s normal path |
| A lower or unchanged number in a control panel or at a host | Can still be patched: some panels and hosts patch in place and keep the number | Check the build or date rule for your panel (see Step 3) or ask your host; see hosting status |
| 8.1 or older | No upstream fix release; the number cannot show a back-port | Ask your vendor whether it ships a back-port (and which package version), or upgrade. Take a backup or snapshot first |
After you update, restart the PHP service so running workers load the new build, then check again:
sudo systemctl restart php8.3-fpm # or php-fpm; or: sudo systemctl restart apache2 / httpd
ps -C php-fpm8.3 -o pid,lstart,cmd # master process should show a start time after your update
php -v
Then repeat the Step 2 test file. Upgrading across branches (for example 8.1 to 8.3) can break plugins and extensions, so take a full backup or provider snapshot first.
Step 7: Paste it into the checker
Open the checker, choose your platform, and enter the version exactly as shown: the upstream number for php.net builds and Docker, or the full package string (for example 8.3.6-0ubuntu0.24.04.13) for distro packages. It compares what you type in the browser; it does not look at your server. For the wider picture, see what php2shell is, and if you sit behind a WAF, read Does a WAF protect you? before relying on it.
If you would rather not work it out yourself, there is a $49 personal patch plan: written steps for your exact setup by email within 24h. See /fix-service/.