Emergency service
PHP2Shell Emergency Fix: We Patch Your PHP, Test the Site and Check for Intruders
The fix for PHP2Shell is a version number. Getting it onto your server without breaking the site, and then proving nobody got in first, is the part that eats an afternoon. Hand us that afternoon.
October 23, 2026 · 10 min read
The short answer
DataCram updates your site's PHP to a fixed release (8.2.35, 8.3.36, 8.4.27 or 8.5.12) or moves it to a host that offers one, applies the PHP project's interim settings if the update must wait, tests the site, checks for signs of compromise and cleans up if needed. WordPress repairs are fixed price from $249.
On this page
The patch shipped October 21. Your server may not have it.
On October 21, 2026, the PHP project released versions 8.5.12, 8.4.27, 8.3.36 and 8.2.35 to close two critical holes, CVE-2026-109618 and CVE-2026-109619, both rated CVSS v4.0 9.2. Wiz Research, which found them and named them PHP2Shell, says an anonymous visitor can, under the right conditions, run code on the server. The flaws sat in PHP for more than a decade. With the help of AI models, one researcher found them in about a week. The full story is on the PHP2Shell hub.
Here is the awkward part. A release on php.net does nothing for your site until it is installed on the machine that serves it. On shared hosting, the host has to ship the new build and someone has to select it. On a VPS, someone has to run the update and restart PHP. In Docker, someone has to rebuild the image and redeploy. Meanwhile the host's status page says all systems normal, which is true in the sense that the systems are running normally, vulnerable version included.
The PHP project's own release notes are blunt: "There are no complete mitigations, updating is the only safe choice." Security firms reported attack attempts against their sensors within a day of disclosure. Confirmed compromises had not been publicly reported as of October 22, and that can change any day. If you are not sure where you stand, find out whether you are affected first, or let us find out for you.
Nor is this a one-week story. In a CNBC interview on October 23, CrowdStrike's chief executive said we will see a lot of breaches in the coming months from this vulnerability. A breach that surfaces in February usually starts with a server someone meant to update in October. The cheapest day to patch is the day you read about it.
A security release is a promise. It becomes a fix when it reaches your server.
Seven moves, in the order we make them
Emergencies reward a fixed sequence. We do not improvise on a live server, and we do not update first and back up later. This is the order, and each step produces something you can see.
- 1
Read the server
We record the exact PHP version, how PHP is wired to the web server (PHP-FPM, mod_php, LiteSpeed and so on) and who controls the build: you, your host or a container image. Risk is highest for mod_php, per the PHP project.
- 2
Take a full backup
Files and database, stored off the server, before anything changes. If the site was already tampered with, this copy is also the evidence.
- 3
Install a fixed release
We move the site to PHP 8.2.35, 8.3.36, 8.4.27 or 8.5.12. If the host cannot offer one, we move the site to a plan or host that can. On a VPS we update the packages and restart every worker; in Docker we rebuild and redeploy.
- 4
Hold the line if the update must wait
When a theme or plugin will not survive the jump today, we apply the PHP project's interim settings and request limits, then schedule the update. These narrow the attack paths; they do not close them.
- 5
Test the site like a customer
Home page, forms, checkout, logins, search and admin, on desktop and phone. Themes, plugins and page builders that choke on newer PHP are the usual casualty, and we fix or replace what breaks.
- 6
Look for footprints
We check for the warning signs Wiz described and for the ordinary marks of a break-in: new PHP files in uploads, unknown admin users, strange scheduled tasks.
- 7
Clean up and report
If we find an intruder, we remove the code, close the way in and rotate the passwords and keys the server could read. Then you get a written report.

