PHP2Shell exposure check
Decides whether a server's PHP is affected by CVE-2026-109618 and CVE-2026-109619 from facts collected on the server itself, including distribution backports, missed restarts and interim mitigations. The verdict is computed in this tab; what you paste is not sent anywhere.
1Collect
PHP probe
or fetch it on the server
curl -fsSLO https://php2shell.sqzer.com/downloads/php2shell-selfcheck.php- Set
$TOKENin the file to 12 or more random letters, digits,-or_, for example the output ofopenssl rand -hex 16. - Give the file an unguessable name and upload it to the site's web root.
- Open
https://<site>/<file>.php?k=<TOKEN>once. The file then tries to delete itself and says so if it cannot. - Repeat per vhost and per PHP-FPM pool; each may run a different PHP.
Server script
or fetch it on the server
curl -fsSLO https://php2shell.sqzer.com/downloads/php2shell-server-check.sh && sha256sum php2shell-server-check.shread it, then run it
sudo sh php2shell-server-check.sh --logs- POSIX sh, read-only, no network access. Compare the printed hash with the one shown above (also in SHA256SUMS) and read the script before you run it.
- Reports installed PHP packages and the CVE entries in their changelogs, and PHP processes still mapped to files replaced by an update.
--logsscans web server, PHP-FPM and kernel logs for indicators;--webroot DIRlists PHP files changed in the last 3 days.- Run as root to inspect processes owned by other accounts.
Response header
curl -sI https://<site>/ | grep -i x-powered-by- Use only when you have no access to the server.
- Works only if the header is exposed, and describes only the PHP behind that URL.
- Debian and Ubuntu package revisions in the header are still recognised. Settings, other vhosts and restarts are not visible.
3Result
No result yet. Collect facts on the server, paste the output and run the check.
| Patched | At or above the upstream fixed release, or a distribution package carrying both fixes. |
|---|---|
| Vulnerable | Below the fixed release, including upstream builds of end-of-life branches. |
| Fix pending | The distribution tracks the CVEs but has not shipped a fixed package. |
| Restart needed | The fixed package is installed; the running PHP is still the old build. |
| Undetermined | Not enough evidence. Never reported as safe. |