On this page
- What did Microsoft say about PHP2Shell, and when?
- Which App Service setups does the notice cover?
- Why can an App Service app still be unpatched?
- How do I check my App Service app?
- What does the rollout look like in time?
- Was anything exploited on Azure App Service?
- Does a firewall in front of App Service fix it?
- What is the bug, without the exploit?
- Is there another PHP issue to watch?
Microsoft's own notice, dated 21 October 2026, says the built-in PHP images on Azure App Service for Linux were updated to PHP 8.2.35, 8.3.36, 8.4.27 and 8.5.12, with the rollout complete on the Latest and Standard channels. Extended trails, Windows built-in PHP gets no patch, and custom containers are yours. Open an SSH session and run php --version.
| Fact | Detail | Source |
|---|---|---|
| CVE ids | CVE-2026-109618 and CVE-2026-109619, CVSS v4 9.2 each | GHSA-w8hw-w9fx-j79w, GHSA-6wmf-4rv5-p3rp |
| PHP disclosure | 21 October 2026, 14:00 UTC | PHP notice |
| Fixed upstream releases | 8.5.12 · 8.4.27 · 8.3.36 · 8.2.35 | PHP notice, changelog |
| Microsoft, Linux built-in PHP | Updated images rolled out to Latest and Standard, update dated 21 October 2026 | Microsoft notice |
| Microsoft, Extended channel | "Receives the fix last". No completion statement found | Microsoft notice |
| Microsoft, Windows built-in PHP | End of life, no patch currently planned | Microsoft notice |
| Evidence for your app | None published. No build identifier, no per-app restart time | Microsoft notice |
| Exploitation | Attempts in AWS honeypots from 17 October (vendor-claimed) | AWS |
| Checked | 26 October 2026 | this page |
What did Microsoft say about PHP2Shell, and when?
Microsoft published one App Service notice, titled "Critical PHP security release: what it means for Azure App Service", on 21 October 2026. We read it on 26 October 2026. It gives the four updated PHP versions above, describes the rollout by channel, and lists actions for Linux, Windows, WordPress and custom containers.
The sentence that matters is this one: "We have completed the rollout of the updated built-in PHP images with the security fixes to both the Latest and Standard Platform Release Channels for Azure App Service on Linux." It carries an update line dated 21 October 2026. Microsoft's 22 October post about Node.js and Python links to the PHP notice as a separate release.
Our host-matrix research on 22 October recorded Azure as "unknown". That was before we found this notice. The status changed from unknown to a vendor statement, and a vendor statement about a platform is still not evidence about your app.
At our check, the Azure status history showed no PHP incident. An empty status page tells you nothing about patch state, so we do not read it as either answer.
Which App Service setups does the notice cover?
Not all of them. The table lists each setup, what Microsoft's notice says, and what is left for you.
| Your setup | What the Microsoft notice says (21 October 2026) | What is left for you |
|---|---|---|
| Linux, built-in PHP 8.2 to 8.5, Standard or Latest channel | Updated images rolled out to both channels | Read the version over SSH on every instance and slot |
| Linux, built-in PHP, Extended channel | Extended follows Standard and receives the fix last | Move to Standard or Latest, then verify |
| Windows, built-in PHP | Built-in runtimes are end of life; no patch currently planned | Move to App Service on Linux, or run your own patched runtime |
| Linux, PHP 8.1 or older (built in) | End-of-life versions will not receive these patches | Move to a supported PHP branch |
| Custom container | Rebuild images with the fixed PHP versions from the PHP project | Rebuild, redeploy, check each slot |
| WordPress on App Service (Marketplace) | Updated to patched PHP, except apps on the older Alpine-based images | Check which image you run; migrate off the older Alpine image |
For the Windows row, Microsoft's PHP configuration page already says PHP on Windows reached end of support in November 2022 and that PHP is supported only for App Service on Linux.
Why can an App Service app still be unpatched?
Four reasons come from Microsoft's own pages.
The Extended channel. App Service lets Linux apps choose how fast runtime patches arrive. The Platform Release Channel has three settings, and Standard is the default. Extended "typically stays one release behind Standard", and the PHP notice tells Extended customers to move. If someone chose Extended for stability, the app may still run the old build.
End-of-life PHP. A built-in 8.1 or older runtime gets no fix from Microsoft. The PHP project shipped source backports for 7.4, 8.0 and 8.1 on GitHub, and the PHP notice names them, but a built-in image is whatever Microsoft ships. See PHP 8.1 and older after PHP2Shell.
Custom runtimes and containers. Microsoft's patching page says a custom runtime you upload "remains unchanged unless you manually upgrade it". A container built last month still has last month's PHP. The Docker official php image lists the fixed tags for Debian and Alpine, and the rebuild steps are in PHP2Shell and Docker images.
Mixed environments. Microsoft's SSH page says the CLI connects to one instance by default. A scaled-out app has several instances, and each deployment slot is separate.
How do I check my App Service app?
A passive look from outside cannot do this, because the PHP version is rarely exposed and the serving runtime is hidden behind the platform. The check happens inside the app container.
How do I read the PHP version?
Microsoft's instruction in the PHP notice is to open an SSH session to the app and run php --version. The SSH page gives the path: in the Azure portal, open the app, go to Development Tools, select SSH, then Go. The patching page also lists the Kudu console at https://<appname>.scm.azurewebsites.net/DebugConsole for the same command.
On a built-in image, Microsoft's table lists the upstream numbers as the updated versions. A version at or above 8.2.35, 8.3.36, 8.4.27 or 8.5.12 on its branch is therefore useful evidence, which is not true on a Debian or Ubuntu server where backports keep the old number. That reasoning stops at the built-in image. A custom container built on a distribution package can show an older number and still carry a backport, so read its package changelog instead.
The command-line php is the binary you run in the shell. The notice does not say it is the binary behind the web server, and it does not mention a restart or recycle after the update. Those two gaps are why the strongest evidence comes from Microsoft in writing.
What does az webapp config show tell me?
Less than people expect. Microsoft's PHP page shows az webapp config show --resource-group <group> --name <app> --query linuxFxVersion. It returns the runtime line you configured, such as PHP|8.3. That is the branch. It does not name a build or a fix date.
Which Platform Release Channel is my app on?
In the Azure portal, open the app, select Stack settings, and read Platform Release Channel. The channel can be changed there. The channel announcement gives the CLI form az webapp update --platform-release-channel Standard. The channel setting is Linux only.
Checklist for App Service owners
- Note whether each app runs on Linux or Windows
- For Linux built-in apps, read the Platform Release Channel under Stack settings
- If it says Extended, move to Standard or Latest
- Run
php --versionover SSH on every instance and write down the result with the date - Repeat for every deployment slot, including staging
- Compare the result with 8.2.35, 8.3.36, 8.4.27 or 8.5.12 for built-in images
- For custom containers, rebuild from a base image that carries the fix and redeploy
- Send the question below if you need written confirmation
What do I ask Microsoft support?
For [app name, subscription, region], is the PHP runtime that serves web requests patched for CVE-2026-109618 and CVE-2026-109619? Please give the built-in image or build identifier on each instance, say which Platform Release Channel the app is on, confirm that the PHP worker processes serving it were restarted or replaced after the fix, and tell me whether I need to restart, redeploy or change a setting.
Microsoft's patching page says that for security reasons certain specific security information is not published. Support may not give a build identifier. Keep whatever it does give you, with the date.
Am I affected? Where you stand right now
A scan from outside can read headers and version hints at most. It cannot see your Platform Release Channel, your container image, or when workers last started.
- Detected Your site serves PHP and a version below the fixed release for its branch is visible, or your SSH check shows one. Treat the app as exposed. Move off Extended, update the runtime or rebuild the container, and re-check over SSH today.
- Unknown You have not read the version inside the app, or the app is on Windows, a custom container or an old Alpine WordPress image. This is the common case. Microsoft's notice describes its platform, not your app. Get the version and the channel from the app itself.
- Confirmed by owner evidence You hold an SSH reading at or above the fixed version on every instance and slot, or a Microsoft reply naming the fixed build, and the app restarted after the update. The runtime is patched. The open question is whether anything got in between 17 October and that time.
No scan, ours included, moves you from "unknown" to "confirmed".
What does the rollout look like in time?
Was anything exploited on Azure App Service?
We found no statement from Microsoft about exploitation of App Service apps. The notice we read does not address it.
Across the internet, AWS reported attempts against its honeypots from 17 October, four days before disclosure, and says it is unclear whether those early attempts would have worked on real systems. It reports further attempts from several sources on 21 October after proof-of-concept code appeared (AWS Security Blog). At our check on 24 October, we could not see either CVE in the first page of the CISA catalog view; search it by CVE id before relying on that.
If your app ran an unpatched PHP between 17 October and its fix, look for PHP files you did not upload under the app's content folder, scheduled jobs you did not create, new administrator accounts, and unexpected outbound connections. A patch does not remove anything planted before it. The full compromise check for a PHP2Shell hit walks through the steps.
Does a firewall in front of App Service fix it?
It can lower exposure. It does not change the PHP in the container. We found no Microsoft rule published for these CVEs, so we cannot say one exists. Our page on whether a WAF stops PHP2Shell covers what a rule can and cannot see.
What is the bug, without the exploit?
Both CVEs are memory-safety problems in the PHP engine, reachable by an unauthenticated web request. The advisory for CVE-2026-109618 describes an out-of-memory condition that leaves request memory in an invalid state, with remote code execution validated over HTTP against mod_php. CVE-2026-109619 is state left over between requests handled by the same worker. The PHP project says all installations serving web requests are in scope, so a PHP app on App Service is in scope until its runtime is fixed. We do not reproduce exploit material.
Is there another PHP issue to watch?
Yes, a separate one. On 23 October 2026 the PHP project posted a follow-up notice for CVE-2026-115560, recommending session.upload_progress.enabled=0 until the next bugfix release, with a full advisory to follow. It is a different issue from the two PHP2Shell CVEs. Microsoft's PHP page describes setting php.ini directives on Linux through a custom .ini file and the PHP_INI_SCAN_DIR app setting; the PHP notice says to set this one in php.ini or pool configuration, never with ini_set(). We will update this page when the PHP advisory is published.
The wider October picture is in the October 2026 security meltdown tracker. If you run PHP on other clouds too, the same question for Google Cloud and AWS Lightsail is answered separately, and the other host status checks are collected in one place. Then inventory every PHP runtime serving your business, and see who is responsible for patching your website when it is unclear whether the platform or you own a step.
Questions people ask
Is Azure App Service patched for PHP2Shell?
Microsoft says it completed the rollout of updated built-in PHP images to the Latest and Standard channels for App Service on Linux, in an update dated 21 October 2026. That covers the platform. It does not cover apps on the Extended channel, Windows built-in PHP, custom containers or end-of-life PHP versions. Check your own app over SSH.
My App Service app is on the Extended channel. What do I do?
Microsoft's PHP notice tells customers to move off Extended, because Extended follows Standard and receives the fix last. Move the app to Standard or Latest in Stack settings, then run php --version in an SSH session and compare it with 8.2.35, 8.3.36, 8.4.27 or 8.5.12.
Does Azure patch PHP on App Service for Windows?
No. Microsoft says the built-in PHP runtimes on App Service for Windows are end of life and that no security patch for them is currently planned. Move the app to App Service on Linux, or run a PHP runtime you patch yourself.
I deploy PHP in a custom container on Azure. Who patches it?
You do. Microsoft says to rebuild custom container images with the fixed PHP versions published by the PHP project, and its patching page says a custom runtime stays unchanged until you upgrade it. Rebuild from a base image that carries the fix and redeploy every slot and instance.
az webapp config show says PHP|8.3. Does that prove I am patched?
No. That value is the runtime line you configured, a branch, and it does not name a build. Open an SSH session and run php --version to read the installed version. Microsoft's notice does not say anything about restarting apps, so ask support if you need written confirmation.
Does a Web Application Firewall in front of Azure fix PHP2Shell?
A firewall can reduce exposure and is a stopgap. The PHP project says the fix is a patched PHP release or a vendor backport. Treat any Front Door or Application Gateway rule as a second layer, and still confirm the PHP version your app runs.
Sources
- Microsoft, Azure App Service blog: Critical PHP security release, what it means for App Service (21 October 2026)Microsoft's own dated notice. Updated built-in PHP versions, channel rollout, Windows, custom containers. Read 26 October 2026.
- Microsoft Learn: OS and runtime patching in Azure App ServiceHow PHP patch updates are applied, the Platform Release Channel, and how to read the PHP version in Kudu.
- Azure App Service blog: Platform Release Channel (6 May 2026)Latest, Standard and Extended, the default, and the CLI flag.
- Azure App Service blog: Emergency Node.js and Python runtime updates on Linux (22 October 2026)Shows how Microsoft reports rollout completion per channel, and links the PHP notice.
- Microsoft Learn: Open a container shell (SSH) and run commandsPortal path, az webapp exec, per-instance and per-slot access.
- Microsoft Learn: Configure a PHP app in Azure App Serviceaz webapp config show returns the configured runtime line, and PHP on Windows is end of support.
- Azure status history (Microsoft)No PHP incident listed at our 26 October check. The page lists two September post incident reviews.
- PHP security notice, 21 October 2026 (php.net)Fixed releases, scope, interim settings, and the 23 October follow-up for CVE-2026-115560.
- 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 are dated 22 October and list both advisories. No 8.5.13 at our check.
- Amazon Threat Intelligence: PHP2Shell exploitation seen in MadPot before disclosure (AWS Security Blog, 21 October 2026)Vendor telemetry. AWS says it is unclear whether the early attempts would have succeeded on real systems.
- Docker Official Image: php (library definition)Lists 8.5.12, 8.4.27, 8.3.36 and 8.2.35 on Debian and Alpine at our check.
- CISA Known Exploited Vulnerabilities catalogNeither CVE was visible in the first page of the catalog view we could read. Search it by CVE id before relying on this.
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.