Fixed prices, paid on the page
Most of our PHP2Shell work lands in one of four fixed-price repairs from our Fix It Now menu. You pick the tier, pay on the page, and we start within one business day of payment. If we can't fix it, you get a full refund. Those are the only two promises we make, and we keep them.
| What we do | Price | |
|---|---|---|
| PHP needs updating, or the site broke after the update | Back online first, then the cause; PHP moved to a fixed release; full backup; a note on what failed. Start at site broke after a PHP update | $249 |
| You found signs of a break-in, or the host suspended the site | Infected files and database entries removed, passwords, keys and the way in closed, blocklist review requested where Google or the host flagged the site. Start at website suspended by host | $349 |
| One PHP error message after the update | The error found and gone, with a backup first and a test on desktop and phone | $149 |
| A theme, builder or plugin conflict after the update | The component at fault found and fixed or rolled back, then tested | $199 |
| Drupal, Joomla, a custom PHP app, several servers, or a site that cannot run on PHP 8.2 or newer | Scoped and quoted after a free check, so the price fits the job | Quoted |
The fixed prices cover WordPress, because WordPress problems repeat often enough to price in advance. Other PHP sites vary too much for that, so we look first and quote after. Old sites deserve their own conversation: if yours runs PHP 7.4 or 8.0, the PHP project ships no release for it, and our end-of-life PHP guide explains the choices before you spend a dollar.
When the update has to wait until Monday
Sometimes the honest answer is not today. A membership plugin abandoned in 2019 will not run on PHP 8.2, and the business cannot lose logins on a Thursday. In that case we buy time with the measures the PHP project lists, which, in its words, "reduce exposure to specific attack paths but do not make an installation safe."
- Session upload progress off. We set `session.upload_progress.enabled = 0` in php.ini, the FPM pool or server config that applies before request parsing, then restart every worker. It blocks the confirmed session paths, not every variant.
- Smaller request bodies. `post_max_size = 8M` for sites without uploads, `32M` where uploads are needed, with `upload_max_filesize` set below it.
- Limits at the web server. Caps on request size, field count, multipart parts, headers and nesting depth, including requests that arrive without a usable Content-Length.
- A memory setting the app cannot override. `php_admin_value[memory_limit] = -1`, paired with a container or cgroup memory limit, because an allocation failure can still reach the vulnerable path.
- A firewall rule in front. Cloudflare, Fastly, Google and others published protections. A rule buys hours or days. It does not replace the update.
Hiding error messages does not help, and a WordPress security plugin cannot help either: the bug lives in PHP, below WordPress, where no plugin can reach. The complete list, with the fine print, is on our temporary mitigations page. We treat every interim setting as a dated IOU, and we put the date in writing.
Our checklist for you is short
Speed in an emergency depends less on our typing and more on access. The fastest jobs are the ones where the right login arrives with the payment and one person can say yes.
What we need from you
- A login to the hosting control panel (cPanel, Plesk or your host's own), or SSH access to the server
- A WordPress admin login if the site has one
- One contact who can approve changes, such as a PHP version switch or a plugin replacement
- Anything you have noticed: error emails, a slow site, a host warning, a strange admin account
What you get back
- The PHP version before and after, read from the server itself, not from a sales email
- The list of pages and functions we tested, and what we fixed along the way
- What we found when we looked for signs of compromise, including when that was nothing
- Any interim setting still in place, and the date it should come out
On shared hosting, the host controls the PHP build, so part of our job is getting the host to say, in writing, which version your site runs and when it was installed. Our guide to patching on shared hosting has the exact wording we use.
Four things owners tell us before they hire us
"My host says it is patched."
Perhaps it is. Proof costs nothing: phpinfo, the version in the control panel, or a line in a support ticket. Distribution packages can show an older-looking number and still carry the fix, so we check the CVE in the vendor's security tracker, not just the digits.
"We are on PHP 7.4 and afraid to update."
Reasonable fear. Old themes and builders do break on PHP 8. We test on a copy first and fix what fails, and the fixes are usually familiar ones, like WPBakery's PHP 8 errors or theme PHP errors.
"Our security plugin shows a green check."
It checks WordPress. PHP2Shell lives in the interpreter underneath, so even a fully updated WordPress on an affected PHP version can be exposed. Our WordPress, Drupal and Joomla guide explains why the green check is beside the point.
"I think we were already hit."
Then the order changes: evidence first, cleanup second, every password and key rotated, because Wiz showed the bugs can leak process memory. Read the warning signs, then call us.
CrowdStrike's analysis adds a wrinkle worth knowing: on Apache with mod_php, a single unauthenticated POST request can be enough, and the attack traffic can come back as ordinary 200 responses. A clean access log is not an alibi. That is why our check reads the PHP and web server error logs, worker restarts and the file system, not just the visitor log.
Make the next one someone else's 2 a.m.
PHP2Shell will not be the last critical PHP release. PHP 8.2 itself reaches end of life on December 31, 2026, ten weeks from now, and gets no security fixes after that. The owners who slept through this week were the ones whose updates were already somebody's job.
Our hosting and maintenance plans make it ours: tested updates, backups stored off the server, security and uptime monitoring, and small edits, with no long contract. There is no published price; we quote after seeing the site. For the deeper version of the same question, there is a way to stop worrying about PHP on your public site altogether: a Next.js front end with WordPress kept private behind it, or a full move to our own content system.
Questions owners ask about PHP2Shell
Most WordPress sites fit our $249 fixed-price repair, the tier built for a PHP update and the breakage that can follow it. A cleanup after a break-in is $349. Single errors are $149 and theme or plugin conflicts $199. You pay on the repair page, we start within one business day, and if we can't fix it you get a full refund.
Yes. The bug lives in PHP, so the fix is the same in principle: a patched release, tested. The fixed prices cover WordPress only, because other platforms and custom code vary too much to price blind. We do a free check first, then quote. Drupal and Joomla specifics are on our CMS guide.
Maybe not. Ask the host to confirm in writing which PHP version your site runs and that it includes the fixes for CVE-2026-109618 and CVE-2026-109619. If the answer is clear, you are done with the patch. You may still want someone to look for signs of compromise from the days before it was installed.
It can, especially on a jump from PHP 7.4 or 8.0 to 8.2 or newer. Old themes, page builders and abandoned plugins are the usual failures. That is why we back up first, test on desktop and phone afterward, and fix or replace what breaks. If the site already broke, our $249 repair covers exactly that.
No. Cloudflare, Fastly, Google and others published protections, and they are worth turning on. The PHP project says there are no complete mitigations and that updating is the only safe choice. Treat a firewall rule as a few days of cover while the update is arranged. The interim settings are on the mitigations page.
Security firms reported attack attempts against their sensors and honeypots within a day of disclosure, mostly aimed at the session upload-progress path. As of October 22, confirmed successful compromises had not been publicly reported. That can change any day, and an unpatched server should be treated as exposed. The PHP2Shell hub tracks what is known.
Keep reading
- Check your exposureAm I Affected by PHP2Shell? Find Your PHP Version and Read the ResultFive ways to find the PHP version and SAPI behind your site, a table that turns the number into a next step, and which sites PHP2Shell cannot touch.
- Stopgap settingsPHP2Shell Temporary Mitigations: What Buys Days and What Only Looks BusyEvery interim PHP2Shell setting from the PHP project, where each line goes, what it blocks, what it misses, and why a firewall rule is only a stopgap.
- Incident checkPHP2Shell Signs of Compromise: How to Tell Whether Anyone Got InThe published warning signs of a PHP2Shell attack, where to find them in logs and files, and what to do if you find one: evidence, new keys, a clean rebuild.
- The long-term fixNobody Can Exploit PHP on a Site That Does Not Run It: The Next.js Way Out of PHP2ShellKeep WordPress private behind a Next.js front end, or drop PHP for Athena CMS. What each removes, what carries over, the honest limits and the prices.
- Shared hostingPatching PHP2Shell on Shared Hosting: cPanel, Plesk and Managed WordPressOn shared hosting your host patches PHP for PHP2Shell. How to confirm it in cPanel or Plesk, what to ask for in writing, and what breaks on newer PHP.
- Server patch guidePatch PHP2Shell on a VPS or in Docker: Packages, Restarts and ProofPatch PHP2Shell on Debian, Ubuntu, RHEL, Docker, FrankenPHP and LiteSpeed: which packages, which restarts, and how to prove the fix landed.
- Everything in PHP2ShellSee the section
Get PHP patched, tested and checked
Tell us what you run and what you have seen. We reply with the fastest safe path, the fixed price where one applies, and what we need to start.
Which of these sounds like you? (pick any)
Rather talk now? Call (210) 346-0848.