Drupal Development & Migration
Drupal 6 through 11: architecture, custom modules, version migrations and the long tail of keeping it healthy.
Two critical remote code execution flaws in the PHP interpreter itself — together called PHP2Shell — were patched on 21 October 2026. They sit below your application, so every Drupal, WordPress, Laravel, Symfony and bespoke PHP site on an unpatched version is exposed regardless of how well the application is written. If you need someone to assess, patch and verify your estate, that is what this page is about.
Incident facts below reviewed 22 October 2026 against public reporting. This is a developing situation — always confirm against the official PHP release notes before acting.
Two separate memory-safety flaws in PHP's request handling were disclosed and patched on 21 October 2026. Both allow remote code execution, and both are reported as reachable by a single unauthenticated request, before any of your application code runs. That last detail is what makes this different from the usual CMS advisory: no plugin, theme, module or framework is the vulnerable component, so no application-level fix helps.
Both are rated critical. I am deliberately not quoting a CVSS figure here: the major outlets covering the disclosure did not publish one, and the scores circulating vary by source. The severity is not in question, but a precise decimal attributed to nobody is not a fact worth repeating.
Every PHP installation that serves web requests is reported affected — PHP-FPM, Apache with mod_php, php-cgi, FrankenPHP and LiteSpeed. The PHP security team considers mod_php the highest risk configuration. CLI-only usage is not the concern here; anything answering HTTP is.
Check what you are actually running — not what you believe you deployed:
php -v # CLI version, often NOT the web version
php-fpm -v # the FPM binary
<?php echo PHP_VERSION; # the version actually serving requests
The third one is the one that matters. It is routine to find a server where the CLI reports a current release while the web SAPI is two minor versions behind, because an upgrade updated one and not the other.
The patched versions are PHP 8.5.12, 8.4.27, 8.3.36 and 8.2.35.
PHP 8.1 and earlier no longer receive updates from the PHP project. The security team did publish minimal source backports for 7.4, 8.0 and 8.1 for those who build from source or have no LTS vendor, and major distributions and some control panels have shipped backported packages. If you are on 8.1 or older, that is the real finding here — this incident is a symptom.
The PHP security team published interim measures. They are stopgaps, not fixes — some are documented as blocking only one confirmed path — and they are no reason to delay updating. The UK NCSC advised taking offline any system that cannot be remediated promptly.
memory_limit=-1, ideally through php_admin_value so applications cannot override it; set a low post_max_size (8M without uploads, 32M where uploads are required); and impose a container or cgroup limit as an availability boundary.session.upload_progress.enabled=0 and restart every worker. On PHP 8.5, also set fatal_error_backtraces=0 and restart workers.Restarting workers is not optional with these settings. A long-running FPM pool keeps serving from processes that loaded the old configuration, which is the most common reason a mitigation appears not to have worked.
Roughly a day for a straightforward estate, longer where hosting is unusual or undocumented.
PHP2Shell is unusual in severity but ordinary in shape. The same work applies whenever the platform under your application turns out to be the vulnerable component:
I work with agencies, enterprises and businesses whose platform has been let go, and the third category is where most of this lands — an unsupported PHP, an agency that moved on, and nobody certain how deployment works. That is recoverable, and usually in less time than people fear.
Two critical remote code execution vulnerabilities in the PHP interpreter, disclosed and patched on 21 October 2026 and known together as PHP2Shell. CVE-2026-109618 involves out-of-memory corruption during request handling; CVE-2026-109619 involves request state surviving after the memory backing it is freed. Both are reported as reachable by a single unauthenticated request before application code executes.
PHP 8.5.12, 8.4.27, 8.3.36 and 8.2.35. PHP 8.1 and earlier are end of life from the PHP project, though minimal source backports were published for 7.4, 8.0 and 8.1, and several Linux distributions and control panels have shipped backported packages.
If it runs on an unpatched PHP version and serves web requests, yes. The vulnerability is in PHP itself rather than in the CMS, so no Drupal or WordPress update addresses it and no plugin or module is the vulnerable component. Updating PHP is the fix.
Exploitation attempts have been reported. Amazon Threat Intelligence recorded an attempt on 17 October 2026, four days before public disclosure, and Cloudflare reported observing early attacks before patches were released. Because activity predates disclosure, patching alone does not establish that a server was not already compromised — that requires a separate check of logs, file integrity and outbound connections.
The PHP security team published interim settings, including memory_limit=-1 with a low post_max_size for CVE-2026-109618, and session.upload_progress.enabled=0 with all workers restarted for CVE-2026-109619. These are temporary measures and at least one is documented as blocking only a single confirmed path. The UK NCSC advised taking offline any system that cannot be remediated promptly.
Three: apply your vendor's backported package if one exists, build from the minimal source backport the PHP team published, or upgrade to a supported branch. The first two keep you running on an unsupported version that will face this situation again at the next advisory, so they are best treated as buying time for the third.
Same-day triage where capacity allows, for an active incident. Engagements run directly with me rather than through an account manager, which means a limited number at once — so for a live incident it is worth asking early rather than waiting.
Describe the problem in your own words — I will tell you what I would actually build, and what I would not.
Start a conversation