On this page
To patch PHP2Shell on a WooCommerce store, update the PHP runtime that serves your site. Updating WooCommerce does not do it. The fix is PHP 8.5.12, 8.4.27, 8.3.36 or 8.2.35, or a vendor build that names both CVEs, plus a restart of the PHP workers. Ask your host to confirm both for your domain, then test checkout. WooCommerce, plugins and stored keys still need their own care.
| Fact | Detail | Source |
|---|---|---|
| CVE ids | CVE-2026-109618 and CVE-2026-109619, remote code execution in PHP core | PHP notice |
| Severity | CVSS v4.0 9.2 for both, per PHP's 20 October pre-announcement | PHP notice |
| Fixed releases | 8.5.12 · 8.4.27 · 8.3.36 · 8.2.35 (changelog entries dated 22 October) | PHP changelog |
| In scope | All PHP installations serving web requests, including PHP-FPM, mod_php, php-cgi, FrankenPHP and LiteSpeed | PHP notice |
| Older branches | 8.1 and older get no PHP project updates. Some vendors backport; PHP published minimal source backports for 7.4, 8.0 and 8.1 | PHP notice |
| Exploitation | CISA added both CVEs to its Known Exploited Vulnerabilities catalog on 26 October 2026 (due date 29 October). Attempts in AWS honeypots from 17 October (vendor-claimed); AWS says it is unclear whether those would have worked on real systems | CISA KEV, AWS |
| Checked | 24 October 2026; CISA status re-checked 28 October 2026 | this page |
Is my WooCommerce store affected?
If it runs on PHP, it is in scope. WooCommerce is a WordPress plugin, and WordPress runs on PHP, so every WooCommerce store is a PHP site, as the WordPress-side explanation spells out. The PHP project says all installations serving web requests are in scope. It rates the risk highest for mod_php, where it describes a demonstrated attack that runs before any application code.
The store being fully up to date does not change this. Cloudflare says the flaws are in the PHP runtime, so updating site code or plugins alone does not fix them. Our PHP2Shell explainer has the full version table.
Does updating WooCommerce patch PHP?
A store owner's routine is to update WordPress, WooCommerce and the payment plugin. Those updates are good practice. They do not touch the PHP binary, so after all of them the store can still run an unpatched PHP.
Two more traps sit on the PHP side:
- The version label can mislead. A fixed vendor package can keep an older version number. The PHP changelog lists the two fixes by GHSA id, not CVE number, so a package changelog may name either. Ask for the identifier, not just the branch.
- A new package is not a restarted worker. The PHP notice says to restart every worker after its configuration measures. Long-running PHP processes keep the code they started with, which is why the restart step after a PHP update matters.
How do I patch PHP and keep the store open?
If a host manages PHP for you
WordPress.org says hosts handle PHP versions, usually through their settings or a support request. Send this and keep the reply:
For [your domain], is the PHP runtime that serves web requests patched for CVE-2026-109618 and CVE-2026-109619? Please give the fixed package or build identifier, confirm that every PHP worker serving my store has been restarted or replaced since, tell me whether
session.upload_progress.enabled=0is set for my PHP workers (PHP's 23 October notice asks for it until the next release, for CVE-2026-115560), and tell me whether I need to change a setting or redeploy.
- Find your PHP version: Tools, Site Health, Info, Server section. It shows a version, not a backport or a restart.
- Send the question above to your host. Add the date and time you sent it.
- Back up the site first. WordPress.org recommends a backup before a PHP update.
- If the host will move you to a new PHP branch, test plugin and theme compatibility first, as WordPress.org advises. Ask for a patched build of your current branch if you cannot test this week.
- Ask the host to confirm
session.upload_progress.enabled=0inphp.inior the FPM pool, and a worker restart after it. PHP's 23 October notice recommends this for CVE-2026-115560 until the next release. - Run the checkout test list below once the host says it is done.
Our page on what to ask a shared host has more on the answers to expect. "Nothing published" from a host means ask, not patched and not unpatched.
If you manage the server yourself
- Install PHP packages from your distribution or vendor. The package changelog should name both fixes.
- Restart PHP-FPM, or Apache if you use mod_php. Check the web runtime, not just
php -v, which can be a different binary. - Rebuild and redeploy any container image that bundles PHP, and check every virtual host separately if several PHP versions run side by side.
- Know the stopgaps and their limits. PHP lists temporary measures, such as
session.upload_progress.enabled=0for CVE-2026-109619, and says they do not make an installation safe. Only an update is a complete solution. - Separately, PHP's 23 October notice says a third issue, CVE-2026-115560, will get its own advisory with the next release. It suggests setting
session.upload_progress.enabled=0until then. Cloudflare says that issue affects fully patched releases including 8.5.12.
What if my host cannot confirm a patch?
The UK NCSC says to update to the latest version of PHP. It adds that the PHP Foundation provides temporary mitigations if you cannot update, and that if you cannot apply them, or applying them would take too long, you should consider taking the system offline until it can be fully mitigated. For a store, that is a business decision, so make it with the host's answer in hand. A WAF is a stopgap. Cloudflare says customers should still patch.
What should I test after the runtime changes?
This list is our own, not a vendor's. A PHP change can show up first in the parts of a store that move money.
| Check | What to look at |
|---|---|
| Storefront | Product pages, search, cart and account login load without PHP errors |
| Checkout | One real or sandbox order through each payment method you offer |
| Payment return | The customer lands on the order confirmation page |
| Order and password-reset emails arrive | |
| Webhooks | Your payment provider shows deliveries as accepted |
| Admin | Order list, product edit, refund screen |
| Scheduled jobs | Subscriptions, stock sync or abandoned-cart tasks still run |
Am I affected? A three-state self-test
Am I affected? Where you stand right now
A passive check from outside can only reach the first two states. Evidence from the server or your host reaches the third.
- Detected Your store serves PHP and the exposed version is below the fixed release for its branch. Treat the store as exposed. Send your host the question above today, or patch and restart yourself.
- Unknown Your store serves PHP but hides the version, or shows a version that could be a backport. This is the common case. Get the package or build identifier and a restart time from your host.
- Confirmed by owner evidence You hold a package or build identifier that names the fixes, and a restart or redeploy time after it. That is evidence for the two CVEs only. PHP's 23 October notice also asks for `session.upload_progress.enabled=0` for CVE-2026-115560 until the next release, and WooCommerce, plugins and stored keys still matter. The look-back below is a separate question.
No scan, ours included, moves you from "unknown" to "confirmed". A passive result is not proof of a patch.
Was my store exploited before I patched?
Unknown for most stores, and nobody can answer it from outside. CISA added both CVEs to its Known Exploited Vulnerabilities catalog on 26 October, so exploitation in the wild is on record. AWS saw attempts against its honeypots on 17 October, four days before disclosure, and says it is unclear whether any would have worked on real systems. AWS advises investigating from at least 17 October, reviewing web server logs, and checking for unexpected process execution or file changes on web servers.
On a store, add these to the review: new administrator accounts, unexpected PHP files in upload folders, and orders or payment settings you did not change. Our list of exploitation indicators goes deeper. If the checkout page itself was altered, see how to find a card-skimming script. The UK NCSC says to check for signs of compromise and backdoors if you cannot update or disable a system straight away, and to use an assured incident response provider if needed. If the review finds anything, treat secrets stored on that server (payment API keys, webhook secrets, database and admin passwords) as readable and rotate them, as in our steps for replacing exposed keys and passwords. That step is our advice, not NCSC's.
What is the bug?
Both CVEs are memory-handling problems in the PHP engine. PHP describes CVE-2026-109618 as out-of-memory handling that can leave request data partly initialized, and CVE-2026-109619 as request state that survives after its memory was freed. We do not reproduce attack detail here, and you do not need it to fix a store. For the other store guides, see more ecommerce security pages.
Questions people ask
Does updating WooCommerce or WordPress fix PHP2Shell?
No. The two bugs are in the PHP engine that runs WooCommerce, so the fix is a patched PHP on the server, followed by a restart of the PHP workers. Keep updating WooCommerce and your plugins for their own reasons, but those updates do not change the PHP runtime.
Do I need to take my WooCommerce store offline?
The UK NCSC says to update to the latest PHP version. It adds that PHP provides temporary mitigations if you cannot update, and that if you cannot apply them, or applying them would take too long, you should consider taking the system offline until it can be fully mitigated. If your host can confirm a patched runtime, restarted workers and `session.upload_progress.enabled=0` (PHP's 23 October advice for CVE-2026-115560, pending the next release), that is the evidence to ask for before deciding. A patched runtime alone is not the whole answer: WooCommerce, plugins and any keys stored on the server still matter. If nobody can tell you the state of the PHP serving your checkout, that is the case to escalate.
Can Cloudflare protect my store while I wait for my host?
Cloudflare says its WAF rules were deployed on 21 October and still tells customers to patch PHP. A WAF rule is not a PHP fix. Use it as a stopgap and keep the patch on your list.
Will updating PHP break my checkout?
It can, which is why a test list matters. After any change, place a test order and check the payment, email and webhook steps.
How do I know which PHP my store runs?
In WordPress admin, Tools, Site Health, Info, then the Server section. That shows a version, not whether your host backported the fix or restarted the workers. The host can confirm both for your domain.
Sources
- PHP security notice, 21 October 2026, and follow-up of 23 October (php.net)Names both CVEs, the fixed releases, the scope, the temporary measures, and the CVE-2026-115560 follow-up. At our check on 24 October 2026.
- GHSA-w8hw-w9fx-j79w: CVE-2026-109618 (php/php-src advisory)
- GHSA-6wmf-4rv5-p3rp: CVE-2026-109619 (php/php-src advisory)
- PHP 8 changelog (php.net)8.5.12 and 8.4.27 entries dated 22 October list both advisories by GHSA id, without CVE numbers.
- Cloudflare: WAF protections for the PHP vulnerabilitiesVendor statement. Cloudflare tells customers to patch PHP even with the WAF rules on. At our check on 24 October 2026.
- Amazon Threat Intelligence: PHP2Shell exploitation attempts seen in MadPot honeypots before disclosure (AWS Security Blog, 21 October 2026)Vendor telemetry. AWS says it is unclear whether the attempts would have worked on real systems.
- CISA Known Exploited Vulnerabilities catalog (CSV feed)Lists CVE-2026-109618 and CVE-2026-109619, both added 2026-10-26 with a due date of 2026-10-29. Read on 28 October 2026.
- UK NCSC: critical security issue affecting PHP (21 October 2026, modified 23 October)
- WordPress.org: Update PHPBackups, compatibility testing and asking the host.
- WordPress.org: Site Health screen
Facts on this page are dated and point at the primary source next to them. If a vendor status changes after the date shown, the vendor's page wins; tell us at support@run.cloud and we will update it.