Skip to content
Menu

PHP2Shell: Protect Your Clients, Then Replace the Apps You Can't Patch

PHP2Shell response for MSPs: find every PHP install, patch or isolate it, check for exploitation, and sell rebuilds of legacy apps.

Figures are in US dollars unless marked.

Two MSP technicians at a desk in the evening, one at a laptop terminal, the other checking a printed list of client sites

PHP2Shell gives an attacker code execution on a web server with one unauthenticated request, so your job this week is to find every PHP install across your clients, patch it, and isolate whatever cannot be patched. The apps that cannot be patched are also the best upgrade conversation you'll get this year.

In my view, PHP2Shell is worse than its headline suggests. Fixed releases arrived on October 21, 2026 for two critical flaws, CVE-2026-109618 and CVE-2026-109619, each rated CVSS 9.2, in PHP 8.5.12, 8.4.27, 8.3.36 and 8.2.35. Proofs of concept are circulating, and CERT-EU says a demonstrated exploit shows one unauthenticated request can trigger the attack before any application code runs.

PHP2Shell Reaches Every Client With a PHP Web Server

CERT-EU says the flaws affect every PHP installation serving web requests: PHP-FPM, Apache mod_php, php-cgi, FrankenPHP and LiteSpeed. The end-of-life branches, PHP 8.1 and older, are affected too. Wiz Research, which named the flaws PHP2Shell, says nearly every PHP version back to 5.4 carries at least one of them.

That scope is what makes this an MSP problem rather than a hosting problem. Client WordPress sites are the obvious place to look, and they aren't the whole list. Line-of-business portals, booking systems, intranet tools and the reporting page a developer built in 2014 all count, along with appliances and third-party products that embed PHP without saying so.

The question I'd ask of every client site is what breaks first and who finds out first, because on an unpatched server the answer is the attacker, then the hosting provider, then the client's own customers.

Work Each Client Through Five Steps

Go client by client, and finish one before starting the next. The order matters because each step tells you what the next one has to cover.

StepWhat you doWhy it sits here
1. FindInventory every server, container and appliance running PHP, including products that embed it. CERT-EU points to the Dutch NCSC php2shell repository on GitHub for the embedded check.You can't patch what nobody listed, and embedded PHP is the copy that gets missed.
2. PatchMove each install to 8.5.12, 8.4.27, 8.3.36 or 8.2.35, then restart every PHP worker.CISA urges patching immediately, and Wiz says the update is the only complete fix.
3. IsolateTake PHP systems that cannot be patched offline until they are, including anything on PHP 8.1 or older.That is CISA's advice for anything that cannot be patched yet.
4. Look for signsWatch for PHP worker processes launching shells or downloading tools, which CISA flags and has SIGMA rules for. Wiz adds unusual multipart requests followed by memory-limit errors, repeated HTTP 500 errors, large or malformed PHPSESSID cookies, and unexplained worker churn.A patch closes the door, but it doesn't tell you whether someone already walked through it.
5. RecordWrite down what each client runs, what you changed and what is still exposed.Step 5 is the list you'll take into the client conversation below.

A Firewall Rule Buys Time, Not Safety

The claim worth testing first is that a web application firewall rule means a client is covered. Put it against the advisories and it doesn't hold. CISA says a web application firewall may provide some protection until systems are patched, and Wiz says Cloudflare, Fastly, Google, Vercel and other vendors published mitigations for customers who cannot patch immediately. That's useful, and if a client sits behind one of those services today, good.

But CISA only promises some protection from a firewall, and Wiz says the PHP update remains the only complete fix. A rule in front of the server narrows the ways in. It doesn't change the code that breaks. So treat a vendor mitigation as the thing that keeps a client safe while you schedule the patch, never as the patch.

End of Life Decides Whether a Fix Exists

Whether an old app can be fixed depends on two things: which PHP branch it runs, and who built that PHP. An end-of-life PHP app is a car whose maker stopped making parts: it still drives, and the first part that fails stays failed.

What the client runsWhere a fix comes fromWhat you do
PHP 8.2 or newerPHP's own releasesPatch now.
PHP 7.4 to 8.1 from a distribution or LTS vendorSome vendors provide backported fixes, according to CERT-EUAsk the vendor today, and patch if they have one.
PHP 7.4 to 8.1 built from sourceThe PHP security team published minimal backports for these branchesTake it offline, apply the backport, bring it back only once patched, then plan the upgrade.
Older than PHP 7.4None named in the advisoriesAsk whoever supplied that PHP for a fix. Without one, take it offline as CISA advises for unsupported versions, then replace or rebuild it.

The bottom row is where your real work sits. A backport is a patch for this flaw, not support, and my view is that you shouldn't count on the next flaw in an unsupported branch getting one.

The App You Cannot Patch Is the Upgrade Conversation

Look for the app nobody wants to touch because the person who built it left, and it still works. Until this week, "it still works" was a defensible answer. An app on unsupported PHP now has a public, critical flaw, and for anything older than PHP 7.4 the advisories name no fix. That turns a nice-to-have upgrade into a risk the client's leadership can understand in one sentence.

I'd open the conversation with the record from step 5, not with fear. Show the client what you found, what you patched, what is isolated, and what it costs them to leave the isolated app offline. Then put two options in front of them: rebuild the app on a supported stack, or replace it with something off the shelf. Either way, the decision is theirs and the facts are yours.

My view is that this won't be the last time. Wiz says it found PHP2Shell with help from AI models, including Gemini 4 Argon and GPT-5.6 Sol. If that kind of tool can find critical flaws in PHP itself, I'd expect old, unmaintained application code to get the same attention, from attackers as well as defenders.

Rebuilding Old PHP Apps With Claude Code or Codex

