PHP2Shell: An Urgent Response Checklist for MSPs
PHP2Shell is the name used for two critical PHP flaws, CVE-2026-109618 and CVE-2026-109619, that PHP fixed on October 21, 2026 in versions 8.5.12, 8.4.27, 8.3.36 and 8.2.35. Both are rated 9.2 on the CVSS v4.0 scale and can allow remote code execution on servers that run PHP for web requests, with Apache mod_php rated the highest risk. Updating PHP on the server is the real fix, and updating WordPress or its plugins does not do it. PHP 8.1, 8.0, 7.4 and older get no normal update, so those systems need a vendor patch, an upgrade or isolation. Sources differ on how much exploitation has happened, so treat internet-facing PHP as actively targeted and patch it first.
This situation is still moving. Patches are out for four PHP branches, several sources report attack activity, and at least one control panel vendor had no patch ETA when its forum thread was last read. Check your vendor’s advisory and CISA’s Known Exploited Vulnerabilities catalog before relying on anything here, including this page.
I am a marketer, not a security researcher, so nothing on this page is new technical research. It gathers what PHP, Qualys, Huntress, watchTowr, JFrog, Akamai and national cyber agencies have published, points out where they disagree, and adds the two parts I can speak to: telling your clients, and protecting your own website. Every claim carries its source at the bottom. Where something is my judgment, it says so.
What happened
Details of two PHP vulnerabilities leaked online on October 20, before the coordinated disclosure PHP had planned. Huntress reports that watchTowr confirmed the leaked flaws were real, and that PHP had already given advance notice that a fix would ship on October 21 at 14:00 UTC. PHP also said it reserved the right to release sooner if details became public. Fixes then shipped for four PHP branches.
| Date | Event | Source |
|---|---|---|
| October 20 | Details leak online; watchTowr confirms the flaws are real; Qualys publishes a note on PHP’s advance notice of a critical security release | Huntress, Qualys |
| October 21 | PHP releases 8.5.12, 8.4.27, 8.3.36 and 8.2.35. Cloudflare’s CTO says the company is already seeing early attacks | Qualys, BleepingComputer |
| October 22 | watchTowr reports exploitation in its honeypots since October 21 and notes that CISA has not added either CVE to its Known Exploited Vulnerabilities catalog | watchTowr |
The two flaws in plain English
| CVE-2026-109618 | CVE-2026-109619 | |
|---|---|---|
| What goes wrong | PHP runs out of memory while setting up a request, leaves data half-built, and cleanup treats it as valid | Request-specific state outlives the memory behind it, and a later request on the same worker can use the stale data |
| Bug class | Out-of-memory corruption | Use-after-free from stale global state |
| Reported attack shape | One request per attempt in the demonstrated mod_php case | Two requests on the same worker |
| Result | Remote code execution with the web worker’s privileges, with no authentication or user interaction | |
| Severity | CVSS v4.0 score of 9.2 for each, rated critical by PHP | |
The vector PHP published marks attack complexity as high. Qualys ties that to memory layout, the PHP build and how requests land on workers, which is why not every attempt will succeed. That is a reason attacks may be unreliable, not a reason to wait.
The researchers do not describe the bugs identically. JFrog treats the two CVEs as the same underlying defect seen from two angles, and reconstructs one exploit chain through PHP’s session upload-progress feature. That reconstruction is JFrog’s, not PHP’s, so use it as background rather than as the official account.
Who is exposed
- Any PHP serving web requests. PHP’s guidance, as relayed by Qualys and Huntress, lists PHP-FPM, Apache mod_php, php-cgi, FrankenPHP and LiteSpeed.
- Apache mod_php first. BleepingComputer quotes PHP rating the risk highest for mod_php, where an unauthenticated request can trigger the attack before any application code runs.
- Command-line use is not discussed. The sources I read describe web-serving installations and do not address CLI-only scripts.
- The bug is in PHP, not in your CMS. WordPress, Drupal, Joomla and Magento sites run on PHP, so they are exposed through the server’s PHP. CybelAngel notes that updating the CMS or its plugins does not apply the fix.
- PHP you did not install. Huntress warns that PHP is also bundled in vendor appliances, control panels and Windows software that do not advertise it.
Internet-wide counts of exposed PHP hosts are in the millions, and the figures depend on the method. BleepingComputer cites a VirusTotal estimate above 5.1 million hosts, while CybelAngel cites Shodan-based counts of about 2.24 million. Both count hosts, not organizations, so use them for scale only.
Is it being exploited?
The sources disagree on detail. Here is what each one says, and when.
| Source | What it reports |
|---|---|
| PHP (via BleepingComputer) | Risk highest for mod_php, with a demonstrated exploit. A demonstration is not the same as attacks in the wild. |
| Cloudflare CTO (via BleepingComputer, October 21) | Already observing early attacks. Cloudflare deployed WAF rules, which he called temporary. |
| watchTowr (updated October 22) | Observed exploitation in its honeypot network since October 21. CISA had not added either CVE to its KEV catalog. |
| Singapore CSA (alert AL-2026-151) | Reports widespread exploitation attempts and several proof-of-concept exploits in development. |
| Huntress (October 21 update) | Had not seen exploitation on its partner systems as of 4:30 pm ET that day, and notes that others reported attacks. |
| JFrog | Reached several working proofs of concept and did not publish them. Found fake GitHub proof-of-concept repositories that change the victim’s wallpaper. |
The sources I read describe attack attempts and demonstrations. None documents a named victim. My reading, which is an opinion and not a finding: an unauthenticated, remotely triggerable flaw with leaked details and public reports of attack traffic is worth treating as actively targeted until you have patched, and the cost of that assumption is a few hours of patching you were going to do anyway.
Check a PHP version
Enter the PHP version a server reports and how PHP is served. The checker compares it with the fixed releases published by PHP. It runs in your browser and sends nothing anywhere.
Example values only. A distribution package can carry the fix under an older version number, so the checker cannot call a package safe or unsafe on its own. Check your vendor’s advisory for both CVE IDs.
What to patch first
This order is my own, built from the advice in the Huntress and watchTowr write-ups. It is not an official ranking.
| Order | What | Why |
|---|---|---|
| 1 | Internet-facing servers running Apache mod_php; shared or multi-tenant web servers you operate; client sites you host | PHP rates mod_php highest, and Huntress and watchTowr both say to patch internet-facing systems first |
| 2 | Other internet-facing PHP: PHP-FPM, LiteSpeed, FrankenPHP, php-cgi; PHP inside internet-facing control panels and vendor appliances | All are in scope per PHP |
| 3 | Internal-only web apps that run PHP, including PHP bundled in internal vendor software | Lower exposure but still in scope |
| 4 | Anything on PHP 8.1 or earlier, anywhere | No normal patch exists. Start the decision on upgrade, isolate or replace today |
Step 1: Find every PHP install
Huntress recommends starting with an inventory of every PHP installation, including PHP bundled in vendor appliances, Windows software, control panels and CMS deployments. The check list below turns that into tasks.
- List every internet-facing web server you manage, including client servers, staging servers and anything a former project left running.
- Record how each one serves PHP: mod_php, PHP-FPM, LiteSpeed, FrankenPHP or php-cgi.
- Record the PHP version of the web process, not only the command line. The command-line
php -vreports the CLI binary, which can differ from what the web server loads. - Add vendor software that bundles PHP: control panels, ticketing or help desk tools, backup consoles, monitoring portals and line-of-business apps.
- Add client-hosted sites that you do not manage but that clients may expect you to answer for.
- Open a ticket per system so you can show a client exactly what was checked, and when.
These commands are common starting points. Names and paths vary by distribution, so adapt them.
apachectl -M | grep -i php # Apache: is mod_php loaded?
php-fpm -v # PHP-FPM (the binary may be named php-fpm8.3 -v)
php -v # CLI only, which can differ from the web version
rpm -q --changelog php-fpm | grep -i CVE-2026-10961 # RPM: look for the fix by CVE
apt changelog php8.3-fpm | grep -i CVE-2026-10961 # Debian or Ubuntu: same idea
On Windows with IIS, php-cgi.exe -v reports the version of the binary the site calls. Distribution builds may keep an older upstream version number while carrying the fix, which Qualys flags, so the changelog search matters as much as the version.
Step 2: Patch and restart
- Update to the fixed release for the branch, or to your distribution’s patched package. The fixed releases are 8.5.12, 8.4.27, 8.3.36 and 8.2.35. Huntress says Linux distributions and LTS vendors received patches early, so check their packages first.
- Restart every PHP worker, not only the service you updated. watchTowr’s guidance is to restart all PHP workers after updating, because a running process keeps the old code in memory.
- Confirm the running version, using the checker above or the commands in step 1.
- Test the things clients notice: logins, forms, bookings and payments.
- Close the ticket with evidence: version before, version after, time of restart.
Control panels and hosts. If a panel or host controls PHP for you, you may be waiting on them. In a Plesk community forum thread I read, a Plesk community manager said shortly before the release that fixed versions would be added to Plesk PHP packages but gave no precise ETA, and users in the same thread were asking whether older branches would be backported. That thread is a snapshot, not a current status. Ask your own panel and host vendors for a written answer, and record it.
If you cannot patch yet
PHP says updating is the only complete fix, and watchTowr repeats that PHP states no configuration change fully mitigates these flaws. The measures below, as relayed by Qualys, JFrog and BleepingComputer, only reduce known attack paths, and each has a cost. Use them as a bridge, restart the PHP workers after changing settings, and keep the patch ticket open.
| Measure | Aimed at | Limits and cost |
|---|---|---|
session.upload_progress.enabled=0 | CVE-2026-109619, the known abuse path through session upload progress | Turns off the upload-progress feature. JFrog notes it does not cover the OPcache or backtrace routes. |
fatal_error_backtraces=0 (PHP 8.5 only) | CVE-2026-109619 | Removes backtraces from fatal errors on 8.5. |
memory_limit=-1, set where applications cannot override it | CVE-2026-109618, per PHP’s guidance | Removes memory exhaustion protection, so pair it with container or cgroup limits. JFrog says not to use RLIMIT_AS or RLIMIT_DATA. |
Low post_max_size | CVE-2026-109618 | BleepingComputer reports 8M without file uploads and 32M with them. Large uploads will fail. |
pm.max_requests=1 (PHP-FPM) | Breaks the same-worker condition for CVE-2026-109619 | Restarts a worker after every request, which adds overhead. JFrog lists it as optional. |
| WAF rules | Attack attempts at the edge | Vendor-specific. Cloudflare’s CTO called its rules temporary, and Akamai says its own rules cover weaponized payloads. |
| Restrict or isolate the service | Everything | Interrupts users, but it is the strongest bridge when patching is delayed. |
Hiding errors does not help. BleepingComputer reports that suppressing errors with error_reporting, display_errors or the @ operator does not mitigate these flaws.
Step 3: Look for signs of misuse
Patching closes the door. It does not tell you whether anyone walked through it first. Huntress says the most likely sign of exploitation is suspicious child processes spawned by PHP. It also said Sigma and YARA rules and indicators of compromise were still to be published when it wrote.
- Process watch: PHP workers (
php-fpm,php-cgi,httpd,apache2andphp-cgi.exeon Windows) launching shells such assh,bash,cmd.exeorpowershell.exe, interpreters such aspythonorperl, or download and network tools such ascurl,wget,ncorcertutil.exe. - Command lines: reverse-shell patterns such as
/dev/tcp/,fsockopenandmkfifo, and reconnaissance commands such aswhoami,id,uname -aoripconfig. - The file system: new or changed files in web roots, new cron jobs or scheduled tasks, and new accounts.
- If you suspect compromise: isolate the server, preserve web and PHP logs, and check for webshells before you clean anything up.
Without EDR on a Linux server, Huntress suggests Florian Roth’s process-watching tool in observe mode.
Unsupported PHP versions
PHP 8.1 and earlier no longer receive official updates. PHP provided minimal source backports for 7.4, 8.0 and 8.1, which CybelAngel describes as meant for people who build PHP themselves, not for typical hosting accounts. watchTowr confirmed that older unsupported branches, including PHP 5, are affected, and the Singapore CSA says the flaws affect all versions of PHP.
That leaves four options. Pick one per system and put the decision in the ticket.
- A vendor or LTS package that lists both CVE IDs in its advisory.
- An upgrade to a supported branch. Huntress recommends the latest 8.5.x where testing allows. CybelAngel notes that PHP 8.2 is in security-only support until December 31, 2026, so it is a short runway.
- Isolation: take the system offline, or put it behind a VPN or WAF. Huntress gives this as the answer for end-of-life PHP that cannot be upgraded right away.
- Third-party patches: Huntress says it cannot evaluate them, so treat them as a risk you are accepting, not a fix.
Telling your clients
This is the part of the response where marketing and operations meet. A calm, specific note often does more for client trust than silence, though that is my opinion and not a measured result. Three rules keep it honest.
| Do | Avoid |
|---|---|
| State what was announced, with the CVE IDs and the date | Describing exploit details or naming specific attack methods |
| Say what you are checking and when you will report back | Saying every client is protected before you have verified it |
| Report what you found, even when the answer is “nothing found” | Inventing a number of attacks or victims |
| Ask clients with their own hosts to request written confirmation from that host | Using the incident to push a sales offer in the same message |
Here is a starting point. Replace the brackets, delete anything that is not true for that client, and send the follow-up you promise.
Subject: PHP security update: what we are doing for [Client]
Hi [First name],
On October 21 the PHP project released fixes for two critical vulnerabilities, CVE-2026-109618 and CVE-2026-109619. PHP runs many websites and web applications, including some the vendors do not advertise.
We are checking every system we manage for you that runs PHP, starting with those reachable from the internet. By [date and time] we will confirm which of your systems were affected, what we updated, and whether we found any sign of misuse.
If you also run a website or application that we do not manage, please ask the company that hosts it to confirm in writing that PHP has been updated and restarted.
[Your name]
[Title], [MSP name]
[Phone]
If the note turns into a sales pitch, CAN-SPAM’s rules for commercial email apply. The FTC’s compliance guide, linked below, covers what they require.
Your own website
Your MSP’s marketing site probably runs on PHP too, especially if it is built on WordPress, and it may sit on a shared host you do not control. A compromised MSP site is awkward at any time and worse in the week you are writing to clients about this. For a WordPress site, work through this short list.
- Find out who patches the PHP: you, your host or a managed WordPress provider.
- Ask the host in writing to confirm the patched PHP release or distribution package revision, and that the workers were restarted.
- Do not treat a WordPress or plugin update as the fix. It does not touch the PHP runtime.
- Test after the update: contact forms, the audit request form, logins and any booking tool.
- Review the logs for unusual requests or file changes, and keep a recent backup.
- Remove any test page that prints PHP configuration if one is still public.
If the check turns up a site that is slow, dated or hard to update, that is a design and hosting decision for a calmer week. The MSP website design page covers how MSPHustle approaches it.
Need your MSP website marketing reviewed?
I’ll record a personal video audit of your website, forms and ads, with the top three fixes, within 48 hours. It is a marketing review, not a security assessment, so it will not replace the patching above. Free, no sales call.
Get your free MSP marketing auditFrequently asked questions
What is PHP2Shell?
PHP2Shell is the name used for two critical PHP vulnerabilities, CVE-2026-109618 and CVE-2026-109619. Both can allow remote code execution on a server that runs PHP to serve web requests, and PHP gave each a CVSS v4.0 score of 9.2. PHP released fixes on October 21, 2026.
Which PHP versions fix PHP2Shell?
PHP 8.5.12, 8.4.27, 8.3.36 and 8.2.35 contain the fixes. PHP 8.1, 8.0 and 7.4 get no normal release, only minimal source backports, and older branches get nothing from PHP. Linux distributions and long-term-support vendors may ship fixes under older version numbers, so check the vendor advisory.
Is PHP2Shell being exploited right now?
Sources disagree on detail, but several report attack activity. Cloudflare’s CTO reported early attacks, and watchTowr reported exploitation in its honeypots from October 21. Huntress had not seen exploitation on its partner systems as of its last update, and CISA had not listed either CVE as of October 22. Treat internet-facing PHP as actively targeted.
Does PHP2Shell affect WordPress sites?
The flaws are in PHP itself, not in WordPress core, themes or plugins, but WordPress sites run on PHP and are exposed through the server’s PHP. Updating WordPress, themes or plugins does not patch PHP. Ask your host to confirm the patched PHP release and that the PHP workers were restarted.
Can I mitigate PHP2Shell without updating PHP?
Only partly. PHP and security vendors describe interim measures such as turning off session upload progress, limiting request size and restricting public access, but they state that no configuration change fully mitigates the flaws. Updating PHP is the only complete fix, so use mitigations only as a bridge.
What should I do about PHP 8.1, 8.0 or 7.4?
These branches are end of life and get no normal update. Use a vendor or long-term-support package that lists both CVEs, or upgrade to a supported branch. Until then, take the system offline or restrict it to a VPN or a web application firewall, and treat it as your highest-risk system.
Should an MSP email its clients about PHP2Shell?
A short, factual note is reasonable: what was announced, what you are checking, and when you will report back. Do not claim every system is patched until you have verified it, and keep sales pitches out of it. If the message turns promotional, CAN-SPAM rules for commercial email apply.
Sources
- PHP project, security announcements, October 2026. This is the primary advisory, which the Singapore CSA and Akamai reference. The facts above are as relayed by the sources below.
- Qualys, “PHP Announces Critical Security Release for Two Vulnerabilities” (October 20, 2026)
- Huntress, “Rapid Response: php2shell, Leaked Critical PHP Vulnerabilities”
- watchTowr, “PHP2Shell FAQ: CVE-2026-109618 and CVE-2026-109619 Fixes” (updated October 22, 2026)
- JFrog Security Research, “PHP2Shell: All You Need to Know About CVE-2026-109618 and CVE-2026-109619”
- BleepingComputer, “PHP ships emergency patches for critical PHP2Shell flaws”
- Cyber Security Agency of Singapore, “Critical Vulnerabilities in PHP” (AL-2026-151)
- Akamai, “Critical Remote Code Execution Vulnerabilities in PHP Core” (October 21, 2026)
- CybelAngel, “2.24M Internet-Facing PHP Hosts, 59% on Versions With No Fix Coming”
- Plesk Community, “ETA for critical PHP security updates (CVE-2026-109618 / CVE-2026-109619)?” (forum thread)
- Federal Trade Commission, “CAN-SPAM Act: A Compliance Guide for Business”