Risk Samurai
Home › Guides › PHP2Shell and your risk register

PHP2Shell: what online stores should log in their risk register

Two critical flaws in PHP itself put every self-hosted WooCommerce, Magento and PrestaShop store on alert in October 2026. Patching comes first. But the event also exposed risks that will outlast this patch — and those belong in your risk register.

By Alex Martyushin, founder & risk consultant · Updated 30 October 2026 · 12 min read

PHP2Shell is the nickname for CVE-2026-109618 and CVE-2026-109619, two PHP vulnerabilities that can allow unauthenticated remote code execution on servers running PHP for websites. The PHP project fixed them on 21 October 2026 in PHP 8.5.12, 8.4.27, 8.3.36 and 8.2.35. If your store runs on PHP, confirm the runtime that actually serves requests is patched — by you or your host. Then record the lasting risks the event revealed: reliance on your host to patch, unsupported PHP versions, a possible undetected compromise and no tested emergency change route.

What PHP2Shell is — the facts that are consistent

Coverage of PHP2Shell has been fast and sometimes contradictory, with different severity scores and different accounts of how widely it is being exploited. These are the points the official sources agree on. For anything that drives a decision — affected versions, mitigations, follow-up fixes — read the official PHP announcements and the two GitHub security advisories linked from them, because details have been updated since release.

ItemWhat we know
IdentifiersCVE-2026-109618 (“RCE via OOM corruption”) and CVE-2026-109619 (“RCE via stale global state”)
Where the flaw isIn the PHP engine’s handling of web requests — not in WordPress, WooCommerce, Magento or any plugin
Who is at riskPer the PHP advisory, all PHP installations serving web requests, including PHP-FPM, Apache with mod_php, php-cgi, FrankenPHP and LiteSpeed; the PHP team considers the risk highest for mod_php
SeverityRated critical by the PHP project (CVSS v4.0 9.2). Some researchers and vendors give different scores; the action is the same
Fixed versionsPHP 8.5.12, 8.4.27, 8.3.36 and 8.2.35, released 21 October 2026
Older versionsPHP 8.1 and older no longer receive updates from the PHP project; some Linux distributions, hosting panels and long-term support vendors provide backported fixes
MitigationsThe advisory lists temporary configuration changes but says they do not make an installation safe — updating is the fix
ExploitationSecurity vendors reported exploitation attempts, including at least one before the release. CISA added both CVEs to its Known Exploited Vulnerabilities catalogue on 26 October 2026

Follow-up issues are not new bypasses. On 23 October the PHP project published an informational notice about a related, configuration-dependent issue (CVE-2026-115560) and recommended keeping session.upload_progress.enabled=0 until the next regular release. On 26 October it rebuilt the Windows packages to update a bundled library. Neither changes the core message: run a fixed version.

Is your store exposed?

The question is not “which ecommerce platform do we use?” but “where do we run PHP that answers requests from the internet?”. Many businesses run more PHP than they realise.

Set-upExposed?Who patches
Self-hosted WooCommerce, Magento / Adobe Commerce (on-premise), PrestaShop, OpenCart, Shopware or similar on your own server or VPSYes, if PHP is not on a fixed versionYou, or whoever manages the server for you
Same platforms on shared or managed hostingYes, until the host updates PHPThe host — but you need to confirm it
Store run by an agency on its own infrastructureYes, until the agency patchesThe agency, under your contract
Fully hosted SaaS platformNot your runtimeThe platform provider
Anything else in PHP: a WordPress blog, landing pages, a forgotten staging site, an old store on a subdomain, a hosting control panelOften the real gapWhoever owns it — frequently nobody

Two points catch people out. First, a Magento or WooCommerce update does not fix PHP2Shell; the store software and the PHP runtime are patched separately, and you need both up to date. Second, the version number you see may mislead you. Linux distributions often backport security fixes into packages that keep an older-looking version number, while a command-line check can report a different PHP version from the one your web server actually uses. Confirm with your host or from the package changelog that the runtime serving the store includes the fixes for both CVEs.

What to do first