My view is that coding agents such as Claude Code and OpenAI Codex are worth testing on exactly this work: reading an unfamiliar codebase, explaining what it does, and writing the replacement under an engineer's direction. If they hold up on your first app, some jobs that were too fiddly to quote could become worth quoting.

I don't buy the version where the AI does the project on its own. The pattern I'd use keeps a person responsible at every step:

  1. Have the agent read the old app and write down what it does, including the odd behaviours the client relies on.
  2. Turn that description into tests before any new code is written.
  3. Rebuild on a supported PHP branch or another stack, and run the same tests against both versions.
  4. Have an engineer review every change and own the cutover.

It depends on the app. A form-and-database tool is a good first candidate. Anything that handles payments or health records needs your normal security review on top, AI or not. Pilot one app, measure the hours it actually took, and price the next one from that.

A Rebuild Is a Project, and Maintaining It Is a Service

The money works on two lines. The rebuild is project work, typically billed at about $185 an hour blended, with 50% the gross margin to aim for on projects.

Take a hypothetical project engineer on a typical $84,000 salary. At a 1.25x burden for payroll taxes, benefits and insurance, excluding paid leave, they cost $84,000 × 1.25 = $105,000 a year. At 1,660 available hours and 85% utilization, they bill 1,660 × 85% = 1,411 hours. That puts their cost at $105,000 / 1,411 = $74.42 an hour, so each hour billed at $185 leaves $185 − $74.42 = $110.58, and $110.58 / $185 = 59.8% gross margin, above the 50% target.

Hours an AI agent saves on a fixed-price quote stay with you, as long as you price the outcome rather than the hours. Then sell the second line: a flat monthly fee to keep the rebuilt app patched, its PHP branch current and its dependencies updated. Say in plain words what that fee includes and what it doesn't. That is the service that stops this client being on next year's unpatched list.

Tell Us If You Want the How-To

We're considering a practical guide to having someone on your team use AI to upgrade clients' legacy apps: picking the first app, the test-first workflow, and pricing the project and the maintenance service. If you'd want that, say so in the comments below, and tell us what your oldest client app runs on.

Written ByDana Kowalski

Staff Writer, Technology and Security. Dana Kowalski covers security, compliance and the MSP tool stack for MSP Outpost. She is more interested in how things actually fail than in how they are sold.

More by Dana

mspoutpost.com/articles/php2shell-protect-your-clients-then-replace-the-apps-you-cant-patch

Written by Dana Kowalski
MSP Outpost publishes information, not legal, financial, insurance, tax or compliance advice, and reading it creates no professional relationship. For decisions about your business, talk to a qualified professional.

Read Time
10 min

Share or Print

On This Page
SponsoredSponsor
Two colleagues review two monitors at an MSP workstation, with a queue whiteboard behind them.

Vendor Performance Management: Count the Support Work

Use vendor performance management to verify support effort and cost active labor, then compare the renewal with correcting or changing the service.

Vendor ManagementRead the Article
Vendor escalation process review: two MSP technicians check an open support ticket and handwritten case notes

Vendor Escalation Process: Evidence, Contacts and Exit

Build a vendor escalation process with clear evidence and contacts. Record missed commitments and compare support options for a defensible switch.

Vendor ManagementRead the Article
Technology & SecurityChoosing the stack and hardening it.Open the Hub
Sources11
  1. CERT-EU advises checking whether third-party products embed PHP, pointing to the Dutch NCSC php2shell repository on GitHub for that checkcert.europa.eu
  2. PHP released fixes for the PHP2Shell flaws on 21 October 2026: two critical remote code execution bugs, CVE-2026-109618 and CVE-2026-109619, each rated CVSS 9.2, fixed in PHP 8.5.12, 8.4.27, 8.3.36 and 8.2.35, according to CERT-EUcert.europa.eu
  3. CISA says organizations that cannot patch PHP2Shell, including those still on PHP 8.1 or earlier unsupported versions, should take PHP-based systems offline until they are patched, and that a web application firewall may provide some protection…CISA
  4. Wiz says Cloudflare, Fastly, Google, Vercel and other vendors published PHP2Shell mitigations for customers who cannot patch PHP immediately, while the PHP update remains the only complete fixwiz.io
  5. For end-of-life PHP affected by PHP2Shell, CERT-EU says some distribution and LTS vendors provide backported fixes, and the PHP security team published minimal backports for source builds of PHP 7.4, 8.0 and 8.1cert.europa.eu
  6. CERT-EU says the PHP2Shell flaws affect every PHP installation serving web requests, including PHP-FPM, Apache mod_php, php-cgi, FrankenPHP and LiteSpeed, and the end-of-life branches PHP 8.1 and oldercert.europa.eu
  7. Wiz Research, which named the flaws PHP2Shell, says it found them with help from AI models including Gemini 4 Argon and GPT-5.6 Sol, and that nearly every PHP version back to 5.4 is affected by at least one of themwiz.io
  8. CISA urges organizations to immediately patch the PHP2Shell vulnerabilities by updating to PHP 8.5.12, 8.4.27, 8.3.36 or 8.2.35CISA
  9. Wiz lists signs of PHP2Shell exploitation: unusual multipart requests followed by memory-limit errors, repeated HTTP 500 errors, unexpectedly large or malformed PHPSESSID cookies, and unexplained PHP worker churnwiz.io
  10. CISA advises monitoring for PHP2Shell activity such as PHP worker processes launching shells or downloading tools, and points to its SIGMA detection rules on GitHubCISA
  11. CERT-EU reports that proofs of concept for the PHP2Shell flaws have begun to circulate, and that PHP demonstrated one unauthenticated request triggering the attack before any application code runscert.europa.eu
Ask other MSP owners

Welcome Back

Sign in to your MSP Outpost account.