Skip to content

PHP security release, October 21, 2026: what Magento and WooCommerce stores should do

PHP security release: CVE-2026-109618 and CVE-2026-109619, fixed in PHP 8.2.35, 8.3.36, 8.4.27 and 8.5.12. 8.1 gets a source patch. First-hour runbook.

  • Secure
  • By The Big Cart Energy team
  • 29 min read

The October 21, 2026 PHP security release fixes CVE-2026-109618 and CVE-2026-109619 in PHP 8.5.12, 8.4.27, 8.3.36 and 8.2.35; php.net rates both CVSS v4.0 9.2 and says they can allow unauthenticated remote code execution. PHP 8.1, 8.0 and 7.4 get no php.net release, only a source patch from PHP's security team that you build or a vendor packages, and Magento 2.4.4 and 2.4.5, which Adobe lists for PHP 8.1 only, are in that group. The one job: get every server onto the fixed version for its branch, or onto a patched build of its end-of-life branch.

This guide is for stores on PHP: Magento and Adobe Commerce first, WooCommerce and WordPress second, every other PHP store third. The catch php.net doesn't spell out is the version map: Adobe lists Magento 2.4.4 and 2.4.5 for PHP 8.1 only, and 8.1 reached end of life on December 31, 2025. Being current on Adobe's security patches doesn't change that: Adobe's lifecycle policy says it doesn't provide security fixes for PHP that reaches end of life, and Adobe had posted nothing on this release when we checked on October 21.

By the end you'll know which PHP every part of your store runs, which fix that branch got, who delivers it to you (php.net, your Linux distribution, your Docker image or your host), what to do in the first hour, and php.net's interim settings if you cannot update today.

Release status: CVE ids and fixed PHP versions

Before the release: PHP's security team announced the release on October 20, 2026, first on the php.announce list, then in a php.net news item. What PHP confirmed:

  • The release was scheduled for Wednesday, October 21, 2026 at 14:00 UTC (10:00 EDT, 07:00 PDT, 16:00 CEST).
  • It addresses two vulnerabilities, both rated CVSS v4.0 9.2, Critical.
  • PHP reserved the right to release earlier "should details of either vulnerability become public, or should evidence of active exploitation appear in the wild."
  • "Full details, affected versions, and the fixed versions will be published with the release."

Updated with the release details, October 21: php.net published the release on October 21, 2026, with a security advisory titled "Critical remote code execution vulnerabilities, update now".

  • Fixed versions: PHP 8.5.12, 8.4.27, 8.3.36 and 8.2.35. The release items say "There are no complete mitigations, updating is the only safe choice."
  • The two CVEs: CVE-2026-109618, "RCE via OOM corruption" (GHSA-w8hw-w9fx-j79w), and CVE-2026-109619, "RCE via stale global state" (GHSA-6wmf-4rv5-p3rp). php.net scores both CVSS v4.0 9.2 (CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N) and says they "can allow unauthenticated remote code execution". At NVD, NIST's own score for each is CVSS 3.1 9.8.
  • Who is at risk: "all PHP installations serving web requests, including PHP-FPM, Apache with mod_php, php-cgi, FrankenPHP and LiteSpeed". php.net considers the risk "highest for mod_php, with a demonstrated exploit where an unauthenticated request can trigger the attack before any application code runs."
  • Exploitation: reported, not confirmed by us. watchTowr says its honeypots saw exploitation in the wild on October 21, and Sansec cites a Cloudflare report of attacks the same day. Neither CVE was in CISA's Known Exploited Vulnerabilities catalog at version 2026.10.21. More in what the release confirmed.
  • Vendors: "Linux distributions and LTS vendors received the patches in advance, so check your vendor for updated packages." Each channel's status is under where your PHP comes from.
  • PHP 8.1, 8.0 and 7.4: no release. For each, the PHP security team pushed one commit to php-src, on the branch's final state, that its own message calls a "Minimal mitigation for EOL version": 17 to 23 files, against 389 in the full fix that went into 8.2.35, most of them tests. The branches are PHP-8.1-CVE-2026-109618-109619 (php-src) and the matching 8.0 and 7.4 ones, to build yourself or for a vendor to package. 7.3 and older get nothing from the PHP project.
  • The Remi repository: php.net urges users of the volunteer-maintained rpms.remirepo.net to switch to distribution packages or build from source, and says "The repo will not have updates today."
  • PHP 8.6: RC4 "also contains the fixes", and php.net still says "Please DO NOT use this version in production" (php.net).
  • Adobe: nothing posted on the release when we checked on October 21; its newest Commerce bulletin was still APSB26-153.

Patch alerts

Get the next fixed versions when they land.

One email when the next critical PHP or Magento fix ships: the CVE ids, the fixed versions and what to run. Patch alerts only, no newsletter filler.

What the PHP vulnerability notice said, and what it didn't

We found no earlier advance notice of PHP vulnerabilities in php.net's news archive or on the php.announce list. PHP usually just ships: under its release process, branches in active support get a release every four weeks, and security-only branches get one "only when there is a security issue or regression issue to address."

Two details in the notice reward a slow read:

  • "Critical" is the CVSS scale talking. PHP's own security classification policy has no Critical tier; it stops at High, Medium and Low. The label comes from CVSS v4.0, where FIRST's rating scale puts Critical at 9.0 to 10.0. The notice gave the base score only, with no vector; the GitHub advisories published the vector with the release.
  • By PHP's own process, the CVE ids and the distributions come first. PHP's release process says "Each security flaw must have a CVE id before the final release" and "Be sure that the security team of each major distributions have access to the security reports, before public release". The release confirmed both: the ids came with it, and php.net says distributions and LTS vendors had the patches in advance.

What the release confirmed, and what is still only reported