This is the short incident checklist. The detailed process — triage, priorities, SLAs, verification — is covered in our guide to a risk-based vulnerability management process, which uses PHP2Shell as a worked example.

  1. List every PHP site and server. Production store, staging, blogs, microsites, admin tools, hosting panels. Check DNS records for subdomains you have forgotten.
  2. Ask your host or agency in writing whether each environment runs a fixed PHP version or a vendor backport, and when it was applied. Keep the reply; it is your evidence.
  3. Patch internet-facing systems first. Update PHP, then restart PHP-FPM or the web server so no worker keeps running the old code.
  4. If you cannot patch today, apply the interim settings from the official advisory, restrict access (for example, put staging behind a login or IP allow-list), or take non-essential sites offline. Treat this as a short exception with an end date, not a fix.
  5. Look for signs of compromise on anything that was exposed while unpatched: new admin users, unexpected PHP files in upload or cache directories, changed checkout templates or payment scripts, new scheduled tasks, unusual outbound connections. If you find something, treat it as a security incident and get specialist help before cleaning up, so evidence is kept.
  6. Verify. Re-check versions after the change, and confirm your next external scan is clean.
  7. Close the loop in the register, as described below.

Why it belongs in the risk register at all

A single critical vulnerability is not, by itself, a register entry. It is a ticket: find it, fix it, verify it. Filling the risk register with CVE numbers is a common mistake — the register becomes a patch log that nobody at board level reads.

What earns a place in the register is the underlying exposure the event revealed: things that will make the next critical PHP, WordPress or Magento flaw just as dangerous. Ask four questions after the dust settles:

Each “no” is a risk with a cause, a consequence and controls you can improve. That is what the register is for.

Six risks to record after PHP2Shell

Below is an example set for a self-hosted online store, scored on a 5×5 risk matrix (likelihood × impact). Scores are illustrative residual scores for a store that has patched but not yet fixed the underlying gaps. Use your own scales and evidence.

#Risk statementLIScoreKey controls to add or strengthenOwner
1A critical flaw in the web stack (PHP, CMS, plugin) is exploited before we patch, giving an attacker control of the store server3515Emergency patch route with a 48-hour target for known-exploited flaws; WAF; advisory monitoring; tested rollbackTech lead
2Hosting provider or agency patches slowly or cannot confirm patch status, leaving us exposed without knowing it3412Contract clause on patch timeframes and notification; named contact; written confirmation after critical advisoriesOperations manager
3Sites on unsupported PHP versions cannot receive security fixes, so any new critical flaw stays open3412Upgrade plan with dates; paid backport support as a stop-gap; decommission unused sitesTech lead
4Unknown or forgotten PHP sites (staging, old campaigns, subdomains) are missed in an emergency339Asset inventory including DNS and hosting accounts; quarterly reconciliation; external attack-surface scanTech lead
5A server compromise goes undetected and is used to skim card data or steal customer data, leading to a reportable breach2510File integrity monitoring; payment page script monitoring; centralised logs kept long enough to investigate; incident response contactsHead of ecommerce
6Emergency patching or taking sites offline disrupts trading at a peak period236Staging that mirrors production; maintenance page ready; change freeze rules that allow security exceptionsHead of ecommerce

Notice that none of these says “PHP2Shell”. The CVE is the evidence that raised the likelihood, and it belongs in the risk’s history and in the notes for risk 1. That way the entries stay valid for the next WordPress plugin flaw or Magento advisory, and you are not adding a new line every month.

A worked entry

Here is risk 2 written out in full, the way it would look in a register with proper fields:

FieldContent
RiskHosting provider patches critical vulnerabilities slowly or cannot confirm status, leaving the store exposed without our knowledge
CategoryCyber / third party
CausesShared hosting with no control over the PHP version; contract silent on security patching; no named technical contact
ConsequencesServer compromise; card skimming and customer data breach; regulator and acquirer notification; downtime during clean-up
Existing controlsHost’s general security statement; our own daily backups
Inherent scoreL4 × I4 = 16
Residual scoreL3 × I4 = 12 — backups limit recovery time but not the breach
EvidenceOctober 2026: host confirmed the PHP2Shell fix six days after release, only after two support tickets
TreatmentAsk the host for a written patch policy; if it cannot commit to a timeframe for critical flaws, move to managed hosting that does — decision by 30 November
Target scoreL2 × I4 = 8
Owner / reviewOperations manager / monthly until treated, then quarterly

