‹ FeedCybersecurity
Cybersecurity

PHP2Shell Scanner and Free Checkers

Free PHP2Shell checkers read headers, probe behavior or lean on a vendor platform, and none of them can prove you're patched. Here is what each type can tell you, which can hurt a live server, and where the real check runs.

6 min read

Free PHP2Shell checkers answer one of three narrow questions: what your server announces, how it behaves under a test request, or what a vendor's platform found. An unauthenticated external scan can't reliably establish the exact installed PHP package or its backport status. Tools with authenticated or agent access to the host can inspect package details and patch status, which is why the check that settles it runs on the server. The complete PHP2Shell guide covers both flaws in full. This page covers the tools, which of them can hurt a live server, and where the real check happens.

You're potentially exposed until the exact running build and vendor patch status are verified if: PHP serves your web requests and reports a version below 8.5.12, 8.4.27, 8.3.36 or 8.2.35, or runs on an older branch.⁠1 A version string alone doesn't prove exposure, because a vendor backport can carry the fix under an older-looking number.⁠2 You're not exposed if: you run one of the fixed releases or later, or your vendor confirms a build with the fixes for both CVEs. A scan can't change that answer, and a clean scan is not proof of safety. CISA added both CVEs to its KEV catalog on 26 October, so exploitation is confirmed.⁠3 Status as of 3 November 2026.

The three kinds of tool

Passive version checkers

Astra's free checker takes a public URL, reads the X-Powered-By and Server response headers, and compares any PHP version it finds with the fixed releases.⁠4 Reported Astra lists its own limits: a hidden version does not mean the system is safe, and the command-line PHP can differ from the version PHP-FPM or Apache uses. Its results table sends backported builds to the vendor's advisory and changelog.⁠4

The version read uses public headers. The checker's optional probes are a separate step. Astra warns that its out-of-memory probe may stress PHP workers, especially in low-memory environments, and advises against running disruptive checks on production unless you have approved the risk.⁠4

Active probe scanners

Assetnote's open-source scanner (MIT license) is a command-line tool that documents its detection method and judges a target by how it behaves.⁠5 Reported Per its README, it sends a 42-byte control request, then up to three multipart probes totalling about 29 MiB per tested path, and stops once it has a verdict. It reports a target as vulnerable on a PHP memory-exhaustion error, an empty HTTP 500 that differs from the control response, a PHP-FPM worker failure, or an advertised version known to be unpatched.⁠5

The README also lists false positives. Patched PHP 8.4.27 returned the same empty 500 with memory_limit between 2M and 32M, and patched 8.3.36 did at 128M when max_multipart_body_parts was 2785 or higher. When PHP hides its version, the scanner can't tell that safe post-patch failure from the vulnerable one.⁠5

A probe built to make a server fail can make your production worker fail. Run one against a staging copy or in a maintenance window, within the scope the system's owner approved, and tell your host first. We give no run commands here.

Vulnerability-management platforms

Reported Qualys announced a free PHP2Shell service on 26 October: 15 days, up to 1,000 assets, counted from activation.⁠2⁠6 Qualys says it scans internet-facing assets from its cloud without agents and checks exploitability with harmless validation payloads. ITWire's copy of the press release names VMDR, ETM and TruRisk Eliminate as the products involved.⁠2⁠6 Qualys's own example narrowed one environment's 1,539 PHP assets to 25 confirmed.⁠2

That is one vendor-picked case. The offer suits a team with many servers, containers and bundled PHP. For one small site it is a form to fill in. This is a description, not a recommendation.

Before you run anything

Scan only systems you own or have written authorization to test, and stay inside the approved scope. Authorization doesn't make a test safe. Even an approved active probe can crash workers and cause an outage, so agree the target paths, the time window and the stop condition with the system's owner before it runs.

  • Prefer passive checks on production. Keep active probes for staging or a maintenance window, with your host informed.
  • Verify where a tool came from. Read any script before you run it, prefer a publisher you can identify and code you can read, and confirm the repository owner yourself, because "PHP2Shell" in a name is not provenance. Don't paste secrets into a web checker.
  • Walk away from unverified downloads, unknown publishers, requests for credentials or site access the tool doesn't need, and tools whose behavior you can't evaluate. Legitimate security tools can require installation, so check the publisher and read what the tool does first.

Nothing says incident response like running an unread script from a stranger's repository on the box that holds your database password. This is general supply-chain hygiene, not a claim about any specific tool.

What a scanner can't tell you

A scanner reports on the present. It can't say whether someone got in before you patched. Astra says patching stops further exploitation of the fixed flaw but doesn't show whether an attacker had access earlier.⁠4 What to do if the scan was too late covers the signs and first moves, and what exploitation looks like in logs shows where to look.

CVE-2026-115560 is a separate flaw. PHP disclosed it on 23 October, the 21 October releases do not fix it, and PHP suggests session.upload_progress.enabled=0 until the next regular bugfix release.⁠1 The Assetnote README names only the two PHP2Shell CVEs, and the fixed releases Astra's checker measures against do not fix it.⁠4⁠5

Opinion A CDN or WAF in front of the site can rewrite headers or answer a request before it reaches PHP, so a result may describe the edge and not your runtime.

How you'd notice

The sign you're misreading a scan is a mismatch. The version a header advertises, the version php -v prints and the version the web server runs are three separate facts. php -v reports the command-line build. PHP-FPM and Apache load their own, and Astra says they can differ.⁠4 Read the version from the binary or module serving requests, then match the package build to your vendor's advisory or changelog, since a backport can keep the old number.⁠2 The server-side steps are in the guide to checking the version on the server itself.

Do this

Do today

  1. Read the PHP version from the binary or module that serves web requests on every server and container, using the server-side version check, and match the package build to your vendor's advisory or changelog.
  2. Install the fixed release (8.5.12, 8.4.27, 8.3.36 or 8.2.35) or a vendor build with the backport, then restart every PHP worker. The patch steps cover PHP-FPM and Apache on Linux.
  3. Treat any online checker result as a hint, and confirm it on the server.
  4. Ask your host in writing for the package build and patch status if you have no server access.

Do this week

  1. Add PHP versions, including containers and bundled PHP, to your asset inventory.
  2. Schedule a recurring server-side version check.
  3. Hide X-Powered-By if you want, as minor hardening only. It blinds passive checkers and fixes nothing.
  4. Run an active probe only against staging, within the approved testing scope and with your host informed, if you want a behavioural test.

Can wait

  1. Hold off on buying a commercial scanner for a single small site.
  2. Postpone comparing scanner feature lists until the server-side checks are done.

FAQ

Trust it for what it states it does. Astra's free checker reads public headers and compares the version with the fixed releases, and Astra says a hidden version proves nothing. Treat the result as a hint and confirm the running version on the server.

No. According to Astra, a hidden PHP version doesn't mean a system is secure, and patching doesn't show whether an attacker got in earlier. A backported build can also keep an older-looking version number, per Qualys.

An active probe can. Astra warns its out-of-memory probe may stress workers in low-memory environments, and Assetnote's README says it sends about 29 MiB across up to three probes per path. Even authorized testing should stay inside the approved scope, run on staging or in a maintenance window, and be agreed with your host.

No. It stops passive checkers from reading your version, and Astra says a hidden version doesn't mean the system is safe. The flaw is in the PHP build, so patch it.

You've reached the end

PHP2Shell Scanner and Free Checkers

The full article has comments, related reading and sharing.