Before the release, security vendors and the press filled the gap within hours. Here is where each claim landed. Every claim is credited to its source, and we haven't verified exploitation ourselves.

  • Confirmed by php.net: the ids, the score and the impact. The ids that BleepingComputer (citing watchTowr and an unsourced post on Y Combinator's Hacker News forum), Sansec and watchTowr's own FAQ circulated, CVE-2026-109618 and CVE-2026-109619, are the ones php.net published, and CVE.org lists both under php.net's CNA. The score is the notice's CVSS v4.0 9.2, and "unauthenticated remote code execution" is php.net's own phrase. watchTowr's post on X had called them "zero-day embargoed RCE vulns in PHP".
  • Contradicted: CVSS 10.0. An unsourced post on Y Combinator's Hacker News forum and BleepingComputer's quote from watchTowr gave 10.0, which matches neither published score: php.net's CVSS v4.0 9.2 or NIST's CVSS 3.1 9.8 at NVD.
  • Below 7.4: not addressed by php.net, so treat it as affected. BleepingComputer quotes watchTowr as saying both bugs "are understood to affect PHP versions 5, 6, 7, and 8", though PHP 6 never reached general availability; watchTowr's own FAQ said "The report claims the vulnerability affects every PHP version from PHP 5 onward, though this scope has not been confirmed by an official vendor advisory." Sansec wrote "PHP 5.4 or later", resting that on a leaked screenshot of an exploit tool's banner, and Huntress wrote "Reporting suggests PHP versions 5 through 8 may be affected." php.net's source patches stop at 7.4 and it says nothing about older branches, but Ubuntu shipped fixes for php7.2, php7.0 and php5 on its ESM releases (USN-8948-2), and deb.sury.org rebuilt 7.3 with both CVEs backported.
  • Reported, not confirmed by us: exploitation. watchTowr's FAQ, updated October 21: "Exploitation has been observed in the wild as of the 21st of October through watchTowr's Attacker Eye global honeypot network." Sansec, which had forecast mass attacks within 15 minutes of the release, now cites a Cloudflare report of attacks on October 21, says public write-ups and an exploit tool exist, and expects mass exploitation. Neither CVE was in CISA's Known Exploited Vulnerabilities catalog at the version we read, 2026.10.21. CISA's own enrichment on both CVE records, added on October 21, rated exploitation "none".
  • Reported: a slipped embargo. watchTowr on X: "We were all supposed to wait until Thursday at 11am ET." PHP's notice gave no reason for its date.

Which PHP branches get the fix: the PHP end-of-life map

The table reads php.net's supported versions and end-of-life pages and its October 21 advisory; the status column is our reading of php.net's dates and definitions.

Branchphp.net statusSecurity fixes untilFixed inSource
8.5Active supportDecember 31, 20298.5.12php.net
8.4Active supportDecember 31, 20288.4.27php.net
8.3Security fixes onlyDecember 31, 20278.3.36php.net
8.2Security fixes onlyDecember 31, 20268.2.35php.net
8.1End of lifeEnded December 31, 2025Source patch branch from the PHP security team; no releasephp-src
8.0End of lifeEnded November 26, 2023Source patch branch from the PHP security team; no releasephp-src
7.4End of lifeEnded November 28, 2022Source patch branch from the PHP security team; no releasephp-src
7.3 and olderEnd of lifeEnded (7.3 on December 6, 2021)Nothing from php.netphp.net

All four supported branches got the fix. PHP 8.2 end of life for security fixes is December 31, 2026, 71 days after this release, and php.net's 8.2.35 announcement says 8.2 "will receive no further security fixes after that date." A PHP EOL branch gets no php.net release: for 8.1, 8.0 and 7.4 the security team published source patches instead, and php.net's end-of-life page warns that older versions "may expose you to security vulnerabilities and bugs that have been fixed in more recent versions of PHP."

PHP 8.1 end of life: options for stores still on it

PHP 8.1 reached end of life on December 31, 2025, with 8.1.34 as its last php.net release, and this release adds no 8.1 version. What it adds is a source patch: the PHP security team "provided minimal source-backports for PHP 7.4, PHP 8.0, and PHP 8.1 to help people building from source or without access to an LTS vendor" (php.net). The options, from quickest to longest-lasting:

  1. A vendor's patched 8.1 package. Ubuntu's own php8.1 on 22.04 got the fix in USN-8948-1 (8.1.2-1ubuntu2.28), and deb.sury.org rebuilt its 8.1 (8.1.34-9) on October 21, with 8.0, 7.4 and 7.3; its changelog adds September 24's fixes too, but still not July 30's. The Remi repository calls its end-of-life builds a "best effort action" that "can only be temporary", and php.net said on October 21 that it "will not have updates today". Debian's own security tracker lists this fix only for php8.4 on Debian 13 and php8.2 on Debian 12; no Debian release it covers ships php8.1. None of them promises the next fix.
  2. Your own build of the patch. The branch PHP-8.1-CVE-2026-109618-109619 (php-src) is that one minimal-mitigation commit on the PHP-8.1 branch as it stood at end of life. A build from it still reports 8.1.34, the same as the unpatched release, so record the commit you built (1d7dec1). You build it, deploy it and own it.
  3. Commercial extended-support PHP. Paid builds of end-of-life branches exist. Get it in writing that yours covers CVE-2026-109618 and CVE-2026-109619 on your exact branch.
  4. A supported branch. The fix that lasts. When the application itself runs only on 8.1, as Magento 2.4.4 and 2.4.5 do, the application moves first.

Magento PHP version by release: which Adobe Commerce lines get the fix

Adobe's system requirements (page last updated October 13, 2026, with no mention of these CVEs or the new PHP versions when we checked on October 21) list these PHP branches for each line's newest patch: 2.4.9, 2.4.8-p5, 2.4.7-p10, 2.4.6-p15, 2.4.5-p17 and 2.4.4-p18.

Magento linePHP Adobe listsFix for that PHPWhat to doSource
2.4.98.58.5.12Update to 8.5.12, or your vendor's package for itAdobe
2.4.88.4, 8.38.4.27, 8.3.36Update to 8.4.27 or 8.3.36Adobe
2.4.78.3, 8.28.3.36, 8.2.35Update; on 8.2, move to 8.3 before December 31, 2026Adobe
2.4.68.2, 8.18.2.35; on 8.1, a source patch onlyOn 8.2, update to 8.2.35; on 8.1, a patched 8.1 build or a Magento upgradeAdobe
2.4.58.1 onlySource patch only, no releaseA patched 8.1 build now, then a Magento upgradeAdobe
2.4.48.1 onlySource patch only, no releaseA patched 8.1 build now, then a Magento upgradeAdobe
2.4.3 and olderNone listed; 2.4.3-p3's composer.json allows 7.3 and 7.47.4: source patch only; 7.3: nothing from php.netUpgrade MagentoGitHub

Adobe "supports only the system requirement combinations listed," and its list is narrower than what Composer accepts: 2.4.8's composer.json also allows PHP 8.2, and the 2.4.4-p13 and 2.4.5-p14 tags, the newest public ones on October 20, still allow 7.4. Composer installing a combination isn't Adobe supporting it. Our Magento upgrade page carries the support dates for every line.

Magento 2.4.4 and 2.4.5: no php.net release for PHP 8.1

Both lines sit in Adobe's security-only transitional period until May 31, 2027, which "provides limited isolated security fixes only (no quality fixes)", and those fixes are for Magento's code. On PHP, Adobe's lifecycle policy is blunt: Adobe "does not provide security and quality fixes for third-party services and software dependencies (such as PHP and MySQL)" that reach end of life during support, and "You are responsible for monitoring the support status of PHP versions used in your environments." It marks PHP 8.1 on 2.4.4, 2.4.5 and 2.4.6 "PCI compliance at risk".

Adobe's knowledge base says something different. Its lifecycle FAQ says Adobe would apply "lifetime support PHP 8.1 security fixes" to 2.4.4 and 2.4.5 on Cloud "during the extended support", and that on-premises customers "will need to contact Adobe support" for them. Extended support ended on April 14, 2026 for 2.4.4 and on August 11, 2026 for 2.4.5, and Adobe doesn't say whether the arrangement outlived it or covers these two CVEs; it had posted nothing on the release when we checked on October 21. On Adobe Commerce, open a ticket and ask. On Magento Open Source there's no one to ask: Adobe's extended-support security patches "are available to Adobe Commerce customers only" (Adobe).

A patched PHP 8.1 exists anyway: Ubuntu 22.04's php8.1 from USN-8948-1, deb.sury.org's 8.1 rebuild of October 21, or your own build of the PHP security team's 8.1 branch, whose commit calls itself a minimal mitigation. None of them is a php.net release, and none comes with a promise for the next fix.

The fix that lasts is a release line whose PHP php.net still patches: 2.4.6 on PHP 8.2 buys time to December 31, 2026, and 2.4.7 or later runs 8.3. That's a project, not a patch, and what a Magento upgrade costs follows the version gap, your extensions, theme and integrations, and your test coverage.

Stuck on an old version? We'll patch you now and upgrade you when you're ready: our Magento upgrade service backports the Magento security fixes Adobe no longer ships for your release (Magento's code, not PHP), then moves you to a line whose PHP php.net still patches.

Adobe Commerce on Cloud

On Adobe Commerce on Cloud, Adobe runs the container and you choose the branch. The PHP version is a line in .magento.app.yaml, type: php:8.3 for example (Adobe), and a version change is self-service and takes effect on deploy. Adobe's shared-responsibility table gives Adobe "Availability of PHP" and "Ongoing quality and patching of operating system", gives you the YAML that aligns PHP with your Commerce version, and has no row for patching PHP itself.

We found no Adobe page that says how a patch-level PHP release like this one reaches a Cloud project: automatically, on your next redeploy, or through an infrastructure rollout, and Adobe had posted no Cloud guidance on this release when we checked on October 21. Open a support ticket and ask, including whether the redeploy is yours to run. The runbook below has the commands to check and redeploy.

The PHP fix is not the Magento fix

Two jobs, two layers. Adobe's bulletins patch Magento's code; this release patches the PHP interpreter underneath it. A store fully current on Adobe's patches is just as exposed to an interpreter bug as one that isn't, and a store on the patched PHP still needs Adobe's bulletins, APSB26-153 included. Do both, and don't let one ticket close the other.

WooCommerce, WordPress and other PHP stores

WordPress recommends "PHP version 8.3 or greater" and says it "also works with PHP 7.4+", though "these versions have reached their official End Of Life and may expose your site to security vulnerabilities." WooCommerce's server requirements for version 10.8 and later recommend "PHP version 8.3 or greater (tested up to PHP 8.4)", with the same warning for 7.4. So the WooCommerce PHP version floor sits on a branch php.net stopped patching on November 28, 2022.

WordPress.org's own post on the release says "Due to the critical severity of the issues, site owners are encouraged to immediately update their installations of PHP," and "No WordPress update is required or planned for these issues." It tells site owners to check with their host and, for self-managed servers older than PHP 8.2, to consider taking the server offline until it's upgraded. WooCommerce had posted nothing of its own when we checked on October 21.

The WordPress PHP version mix, from WordPress.org's stats as read on October 20, 2026: 64.87% of reporting WordPress sites run a branch php.net still patches (8.2 to 8.5), and 35.11% run an end-of-life branch, including 16.46% on PHP 7.4 and 10.95% on 8.1. Another 24.31% run 8.2, whose security support ends December 31, 2026. These are WordPress sites, not WooCommerce stores; the page shows no snapshot date, and its figures leave out PHP 5.x.

Shopware, PrestaShop, OpenMage, Laravel and custom PHP stores follow the same map: find every PHP binary, check its branch against the table above, and check the application's own supported list before any branch move. Hosted SaaS platforms such as Shopify and BigCommerce run their own servers, so there's no PHP of yours to patch there; middleware you host yourself still counts.

Where your PHP comes from decides when you get the fix

The php.net release is where the fix starts, not where it reaches you. If PHP came from a package, the fix comes from that package's maintainer, under its version number. php.net says distributions and LTS vendors had the patches in advance, and several shipped on October 21, the day php.net published. Each channel's status as we recorded it that day:

  • Debian 13 (trixie), php8.4: DSA 6574-1, fixed in 8.4.27-1~deb13u1.
  • Debian 12 (bookworm), php8.2, through Debian LTS: DLA 4848-1, fixed in 8.2.35-1~deb12u1.
  • Ubuntu: USN-8948-1 for 22.04, 24.04, 26.04 and 26.10, including php8.1 (8.1.2-1ubuntu2.28) on 22.04 and php8.3 (8.3.6-0ubuntu0.24.04.13) on 24.04, and USN-8948-2 for the ESM releases, including php7.4 (7.4.3-4ubuntu2.29+esm5) on 20.04, plus php7.2, php7.0 and php5 on older ESM releases.
  • RHEL 8, 9 and 10: Red Hat had no CVE page and no RHSA for either id when we checked on October 21. For September's batch, it still listed every RHEL php stream "Affected" on October 20.
  • The Remi repository (RHEL family and Fedora): php.net's advice comes first: "If you rely on the volunteer-maintained rpms.remirepo.net, we urge you to switch to distribution packages or build from source, so you can immediately apply updates. The repo will not have updates today." Remi calls its end-of-life builds a "best effort action".
  • deb.sury.org (ppa:ondrej/php and packages.sury.org), PHP 5.6 to 8.x side by side: rebuilt every branch from 7.3 to 8.5 on October 21: 8.5.12, 8.4.27, 8.3.36 and 8.2.35, plus end-of-life builds of 8.1, 8.0, 7.4 and 7.3 with both CVEs backported (8.1.34-9 on 8.1). Those end-of-life builds had been two releases behind since July, and the rebuild closed only half the gap: by their changelogs, the 8.1, 8.0 and 7.4 builds add the September 24 batch but not the July 30 one, and the 7.3 build adds July 30's but not September's. Neither its site nor its Launchpad page makes a security promise.
  • The Docker official php image: php:8.2.35-fpm, php:8.3.36-fpm, php:8.4.27-fpm and php:8.5.12-fpm went live on Docker Hub on October 21, after the image definitions took the new versions, and the floating php:8.3-fpm moved with them. There is still no 8.1 image.

That's why php -v alone can't prove a server is patched. Ubuntu 24.04's fixed package for this release is 8.3.6-0ubuntu0.24.04.13, so a fully patched server still reports 8.3.6; Debian keeps php.net's number with a suffix (8.4.27-1~deb13u1), and deb.sury.org's end-of-life builds report their last upstream number (8.1.34 on 8.1), patched or not. Compare the installed package version with your vendor's advisory (the USN, DSA or RHSA), not with php.net's number. It cuts both ways: a scanner that reads 8.3.6 flags a patched Ubuntu server as vulnerable.

Managed hosts. When we checked on October 21, Hypernode was the only host on our list with a statement on these CVEs; Adobe Commerce on Cloud, Nexcess, Cloudways, Kinsta and WP Engine had posted nothing.

  • Hypernode says it "will handle the required PHP security updates at platform level", set session.upload_progress.enabled = 0 and session.use_strict_mode = 1 platform-wide as temporary measures, and told customers "You do not need to make changes yourself at this time." For its paid extended support on end-of-life versions, it expects backports through a partner, possibly slower than official updates.
  • Kinsta: "If you select a Long-Term Support (LTS) PHP version, automatic updates are disabled."
  • WP Engine offers "a temporary period of extended support for PHP 7.4", and "Automatic PHP upgrades cannot be deferred."
  • Cloudways supports PHP 7.4, 8.0, 8.1, 8.2, 8.3 and 8.4. "Supported" on a host's PHP menu isn't "patched": php.net released nothing for the first three.

Ask your host three questions in writing. Have you applied 8.5.12, 8.4.27, 8.3.36 or 8.2.35, or your distribution's package for it, and restarted PHP? Is the PHP-FPM restart or the redeploy ours to do? What happens to sites on PHP 8.1?

What CVE-2024-4577, the June 2024 PHP-CGI bug, says about timing

CVE-2024-4577 is the PHP vulnerability behind our rule that a critical PHP release is an hours job, not a days job. PHP fixed it on June 6, 2024, in 8.1.29, 8.2.20 and 8.3.8. It hit PHP-CGI on Windows, with Traditional Chinese, Simplified Chinese and Japanese locales verified as exploitable, and DEVCORE, which reported it, found that "all versions of XAMPP installations on Windows are vulnerable by default." On June 7, Imperva wrote "At present, we've seen several thousands of attacks", and Akamai later reported: "As early as one day after disclosure, the SIRT observed numerous exploit attempts". NVD published the record on June 9 at CVSS 3.1 9.8, and CISA added it to its Known Exploited Vulnerabilities catalog on June 12, with ransomware use "Known".

This time the packages kept pace: Debian's DSA 6574-1, Ubuntu's USN-8948-1 and deb.sury.org's rebuilds shipped on October 21, the day php.net published, and the official Docker images followed the same day. php.net says distributions and LTS vendors had the patches in advance.

Keep it in proportion. From October 2023 until this release, NVD published seven CVEs that php.net itself scored critical, and only CVE-2024-4577 is in CISA's catalog, the only PHP runtime entry added in those three years. Critical doesn't guarantee mass exploitation. When it came, it came the next day.

The first hour after the release: a runbook for stores

This is how to update PHP on a store without leaving a server behind: every step with an owner, in the order to run them, with the evidence that closes it. The target is PHP 8.5.12, 8.4.27, 8.3.36 or 8.2.35, or your vendor's package for this release. If you cannot update today, the table's third group lists php.net's interim settings and their limits; none of them makes a server safe. The commands follow the table, each from the vendor's own documentation, and every one runs on staging first.

The first-hour PHP runbook · As of Owners are roles, every 'when' is relative to the release, and every source is the vendor's own page.
ItemOwnerWhenDone whenSource
Before you update Who owns each PHP binary, which branch it runs, and who is on call for the update.
Owner of every PHP binary namedStore ownerBefore you updateEach environment has one written line saying who installs PHP updates: your team, your host, or, on Adobe Commerce on Cloud, whoever Adobe support confirms 16
Host asked three questions in writingStore ownerBefore you updateThe host has said when it applies the release and how it will tell you, whether the restart or redeploy is yours, and what happens to PHP 8.1 sitesNone
PHP inventoried on every nodeDeveloperBefore you updateWeb, admin, cron, queue-consumer, worker and staging nodes each list their PHP-FPM version, CLI version and package sourceNone
Installed build checked against the repositoryDeveloperBefore you updateOn every node, apt policy shows Installed equal to Candidate or dnf check-update lists no php package, and you've recorded whether the installed build's changelog lists the fixes from php.net's previous security release 32 33
Magento release checked against Adobe's PHP listDeveloperBefore you updateThe Magento version is recorded, and every node runs a PHP branch Adobe lists for that release 20 13
A plan for every server on PHP 8.1 or olderStore ownerBefore you updateEach server on PHP 8.1 or older has a named source for a patched package on its branch, a build of the PHP security team's source patch (8.1, 8.0 and 7.4 only), a written answer from Adobe on Adobe Commerce, or a dated upgrade plan 10 7 15
Window booked, staging ready, rollback plannedDeveloperBefore you updateA developer and the host's support line are available for the update window, staging runs production's PHP, the current package versions or image tags are recorded, and every web and app node can be snapshotted or backed up just before its update 1
The first hour From php.net's release to a patched, restarted and verified store.
Release notes readDeveloperAs soon as the release is outThe fixed version for your branch (8.5.12, 8.4.27, 8.3.36 or 8.2.35), the SAPIs php.net names and its interim measures are copied from the advisory, the ChangeLog and the two GitHub advisories 1 11 12
Staging patched and testedDeveloperFirst hourStaging runs the fixed build on PHP-FPM and the CLI, and a test order completesNone
Production patched on every nodeDeveloper or hostFirst hourEach node was snapshotted or backed up just before its update, or its previous image kept, and every web, admin, cron and consumer node now runs the fixed package version from its vendor's advisory, or the fixed imageNone
Every PHP-FPM pool and long-running PHP worker restartedDeveloper or hostFirst hourneedrestart or dnf needs-restarting lists no PHP process, every queue consumer and other long-running PHP worker started after the update, and each node's installed PHP package is the fixed version from its vendor's advisoryNone
Containers recreated from the fixed imageDeveloperFirst hourEvery running container was recreated from the fixed tag, and none still runs the old image 34
Adobe Commerce on Cloud environments redeployedDeveloperFirst hour, once Adobe confirms the pathAdobe support has said how the patched PHP reaches the project, and php -v over magento-cloud ssh shows it on every environment and every instance (-I) 18 17
If you cannot update today php.net's interim settings, for stores that truly can't patch yet. In php.net's words: "There are no complete mitigations, updating is the only safe choice."
memory_limit=-1, set where applications can't override itDeveloper or hostOnly until you can updatememory_limit is -1 through php_admin_value in the FPM pool or Apache configuration, no pool, directory or application setting puts a finite limit back (Magento ships memory_limit = 756M in .user.ini and pub/.user.ini), every worker restarted, and the workers run under the container or cgroup limit in this group; php.net: an underlying allocation failure can still reach the vulnerable path 1 2
post_max_size lowered, upload_max_filesize below itDeveloper or hostOnly until you can updatepost_max_size is 8M, or 32M if the store takes file uploads, upload_max_filesize sits below it, and, as php.net suggests, the web server or proxy caps decoded request size, field, part and header counts and nesting depth, including for requests without a usable Content-Length; uploads and imports above the cap fail while it's set; not a complete mitigation 1
A container or cgroup memory limit, never RLIMIT_AS or RLIMIT_DATADeveloper or hostOnly until you can updatePHP workers run under a container or cgroup memory limit, the availability boundary php.net pairs with memory_limit=-1, preferably with a policy that kills only the affected worker rather than the master and every worker, and nothing substitutes RLIMIT_AS or RLIMIT_DATA, which php.net says can cause the vulnerable allocation failure; not a complete mitigation 1 2
session.upload_progress.enabled=0, every worker restartedDeveloper or hostOnly until you can updateSet in php.ini, an FPM pool or server configuration that applies before request parsing (not ini_set() or FPM .user.ini), and every worker restarted; php.net: it blocks the confirmed session paths but not other variants 1
fatal_error_backtraces=0 on PHP 8.5Developer or hostOnly until you can updateSet, and every worker restarted; php.net: it blocks the confirmed fatal backtrace path only 1
Invalid per-request INI removed, reachable fatals and timeouts fixedDeveloperOnly until you can updateNo invalid or deprecated per-request INI emits diagnostics before initialization, since hiding them with error_reporting, display_errors or @ does not help, and attacker-reachable fatal errors and execution timeouts are fixed; not a complete mitigation 1
pm.max_requests=1 on FPM, if performance allowsDeveloper or hostOnly until you can updateThe pool runs pm.max_requests=1, the option the GitHub advisory offers if performance is not a factor: each worker then respawns after a single request, so every request pays a worker start; not a complete mitigation 3
After Prove the store still sells, then put the next deadline on the calendar.
Test orders for every payment methodStore ownerRight after production is patchedOne order per payment method completes on production, and each test order is cancelled or refunded before it reaches fulfillment or an ERPNone
Cron, queue consumers and scheduled jobs checkedDeveloperRight after production is patchedMagento cron and queue consumers, or WooCommerce's scheduled actions, run on the patched CLI with no new errorsNone
Error logs watchedDeveloperFirst hour after the patchThe PHP-FPM and web server error logs show nothing new for an hourNone
Every package channel followed upDeveloper or hostUntil every channel shipsEach server's package source has published its fix for this release, and that fix is installed and runningNone
Next PHP deadline datedStore ownerThe same weekStores on PHP 8.2 have a move to 8.3 or newer scheduled before December 31, 2026, when 8.2's security support ends; on Magento 2.4.6, which Adobe lists only for 8.2 and 8.1, that move starts with a Magento upgrade 9 13

Check which PHP version every part of the store runs

The PHP in your shell isn't necessarily the PHP serving checkout. In a shell, php -v and php -i report the CLI, which runs cron and Magento's queue consumers; a PHP-FPM pool reports the server API fpm-fcgi (PHP manual). Debian and Ubuntu packages let several PHP versions sit side by side, and on Ubuntu /usr/bin/php is an update-alternatives link, so the CLI can be a different branch from the pool. Check both, on every node: web, admin, cron, consumers, workers and staging.

bash
# Run it on staging first.
# The CLI: what cron and queue consumers run
php -v
php -i | grep -i 'Server API'

# The PHP-FPM pools: what serves the store
systemctl list-units --type=service 'php*'   # Debian, Ubuntu: one unit per version
/usr/sbin/php-fpm8.3 -v                      # repeat for each version the list shows
php-fpm -v                                   # RHEL, AlmaLinux, Rocky

# The packages, to compare with your vendor's advisory
dpkg -l 'php*'                               # Debian, Ubuntu
rpm -qa 'php*'                               # RHEL family

# Magento: run it with the PHP binary that matches the store's pool
php8.3 bin/magento --version                 # Debian, Ubuntu; php bin/magento --version on RHEL

In a shell, the second line prints "Server API => Command Line Interface". Sources: php-fpm(8), systemctl, Red Hat's PHP guide, dpkg, rpm and Adobe.

Then check that each server runs the newest build its repository offers, and read what that build fixed. A repository can hold the fix while the server still runs the old build.

bash
# Run it on staging first.
# Debian, Ubuntu (swap in your branch's package names)
sudo apt update                          # refresh package information first
apt policy php8.1-fpm                    # "Installed:" against "Candidate:"
apt list --upgradable 'php*'             # which php packages have a newer candidate
apt-get changelog php8.1-fpm             # changelog of the installed version

# RHEL, AlmaLinux, Rocky
dnf check-update 'php*'                  # exit code 100 means updates are available
dnf check-update --changelogs 'php*'     # also prints the changelog of each pending update
rpm -q --changelog php-fpm | head -40    # changelog of the installed package

Sources: apt, apt-cache for policy, apt-get, dnf and rpm. For deb.sury.org packages, apt-get changelog reads the installed build's changelog from the server's own copy in /usr/share/doc, if the system keeps one, but can't download any other build's, because neither repository's Release file says where changelogs live; each published build's changelog is on Launchpad instead.

Update PHP and restart every pool

A patch-level PHP update inside your branch needs no Composer change: Magento's require.php uses tilde constraints such as ~8.3.0, which Composer reads as >=8.3.0 <8.4.0 (Composer). Upgrade only the PHP packages already installed, then restart, because installing the package isn't the fix. A running PHP-FPM master keeps its binary until it's restarted or reloaded (php-fpm(8)).

bash
# Run it on staging first.
# Debian, Ubuntu: upgrade only what is installed
sudo apt update
sudo apt-get install --only-upgrade php8.3-fpm php8.3-cli   # plus every other php8.3-* package dpkg listed
sudo systemctl restart php8.3-fpm
sudo systemctl restart apache2   # only if PHP runs inside Apache (mod_php)
sudo needrestart -r l            # lists daemons still using old libraries (package: needrestart)

# RHEL family (AppStream or the Remi module stream)
sudo dnf upgrade 'php*'
sudo systemctl restart php-fpm
sudo dnf needs-restarting -s     # services that still need a restart (dnf-plugins-core)
sudo dnf needs-restarting        # every process still on old files, queue consumers included

# Any Linux: queue consumers and other long-running PHP workers
ps -eo pid,lstart,args | grep '[q]ueue:consumers:start'   # each Magento consumer and when it started

Sources: apt, apt-get, dnf, needrestart and needs-restarting, ps, Ubuntu's php8.3 packaging for the package names, its PHP guide for the Apache restart, and Red Hat's guide for the service name. Ubuntu's packaging restarts FPM after an upgrade. We found nothing in Red Hat's documentation on whether dnf does, so restart anyway.

Queue consumers and other long-running PHP CLI workers keep the binary they started with, the same as an FPM master. Cron starts Magento's consumers, and each one runs until it has processed its message limit, 10,000 by default, then exits so the next cron run can start it again (Adobe). Stop every consumer that started before the update so cron restarts it on the patched PHP, and restart Supervisor- or systemd-managed workers the way you restart the pool.

OPcache needs no extra step: its shared-memory cache starts over when PHP-FPM restarts (PHP manual). Don't run opcache_reset() from a shell, since the CLI has its own OPcache setting, off by default, and Magento's cache flush clears Magento's own cache types, not OPcache (Adobe). If you need to update the PHP version itself, from one branch to the next, that's a different job: change the pin, re-resolve, test, and stay on Adobe's list.

Containers: bump pinned tags such as php:8.3.36-fpm in the Dockerfile or compose file, or re-pull floating tags such as php:8.3-fpm, then rebuild and recreate. A running container keeps its old image until it's recreated, and docker compose up rebuilds an image from a Dockerfile only when told to.

bash
# Run it on staging first.
docker compose build --pull              # services built from a Dockerfile: rebuild on the newest base image
docker compose pull --ignore-buildable   # services that run an image tag directly
docker compose up -d                     # recreates every container whose image changed
docker compose exec <php-service> php -v
docker compose exec <php-service> php-fpm -v

Sources: Docker's compose build, compose pull, compose up and compose exec references, and the official image's Dockerfile for the tags.

On Adobe Commerce on Cloud, once Adobe support has said how the patched PHP reaches your project:

bash
# Run it on staging first.
magento-cloud ssh -p <project-ID> -e <environment-ID> -- php -v
magento-cloud redeploy -p <project-ID> -e <environment-ID>

The syntax is from Adobe's Cloud CLI reference.

Verify, then prove the store still sells

Run the first two blocks again on every node until the PHP-FPM pools and the CLI show the fixed package version (8.5.12, 8.4.27, 8.3.36 or 8.2.35 from php.net, or your vendor's package for this release), the installed build matches the repository's candidate, needrestart or needs-restarting lists no PHP process, and ps shows every queue consumer started after the update. Then the store: a test order per payment method, an Admin login, one REST or GraphQL call, cron, and Magento's queue consumers or WooCommerce's scheduled actions. Watch the PHP-FPM and web server error logs for an hour; that last step is our practice, not a vendor rule.

If you have to roll back, roll back PHP on the web and app nodes, not the database: restoring a full snapshot of a server that also holds the database loses every order placed since it was taken.

If nobody on your side can run this, or the store looks wrong after the patch, we can take it from here: every server updated to 8.5.12, 8.4.27, 8.3.36 or 8.2.35, or to your vendor's package for this release; PHP 8.1 built from the PHP security team's source patch as a stop-gap before the upgrade, where your Magento version pins the store there; and php.net's interim settings in place while that work runs, which in php.net's words "reduce exposure to specific attack paths but do not make an installation safe." The priority form at the end of this page is the one on our Magento emergency support page, and a senior engineer replies in writing within one business day.

PHP patch gotchas: how stores stay exposed after the update

What makes us wince in a patch window isn't the bug. It's the ticket that says "we're on the latest Adobe security patch, so we're covered." It's "PHP updated" because php -v changed in an SSH session, while the FPM pool serving every checkout still runs the binary it started with. It's the Ubuntu server flagged as unpatched because it reports 8.3.6. It's "Flush Magento Cache" offered as a fix for anything below the application. None of it is exotic. Each one is how a store stays exposed after everyone has signed off. Seven more:

  • The repository has it; the server doesn't. Enabling a repository changes what apt or dnf can install, not what is installed. A fixed build reaches the server only after the package index refreshes and the package upgrades, and takes effect only after PHP-FPM restarts. On October 20, "Installed" matching "Candidate" still meant unpatched on deb.sury.org's end-of-life branches, whose candidate was a July build; it rebuilt them on October 21, so read the changelog, not just the match.
  • Composer pins don't patch anything. config.platform.php "Lets you fake platform packages (PHP and extensions)" for dependency resolution (Composer); it never changes the binary production runs.
  • Varnish hides the header, and that isn't protection. Magento's Varnish configuration strips X-Powered-By and Server (2.4.8's VCL), so an outside scan can't see your PHP version, and neither can you: check on the host. PHP's expose_php is on by default (PHP manual); turning it off changes what scanners see, not what can be exploited.
  • PHP-FPM must never face the internet. From the PHP manual: "php-fpm must not be reachable from an untrusted network. A client that can open a FastCGI connection controls the configuration used for the request, including auto_prepend_file, and can therefore execute arbitrary code." That's standing hardening, not a fix for these bugs.
  • A build from before October 21, 2026 lacks both fixes, and maybe more. The September 24 release had already fixed 12 advisories on 8.3 alone, across Filter, FPM, MySQLnd, OpenSSL, Phar, SOAP, Standard and Windows (ChangeLog), so a server that skipped it is two releases behind.
  • Don't wait for a scanner. This time the GitHub advisories, CVE.org and NVD all published on October 21, but CVE-2024-4577's GitHub advisory came out on September 28, 2024, more than three months after the fix. The detection Qualys pointed customers to before the release, QID 45110, "is a discovery check and does not confirm vulnerability to these issues" (Qualys). Check the package version on the host.
  • Developer laptops count. Adobe doesn't support Magento on Windows, but the 2024 bug hit PHP-CGI on Windows and every XAMPP install there by default. Local stacks sit outside most patch runbooks, and Windows builds come from php.net's Windows downloads.

PHP security release questions

When did the PHP security release come out?

php.net published the release on October 21, 2026: PHP 8.5.12, 8.4.27, 8.3.36 and 8.2.35 fix CVE-2026-109618 and CVE-2026-109619, both rated CVSS v4.0 9.2. The release items say "There are no complete mitigations, updating is the only safe choice." The details are in php.net's advisory, the ChangeLog and the two GitHub advisories.

Which PHP versions are affected by the October 2026 PHP vulnerabilities?

Every supported branch below its fix: PHP's GitHub advisories list versions below 8.2.35, 8.3.36, 8.4.27 and 8.5.12 as affected, and php.net puts every PHP installation serving web requests at risk, highest under mod_php. For 8.1, 8.0 and 7.4, PHP's security team published source patches, not releases. php.net says nothing about 7.3 and older, but treat them as affected: Ubuntu shipped fixes for php7.2, php7.0 and php5 on its ESM releases.

Is my PHP version vulnerable?

Check your PHP version and where the package came from. On its branch, a php.net build older than 8.5.12, 8.4.27, 8.3.36 or 8.2.35 is affected. Distribution packages often keep their own numbers: Ubuntu 24.04's fixed package still reports PHP 8.3.6, and Debian 13's is 8.4.27-1~deb13u1. Match the installed package to your vendor's advisory, such as USN-8948-1 or DSA 6574-1.

Will PHP 8.1 get a fix?

Not as a php.net release: 8.1 reached end of life on December 31, 2025. But the PHP security team published minimal source backports for 8.1, 8.0 and 7.4 "to help people building from source or without access to an LTS vendor". Ubuntu 22.04 and deb.sury.org shipped patched 8.1 builds on October 21. On Magento 2.4.4 or 2.4.5, the lasting fix is an upgrade.

Which Magento versions can run a PHP branch that gets this fix?

As of October 21, 2026, Adobe's system requirements list PHP 8.5 for 2.4.9, 8.4 and 8.3 for 2.4.8, 8.3 and 8.2 for 2.4.7, and 8.2 and 8.1 for 2.4.6. PHP 8.2 to 8.5 all got php.net releases, so 2.4.6 to 2.4.9 can run a fixed PHP, 2.4.6 only on 8.2.35. Magento 2.4.4 and 2.4.5 are listed for PHP 8.1 only, which gets a source patch, not a release.

Does my host patch PHP for me?

Ask, in writing. Hypernode posted that it handles the PHP security updates at platform level. When we checked on October 21, Adobe Commerce on Cloud, Nexcess, Cloudways, Kinsta and WP Engine had posted nothing on these CVEs. Ask three things: whether they've applied the fixed version or package and restarted PHP, whether a restart or redeploy is yours, and what happens to PHP 8.1 sites.

Can a WAF protect my store until PHP is patched?

Not on its own. php.net says "There are no complete mitigations, updating is the only safe choice," and its interim settings, such as memory_limit=-1 and session.upload_progress.enabled=0, "reduce exposure to specific attack paths but do not make an installation safe." A WAF is one layer of Magento security hardening, not the fix. Patch first.

Sources

  1. 1 php.net: Security advisory, critical remote code execution vulnerabilities, update now (October 21, 2026) · checked · ↑ back
  2. 2 php-src on GitHub: GHSA-w8hw-w9fx-j79w, RCE via OOM corruption (CVE-2026-109618) · checked · ↑ back
  3. 3 php-src on GitHub: GHSA-6wmf-4rv5-p3rp, RCE via stale global state (CVE-2026-109619) · checked · ↑ back
  4. 4 CVE.org: CVE-2026-109618 · checked
  5. 5 CVE.org: CVE-2026-109619 · checked
  6. 6 NVD: CVE-2026-109618 · checked
  7. 7 php-src on GitHub: PHP-8.1-CVE-2026-109618-109619, the 8.1 source-patch branch · checked · ↑ back
  8. 8 php.net: Upcoming Critical PHP Security Release (October 20, 2026) · checked
All 40 sources
  1. 9 php.net: Supported versions · checked · ↑ back
  2. 10 php.net: Unsupported branches (end of life) · checked · ↑ back
  3. 11 php.net: PHP 8 ChangeLog · checked · ↑ back
  4. 12 php-src on GitHub: Security advisories · checked · ↑ back
  5. 13 Adobe Experience League: Adobe Commerce system requirements (updated October 13, 2026) · checked · ↑ back
  6. 14 Adobe Experience League: Adobe Commerce lifecycle policy (updated September 18, 2026) · checked
  7. 15 Adobe Commerce KB: Release strategy and lifecycle policy FAQ (updated October 8, 2026) · checked · ↑ back
  8. 16 Adobe Experience League: Shared responsibility model (updated October 8, 2026) · checked · ↑ back
  9. 17 Adobe Experience League: Commerce on Cloud PHP settings (updated August 25, 2026) · checked · ↑ back
  10. 18 Adobe Experience League: Commerce on Cloud CLI reference (updated November 19, 2025) · checked · ↑ back
  11. 19 Adobe: Security bulletins and advisories · checked
  12. 20 Adobe Developer: Check the Adobe Commerce version · checked · ↑ back
  13. 21 WordPress.org: Requirements · checked
  14. 22 WordPress.org News: Critical PHP Security Release (October 21, 2026) · checked
  15. 23 WooCommerce: Server requirements (modified May 25, 2026) · checked
  16. 24 WordPress.org: Statistics, PHP versions · checked
  17. 25 Debian security announce: DSA 6574-1, php8.4 (October 21, 2026) · checked
  18. 26 Debian LTS announce: DLA 4848-1, php8.2 (October 21, 2026) · checked
  19. 27 Ubuntu: USN-8948-1, PHP vulnerabilities · checked
  20. 28 Ubuntu: USN-8948-2, PHP vulnerabilities on the ESM releases · checked
  21. 29 Red Hat: CVE-2026-91765 · checked
  22. 30 Remi's RPM repository: PHP 8.1 is retired (January 8, 2026) · checked
  23. 31 Launchpad: PPA for PHP · checked
  24. 32 Debian manual pages: apt(8) · checked · ↑ back
  25. 33 DNF documentation: Command reference · checked · ↑ back
  26. 34 Docker official images on GitHub: library/php · checked · ↑ back
  27. 35 DEVCORE: CVE-2024-4577, PHP-CGI argument injection (June 6, 2024) · checked
  28. 36 NVD: CVE-2024-4577 · checked
  29. 37 CISA Known Exploited Vulnerabilities: CVE-2024-4577 · checked
  30. 38 CISA: Known Exploited Vulnerabilities catalog, JSON feed (version 2026.10.21) · checked
  31. 39 Sansec: Critical PHP RCE, CVE-2026-109618 and CVE-2026-109619 · checked
  32. 40 watchTowr: Frequently asked questions about PHP remote code execution, CVE-2026-109618 and CVE-2026-109619 · checked

Last reviewed

Newsletter

Patch alerts before your store gets hit.

More from the team

  • Build15 min

    Magento cost

    How much does Magento cost? License, hosting, build, extensions and upgrades, with each market figure sourced and dated, plus what drives the total.

    The Big Cart Energy team ·
  • Build25 min

    Ecommerce replatforming checklist

    Redirects, passwords, saved cards, SEO and AI search baselines, cutover and rollback: an ecommerce replatforming checklist with an owner for every item.

    The Big Cart Energy team ·
  • Grow24 min

    How to optimize for ChatGPT shopping

    How to optimize for ChatGPT shopping: get listed, win the seller pick and the "Shop at" button, and build a feed that fits OpenAI's current spec.

    The Big Cart Energy team ·

Want us to run the patch? Send your PHP and Magento or WooCommerce versions and your host, and a senior engineer replies in writing within one business day.

CriticalPriority flag: on

We reply by email. Don't paste passwords or keys here; we'll arrange access with you after we reply.

We use what you send to reply to you. We never sell it. Privacy policy