---
title: PHP Version Checker: php2shell CVE-2026-109618
description: Check your PHP version, EOL date and known CVEs — php2shell (CVE-2026-109618, CVE-2026-109619) first — from the headers your server already sends. Graded A+ to F, with the exact version to upgrade to. Passive: plain GET requests only, no signup.
canonical: https://watchfor.io/php-version-checker
---

[Back to all free tools](/free-tools)

PHP Version Checker Hot

# Is your site vulnerable to php2shell? Check CVE-2026-109618 & CVE-2026-109619

Check your PHP version, EOL date and known CVEs — php2shell (CVE-2026-109618, CVE-2026-109619) first — from the headers your server already sends. Graded A+ to F, with the exact version to upgrade to. Passive: plain GET requests only, no signup.

[How to use this tool](/blog/php2shell-check-if-your-site-is-vulnerable)

Result

No result yet

Fill in the form above and run it — the result appears here.

Monitor this 24/7 — get alerted when a failure is confirmed.

[Start free](/auth/sign-up)

Only run these tools against systems you own or are authorized to test. Using them to scan or probe systems without permission violates our [Terms](/legal/terms).

## The PHP version grade scale

Every check returns one of these grades, with the reasons and the exact version to install. A version we can't see gets no grade at all: hiding it is good practice, and we never mark a site down for it. Distribution builds that backport fixes are never failed on the version number alone.

A+ Excellent

The latest patch release of a branch with active support, with no known CVE affecting it.

A Good

Patched against everything serious, one step short of A+: a patch release or two behind on an active branch, or the latest release of a branch that now gets security fixes only.

B Needs attention

Behind on a security-only branch, a branch that loses security support within six months, or a medium-severity CVE that a newer patch fixes.

C Weak

A high-severity CVE affects this version, or a distribution build whose version falls in a critical range: verify with your vendor that the fix is in.

D Poor

The release branch reached end of life within the last two years: no more fixes, for any bug, from anyone upstream.

F Failing

Affected by php2shell, by another critical CVE or one that is known to be exploited, or the branch has been out of support for more than two years.

## Every rule, in full

The grade starts at A+ and each problem can only lower the ceiling, so the grade is always explained by the worst finding in the report. Rules version php-2026.10 .

Grade at most When

F Affected by php2shell (CVE-2026-109618, CVE-2026-109619): PHP below 8.2.35, 8.3.0–8.3.35, 8.4.0–8.4.26 or 8.5.0–8.5.11

F Affected by a CVE in CISA's Known Exploited Vulnerabilities catalog, or any CVE scored 9.0 or higher

F The release branch reached end of life more than two years ago

D The release branch reached end of life within the last two years

C Affected by a high-severity CVE (CVSS 7.0–8.9)

C Distribution build (Debian, Ubuntu, Red Hat, SUSE) whose version would otherwise be D or F: the vendor may have backported the fix, so verify — capped at C, never failed on the version alone

B Affected by a medium-severity CVE (CVSS 4.0–6.9)

B On a security-only branch and behind its latest patch release

B The branch loses security support within 180 days

A On a security-only branch, on its latest patch release

A Behind the latest patch release of a branch with active support

— The version is visible in X-Powered-By or Server: reported with the config that hides it, not graded (hiding it is good practice but fixes nothing)

— Version hidden, PHP not detected, or the page did not load: no grade