The evidence line is an example of what to write, not a claim about any real provider. The difference between the inherent and residual scores is explained in our guide to inherent vs residual risk.

If you find signs of compromise

A compromised store is no longer a vulnerability management problem; it is an incident with legal and contractual deadlines. Add a register entry for the incident’s consequences while it is investigated, and make sure the people below are involved early.

KRIs to track from now on

The useful lesson from a fast-moving vulnerability is measured in hours and days, not in the number of CVEs. These key risk indicators tell you whether you would cope better next time:

IndicatorLinked riskExample thresholds
Time to patch known-exploited vulnerabilities on internet-facing systems1Green ≤ 2 days · amber 3–7 · red > 7
Days from vendor fix to written confirmation from host or agency2Green ≤ 2 · amber 3–5 · red > 5
Web servers or sites on PHP branches without security support3Green 0 · amber 1 with a dated plan · red any without a plan
Internet-facing sites found by scan that are not in the inventory4Green 0 · amber 1–2 · red > 2
Unapproved changes to checkout pages or payment scripts5Green 0 · red any unexplained

Thresholds are illustrative. Align the first one with any external rule that applies to you: the vulnerability management guide summarises the patching timeframes in Cyber Essentials and the Essential Eight.

What PHP2Shell teaches beyond PHP

The specific flaw will be forgotten within months. The pattern will repeat: a critical bug in a component everyone depends on, a patch and an exploit within days of each other, and conflicting news in between. Three lessons apply to any store.

Your platform is more than your platform

Store owners think in terms of “WooCommerce” or “Magento”, and keep plugins and themes up to date. Underneath sit the language runtime, the web server, the operating system and the hosting control panel. Each has its own security fixes and often its own owner. Write down who patches each layer — in a simple table, agreed with your host or agency — before the next emergency, not during it.

Responsibility can be outsourced; risk cannot

If your host is slow, the breach is still yours: your customers, your acquirer, your regulator. This is why hosting and agency relationships deserve the same treatment as any important supplier — due diligence, contract terms and periodic review. Our guide to cybersecurity risk assessment shows how suppliers fit into the wider picture of cyber risk.

Speed needs to be rehearsed

A 48-hour patch target means nothing if nobody has done it outside a scheduled release. A staging copy that matches production, a known way to roll back and an agreed rule that security fixes can bypass a trading freeze turn a crisis into an afternoon’s work.

Common mistakes

Frequently asked questions

What is PHP2Shell?

The nickname for CVE-2026-109618 and CVE-2026-109619, two critical PHP flaws fixed on 21 October 2026 that can allow unauthenticated remote code execution on PHP installations serving web requests. Fixed versions are PHP 8.5.12, 8.4.27, 8.3.36 and 8.2.35.

Are WooCommerce and Magento stores affected by PHP2Shell?

The flaws are in PHP itself, so any self-hosted store on a vulnerable PHP version is exposed. The fix is to update the PHP runtime, which may be your host’s job. Updating the store software alone does not fix it.

Is a hosted platform such as Shopify affected?

On a fully hosted SaaS platform you do not run the server software, so patching it is the provider’s job. Check any other PHP sites you run yourself, such as a WordPress blog, landing pages or an old store on a subdomain.

Should PHP2Shell go in the risk register?

Patching belongs in your vulnerability management process. Add register entries for the lasting exposures it revealed: reliance on a host to patch, unsupported PHP versions, a possible compromise to investigate, or no tested emergency patching route.

One register for the next PHP2Shell

In Risk Samurai each risk carries its causes, controls, owner and evidence, so an advisory like PHP2Shell updates an existing entry instead of starting a new spreadsheet. AI drafts the first version of your register.

Get early access