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.
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.
| Item | What we know |
|---|---|
| Identifiers | CVE-2026-109618 (“RCE via OOM corruption”) and CVE-2026-109619 (“RCE via stale global state”) |
| Where the flaw is | In the PHP engine’s handling of web requests — not in WordPress, WooCommerce, Magento or any plugin |
| Who is at risk | Per 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 |
| Severity | Rated critical by the PHP project (CVSS v4.0 9.2). Some researchers and vendors give different scores; the action is the same |
| Fixed versions | PHP 8.5.12, 8.4.27, 8.3.36 and 8.2.35, released 21 October 2026 |
| Older versions | PHP 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 |
| Mitigations | The advisory lists temporary configuration changes but says they do not make an installation safe — updating is the fix |
| Exploitation | Security 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-up | Exposed? | Who patches |
|---|---|---|
| Self-hosted WooCommerce, Magento / Adobe Commerce (on-premise), PrestaShop, OpenCart, Shopware or similar on your own server or VPS | Yes, if PHP is not on a fixed version | You, or whoever manages the server for you |
| Same platforms on shared or managed hosting | Yes, until the host updates PHP | The host — but you need to confirm it |
| Store run by an agency on its own infrastructure | Yes, until the agency patches | The agency, under your contract |
| Fully hosted SaaS platform | Not your runtime | The platform provider |
| Anything else in PHP: a WordPress blog, landing pages, a forgotten staging site, an old store on a subdomain, a hosting control panel | Often the real gap | Whoever 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.
- List every PHP site and server. Production store, staging, blogs, microsites, admin tools, hosting panels. Check DNS records for subdomains you have forgotten.
- 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.
- Patch internet-facing systems first. Update PHP, then restart PHP-FPM or the web server so no worker keeps running the old code.
- 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.
- 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.
- Verify. Re-check versions after the change, and confirm your next external scan is clean.
- 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:
- Did we know where all our PHP was? If a forgotten site turned up, the risk is an incomplete asset inventory.
- How long did patching take, and who controlled that? If the answer was “we waited for the host”, the risk is third-party dependency.
- Could we patch everything? If a legacy site is stuck on PHP 7.4 or 8.0, the risk is unsupported software.
- Can we prove we were not compromised? If logs were missing or nobody looked, the risk is undetected intrusion — and with it card data and personal data.
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 statement | L | I | Score | Key controls to add or strengthen | Owner |
|---|---|---|---|---|---|---|
| 1 | A critical flaw in the web stack (PHP, CMS, plugin) is exploited before we patch, giving an attacker control of the store server | 3 | 5 | 15 | Emergency patch route with a 48-hour target for known-exploited flaws; WAF; advisory monitoring; tested rollback | Tech lead |
| 2 | Hosting provider or agency patches slowly or cannot confirm patch status, leaving us exposed without knowing it | 3 | 4 | 12 | Contract clause on patch timeframes and notification; named contact; written confirmation after critical advisories | Operations manager |
| 3 | Sites on unsupported PHP versions cannot receive security fixes, so any new critical flaw stays open | 3 | 4 | 12 | Upgrade plan with dates; paid backport support as a stop-gap; decommission unused sites | Tech lead |
| 4 | Unknown or forgotten PHP sites (staging, old campaigns, subdomains) are missed in an emergency | 3 | 3 | 9 | Asset inventory including DNS and hosting accounts; quarterly reconciliation; external attack-surface scan | Tech lead |
| 5 | A server compromise goes undetected and is used to skim card data or steal customer data, leading to a reportable breach | 2 | 5 | 10 | File integrity monitoring; payment page script monitoring; centralised logs kept long enough to investigate; incident response contacts | Head of ecommerce |
| 6 | Emergency patching or taking sites offline disrupts trading at a peak period | 2 | 3 | 6 | Staging that mirrors production; maintenance page ready; change freeze rules that allow security exceptions | Head 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:
| Field | Content |
|---|---|
| Risk | Hosting provider patches critical vulnerabilities slowly or cannot confirm status, leaving the store exposed without our knowledge |
| Category | Cyber / third party |
| Causes | Shared hosting with no control over the PHP version; contract silent on security patching; no named technical contact |
| Consequences | Server compromise; card skimming and customer data breach; regulator and acquirer notification; downtime during clean-up |
| Existing controls | Host’s general security statement; our own daily backups |
| Inherent score | L4 × I4 = 16 |
| Residual score | L3 × I4 = 12 — backups limit recovery time but not the breach |
| Evidence | October 2026: host confirmed the PHP2Shell fix six days after release, only after two support tickets |
| Treatment | Ask 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 score | L2 × I4 = 8 |
| Owner / review | Operations 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.
- Payment provider and acquirer. If card data may have been exposed, your merchant agreement will set out who you must tell and how fast. The PCI DSS checklist explains which parts of your checkout are in scope.
- Data protection regulator. In the UK, a personal data breach that is likely to put people’s rights at risk must be reported to the ICO within 72 hours of becoming aware of it. In Australia, organisations covered by the Notifiable Data Breaches scheme must notify the OAIC and affected individuals of an eligible breach as soon as practicable. In the US, notification rules are set by state law and differ between states, so take advice.
- Insurer. Cyber policies often require prompt notification and use of their approved incident responders.
- Customers. Expect a rise in phishing that mentions your brand, and a later rise in fraud and chargebacks — see our guide to ecommerce fraud and chargebacks.
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:
| Indicator | Linked risk | Example thresholds |
|---|---|---|
| Time to patch known-exploited vulnerabilities on internet-facing systems | 1 | Green ≤ 2 days · amber 3–7 · red > 7 |
| Days from vendor fix to written confirmation from host or agency | 2 | Green ≤ 2 · amber 3–5 · red > 5 |
| Web servers or sites on PHP branches without security support | 3 | Green 0 · amber 1 with a dated plan · red any without a plan |
| Internet-facing sites found by scan that are not in the inventory | 4 | Green 0 · amber 1–2 · red > 2 |
| Unapproved changes to checkout pages or payment scripts | 5 | Green 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
- Updating the store, not the runtime. A new Magento or WooCommerce version does not change the PHP version running underneath it.
- Trusting a version string. Backported packages can look old but be fixed, and the command-line PHP can differ from the one serving pages. Confirm with the host or package changelog.
- Forgetting to restart. Updated files on disk do not help while old workers are still running.
- Treating mitigations as a fix. The PHP project says its interim settings do not make an installation safe. Record them as a time-limited exception.
- One register line per CVE. Log the underlying exposure; attach the CVE as evidence.
- Patching and moving on. If a site was exposed while unpatched, check it for compromise before declaring the matter closed.
- Relying on news coverage. Early reports disagreed on scores, versions and exploitation. Use the vendor advisory and your national cyber security agency.
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