[How WatchFor grades everything the same way](/grades#php-version)

## What is PHP Version Checker ?

php2shell is the name for two critical PHP vulnerabilities, CVE-2026-109618 and CVE-2026-109619, announced by the PHP project on Oct 20, 2026 and fixed on Oct 21, 2026. Both are bugs in PHP itself — in how it cleans up request memory after an out-of-memory error, and in global state that can keep pointing at freed memory — and both lead to unauthenticated remote code execution (CVSS 9.2). A public proof of concept exists, and PHP's own advisory says every installation serving web requests is at risk. It is not a WordPress or framework bug: the fix is a new PHP build, not a plugin update.

This free PHP version checker tells you, from the outside, what an attacker's scanner sees: the PHP version your server announces in its X-Powered-By or Server header. It grades that version A+ to F against php2shell, the other known CVEs from NVD, CISA's Known Exploited Vulnerabilities catalog and the PHP release calendar — whether your branch still gets security fixes, its end-of-life date, and how many patch releases you are behind — and names the exact version to install. It only sends normal GET requests. Nothing exploit-like ever leaves our probes.

## How it works

One URL in, a graded answer out:

- 1 One normal request — A probe location near you fetches the page with a plain GET, follows redirects, and keeps the response headers. If the page shows no PHP version, it makes exactly one more GET, to /index.php on the site the page landed on — PHP often announces itself on a PHP-served path when the home page is static or cached. That is the whole conversation.
- 2 Read what PHP announces — With expose_php on (the default in php.ini-development and in many distribution builds), PHP adds X-Powered-By: PHP/8.3.14 to every response. Apache with mod_php can add PHP/8.2.20 to the Server header instead. A distribution suffix such as -1ubuntu2.19 , +deb12u1 or (Debian) in Server is kept, because it changes what the version proves. A PHPSESSID cookie shows PHP runs even when the version is hidden.
- 3 Match it against the data — The version is compared with the affected ranges of php2shell and of every PHP CVE in NVD, flagged where CISA lists it as exploited in the wild, and placed in its release branch: active support, security fixes only, or end of life, with the dates. Release data comes from php.net and endoflife.date, refreshed every few hours.
- 4 Grade it — The grade starts at A+ and every finding can only lower it: php2shell or a critical or exploited CVE is an F, an end-of-life branch a D (F after two years), a high-severity CVE a C, a security-only branch that is behind a B. The full rule table is under the tool.

No version visible means no grade. That is the honest answer: hiding the version is good practice, and we can't see what you run from outside.

## When you'd use it

### Right now, because of php2shell

You need to know which of your sites still run an affected PHP before someone else finds out. Run each public hostname; any F from php2shell needs the patch today. Then check the servers that hide their version on the box itself, with php -v and the web server's own PHP.

### After patching

Package managers update the CLI binary while PHP-FPM keeps running the old one until it restarts, and a container keeps its old image until it is rebuilt and redeployed. Run the check again after the restart: the version the web server announces is the one that answers requests.

### Auditing an inherited or client site

An agency site from 2019, a forgotten marketing microsite, a client's shared hosting plan. One run tells you whether its PHP branch is past end of life and how far behind it is, with a link you can send to whoever owns it.

### Planning upgrades

The branch card shows how many days of security fixes your branch has left. Anything under six months is a B for a reason: that is roughly how long a careful upgrade of a large application takes to test.

## Reading the result

### The grade and the first thing to fix

The letter is capped by the worst finding, and the line under it names that finding. Every finding is listed worst first with what it means, the highest grade it allows and the fix.

### What we saw

The exact header line that revealed the version — for example X-Powered-By: PHP/8.1.2-1ubuntu2.19 — and every request we made, with its status code and where redirects landed. If you think the result is wrong, this is the evidence to compare with your server.

### php2shell

Affected, not affected, or verify. Verify means a distribution build whose version is in the affected range: the vendor may have backported the fix, and its tracker (linked in the card) says which package version has it. The table lists the first fixed release of every supported branch.

### Branch support and patch level

Every PHP branch gets two years of active support and two years of security fixes, then nothing. The card shows the release date, both end dates, the days left (or since the end), and the patch gap, e.g. 8.3.14 → latest 8.3.36 (22 releases behind) .

### Other known CVEs

Every other CVE whose affected range includes the version, worst first, with its CVSS score and a KEV badge when CISA lists it as exploited. Some apply only to one setup — PHP-CGI on Windows, or PHP-FPM behind a particular nginx configuration — and say so.

## php2shell: affected and fixed PHP versions

CVE-2026-109618 and CVE-2026-109619 have the same ranges. NVD marks every release below 8.2.35 as affected, so the branches that reached end of life got no fix.

Branch Affected Fixed in Released

PHP 8.5 8.5.0 – 8.5.11 8.5.12 Oct 21, 2026

PHP 8.4 8.4.0 – 8.4.26 8.4.27 Oct 21, 2026

PHP 8.3 8.3.0 – 8.3.35 8.3.36 Oct 21, 2026

PHP 8.2 8.2.0 – 8.2.34 8.2.35 Oct 21, 2026

PHP 8.1 and older Every release No fix — end of life —

## PHP versions: release dates, support and end of life

Every PHP branch since 7.0, newest first, with the latest release of each. Days are counted from today; data as of Oct 22, 2026.

Branch Released Active support until Security support until Days left Latest

PHP 8.5 Nov 20, 2025 Dec 31, 2027 Dec 31, 2029 1,166 days left 8.5.12

PHP 8.4 Nov 21, 2024 Dec 31, 2026 Dec 31, 2028 801 days left 8.4.27

PHP 8.3 Nov 23, 2023 Dec 31, 2025 Dec 31, 2027 435 days left 8.3.36

PHP 8.2 Dec 8, 2022 Dec 31, 2024 Dec 31, 2026 70 days left 8.2.35

PHP 8.1 Nov 25, 2021 Nov 25, 2023 Dec 31, 2025 ended 295 days ago 8.1.34

PHP 8.0 Nov 26, 2020 Nov 26, 2022 Nov 26, 2023 ended 1,061 days ago 8.0.30

PHP 7.4 Nov 28, 2019 Nov 28, 2021 Nov 28, 2022 ended 1,424 days ago 7.4.33

PHP 7.3 Dec 6, 2018 Dec 6, 2020 Dec 6, 2021 ended 1,781 days ago 7.3.33

PHP 7.2 Nov 30, 2017 Nov 30, 2019 Nov 30, 2020 ended 2,152 days ago 7.2.34

PHP 7.1 Dec 1, 2016 Dec 1, 2018 Dec 1, 2019 ended 2,517 days ago 7.1.33

PHP 7.0 Dec 3, 2015 Jan 4, 2018 Jan 10, 2019 ended 2,842 days ago 7.0.33

## Check it yourself

The same headers from a terminal — or the same graded check from ours:

curl -sI https://example.com | grep -iE '^(x-powered-by|server):'

curl https://watchfor.io/php/example.com On the server, php -v shows the CLI's version; the web server can run a different build. php-fpm8.3 -v (the binary name varies by distribution) or a one-line <?php echo PHP_VERSION; file shows what serves requests — delete that file right after.

## Common pitfalls

### Patching the package but not restarting PHP-FPM

apt upgrade or dnf upgrade replaces the files on disk; the running PHP-FPM master keeps the old code in memory. Restart it ( systemctl restart php8.3-fpm , or php-fpm on Red Hat) and Apache if you use mod_php, then run this check again.

### Reading a distribution version as upstream

Ubuntu 22.04 ships PHP 8.1.2 and patches it for years; its version number never moves. That build is in php2shell's affected range by number and may still be fixed. The checker caps such builds at C and asks you to verify in the vendor's tracker instead of failing them — and you should verify, because only the package changelog knows.

### Thinking a hidden version means a safe one

expose_php = Off removes the header; the bug stays. Hide it — scanners use it to pick targets — but patch first. A hidden version also means this tool can't grade you, so check the server directly.

### Containers that never get rebuilt

The official php images are rebuilt for every release, but your image was built from its tag months ago and still runs what was current then. Pull, rebuild and redeploy; pin a branch tag such as php:8.3-fpm rather than a patch release, so every rebuild picks up the latest fixes.

### One host behind a load balancer is still old

Several servers behind one name can answer with different PHP builds. If results differ between runs, a pool member was missed.

### Checking PHP and forgetting the rest of the stack

The same response often names the web server, OpenSSL, the CMS and the JavaScript libraries too, each with its own end of life and CVEs. The [Software Exposure Checker](/software-exposure-checker) grades everything a page reveals in one run, PHP included.

## Run PHP Version Checker on every change, not just once.

Get alerted when an outage is confirmed — across HTTP, DNS, SSL, RDAP, ping, blacklist and more. Free forever for 15 monitors. No card.

[Start free](/auth/sign-up)

## Frequently asked questions

What is php2shell? php2shell is the name for CVE-2026-109618 and CVE-2026-109619, two memory-safety bugs in PHP's request handling that let an unauthenticated attacker run code on the server (CVSS 9.2). The PHP project announced them on Oct 20, 2026 and released fixes on Oct 21, 2026. A public proof of concept exists. Any PHP installation serving web requests is at risk until it runs a fixed release.

Which PHP versions fix php2shell? PHP 8.5.12, 8.4.27, 8.3.36 and 8.2.35, all released on Oct 21, 2026, and every later release. PHP 8.1, 8.0, 7.x and older are past end of life and received no fix: move them to a supported branch.

How do I check my PHP version? From outside, run this tool: it reads the version your server announces in X-Powered-By or Server . On the server, php -v shows the command-line PHP, which can differ from what the web server runs; php-fpm8.3 -v (name varies) or a temporary file containing <?php echo PHP_VERSION; shows the PHP that serves requests. phpinfo() shows everything, which is exactly why it must never stay public: delete the file as soon as you have read it. WordPress shows the version under Tools → Site Health → Info → Server.

Does hiding X-Powered-By protect me from php2shell? No. Setting expose_php = Off and removing the header stops casual fingerprinting, and you should do it, but the vulnerable code still runs. Attackers can and do try exploits blind. Patch first, hide the version second.

My Debian or Ubuntu server shows an affected version. Am I vulnerable? Not necessarily. Debian, Ubuntu, Red Hat and SUSE backport security fixes into their PHP packages without changing the upstream version number, so 8.1.2-1ubuntu2.x can be patched while still saying 8.1.2. Look the CVE up in your vendor's tracker — [Debian](https://security-tracker.debian.org/tracker/CVE-2026-109618), [Ubuntu](https://ubuntu.com/security/CVE-2026-109618), [Red Hat](https://access.redhat.com/security/cve/CVE-2026-109618) — and compare the fixed package version with apt policy php8.1 or rpm -q php . Until you have, treat the server as affected. That is why the checker grades such builds C with a verify note, not F.

Is PHP 8.1 or PHP 7.4 still safe to use? PHP 8.1 reached end of life on Dec 31, 2025, 295 days ago. It gets no fixes at all any more, security fixes included. PHP 7.4 reached end of life on Nov 28, 2022, 1,424 days ago. It gets no fixes at all any more, security fixes included. Neither got a php2shell fix, so both are affected unless a vendor such as Ubuntu Pro or Red Hat still patches your package. Plan the move to PHP 8.5.

When does PHP 8.2 reach end of life? PHP 8.2 gets security fixes until Dec 31, 2026 — 70 days from today. Active support (bug fixes) ran until Dec 31, 2024. After that date nothing gets fixed in 8.2, the next php2shell included. If you are on 8.2 today, install 8.2.35 now and schedule the upgrade to PHP 8.5.

Which PHP versions are supported right now? PHP 8.5 (active support, until Dec 31, 2029), PHP 8.4 (active support, until Dec 31, 2028), PHP 8.3 (security fixes only, until Dec 31, 2027), PHP 8.2 (security fixes only, until Dec 31, 2026). PHP 8.2 is the oldest branch still receiving security fixes.

What should I do right now? Patch: install the fixed release of your branch (8.5.12, 8.4.27, 8.3.36 or 8.2.35) through your package manager, a rebuilt container image or your host's control panel. Restart PHP-FPM or Apache so the new code runs. Run this check again to confirm the announced version changed. If you are on 8.1 or older, move to a supported branch. Then turn expose_php off, and set up a monitor so the next advisory doesn't depend on you remembering to look. The [step-by-step guide](/blog/php2shell-check-if-your-site-is-vulnerable) has the commands for Debian, Ubuntu, Red Hat and Docker.

Is this check safe to run against my site? Yes. It sends the same plain GET request a browser sends, at most twice (the page, and /index.php if the page shows no version), from a signed WatchForBot probe. It never sends exploit payloads, malformed requests or anything that could trigger php2shell.

Why did I get no grade? Because we could not see a version: the server hides it (good), the site does not run PHP, or the page did not load from our location. A hidden version is never graded as a failure — check it on the server with php -v and compare it with the fixed versions above.

How is the grade worked out? It starts at A+ and each finding can only cap it: php2shell, an exploited or critical CVE, or a branch more than two years past end of life is F; end of life within two years is D; a high-severity CVE is C; a security-only branch behind its latest release, or one ending within six months, is B; anything short of the latest release on an active branch is A. The full rules and the rubric version are under the tool and on the [WatchFor Grade](/grades#php-version) page.

## Related web tools

- [Software Exposure CheckerSee which software versions your website reveals in its headers and HTML — web server, PHP, CMS, JavaScript libraries — and whether any is outdated, past end of life or has known CVEs. Graded A+ to F, with the fix for each. One plain GET, no signup.](/software-exposure-checker)
- [MCP Server CheckerTest a Model Context Protocol server the way an agent does — initialize handshake, protocol version, HTTPS, sign-in discovery and the full tool inventory — and get an A+ to F grade with the exact fix for every problem. Open servers are never marked down for being open.](/mcp-server-checker)
- [SSL Certificate CheckInspect certificate validity, expiry, SANs, issuer and chain trust.](/ssl-checker)
- [SSL/TLS GradeGrade a server's TLS config A+ to F — protocols, ciphers, forward secrecy, post-quantum, HSTS and certificate, with the exact reasons.](/ssl-grade-checker)

---

Canonical page: https://watchfor.io/php-version-checker · Site guide: https://watchfor.io/llms.txt
