Field Notes / Vulnerability
PHP Has a Second RCE in Three Days, and No Patch Yet. One Setting Covers It, if It Is Really Off.
On 23 October 2026 the PHP project disclosed CVE-2026-115560, a code execution flaw that the PHP2Shell releases from two days earlier do not fix. It needs an unusual setup, and the mitigation is a single line many teams already applied. Here is who is exposed, how to prove the setting is live on the server that answers web requests, and where the WAF rules stop.
01 What changed on 23 October
wo days after the emergency PHP2Shell releases, the PHP project posted a short informational advisory. It describes a second way to reach code execution through PHP sessions, one that the patched versions do not close. PHP calls the vector unlikely and is handling it in the regular release cycle rather than with another emergency build PHP 2026a .
| Date (UTC) | What happened |
|---|---|
| 21 Oct 2026 | PHP ships 8.5.12, 8.4.27, 8.3.36 and 8.2.35 for PHP2Shell, and lists session.upload_progress.enabled=0 as a mitigation for CVE-2026-109619 |
| 21 Oct 2026 | Cloudflare enables WAF rules for PHP2Shell on free and paid plans |
| 23 Oct 2026 | PHP discloses CVE-2026-115560, unpatched, same mitigation |
| 23 Oct 2026 | Cloudflare notes a gap in its rule for sites with a renamed upload-progress field |
| Next regular release | Fix and full advisory, date not announced |
Three things are still unknown on 24 October: which branches are affected, the severity score, and whether the bug shares a root cause with CVE-2026-109619 Astra 2026 . No attacks against the new flaw have been reported. The attacks that started on 21 October target PHP2Shell.
02 Who is exposed
PHP2Shell hit every PHP server that took web requests. This one needs three conditions on the same request path PHP 2026a :
- The configuration sets
session.serialize_handlertophp_binaryorphp_serialize. - The application switches it back to
phpwithini_set()before it callssession_start(). - Session upload progress is still enabled, which is PHP’s default.
Most applications never touch the serialize handler at runtime, and the PHP project says those can keep upload progress on. The ones that do are usually old: a shared session store between a legacy app and a newer one, a migration that kept both formats readable, a framework patch somebody wrote in 2014. That code tends to sit on the hosts nobody looks at.
03 The setting, and how to prove it is off
The fix for this week is session.upload_progress.enabled=0.
It blocks the confirmed session path for CVE-2026-109619 as well, so one
change covers both PHP 2026b .
The way you set it matters more than the value.
- PHP-FPM pool:
php_admin_flag[session.upload_progress.enabled] = off - Apache with mod_php:
php_admin_flag session.upload_progress.enabled off - Plain php.ini:
session.upload_progress.enabled = 0
Use the php_admin_* form where you can. Application code
cannot override it with ini_set(), and the PHP advisory warns
against relying on ini_set() or an FPM .user.ini
for this setting, because both apply too late in the request
PHP 2026b . Then restart every
worker. A reload can leave old workers running with the old value.
- Read the value from the web server’s PHP, not the shell. php -i reads the CLI configuration and can show 0 while FPM still runs with 1. Use php-fpm -i | grep session.upload_progress or a phpinfo() page served through the site, then delete that page.
- Check every FPM pool separately. Hosts with several sites often run several pools, and each one can set its own value.
- Look for per-directory overrides: .user.ini files, .htaccess php_value lines and hosting control panel settings can turn the feature back on for one site.
- Confirm the restart happened. Compare the start time of the PHP-FPM master and workers with the time of your change.
- Test an upload form afterwards. Turning off upload progress removes the progress bar data some upload widgets read; the upload itself keeps working.
04 Where the WAF stops
Cloudflare turned on PHP2Shell rules for free and paid plans at 03:02 UTC
on 21 October. Its update of 23 October adds a limit that matters here:
customers who changed session.upload_progress.name are not
covered by the rule Cloudflare 2026 .
The rule looks for the default field name. Rename the field and the
request no longer matches.
A WAF also sees only the traffic routed through it. An attacker who finds your origin IP talks to PHP directly. Treat the edge rule as a second layer under the setting, never the reason to skip it.
05 What this week tells you about next week
Two advisories in three days is a normal pattern after a big disclosure. Researchers who found the first bug keep reading the same code, and the second finding often lands while teams are still patching the first. The teams who set the upload-progress flag on 21 October did nothing on 23 October. The teams who went straight to the version bump and skipped the mitigation now have a second job on a Saturday.
Keep the interim settings from the first advisory in place until the vendor says otherwise, even after you patch. Keep the host list you built for PHP2Shell current, because the next PHP release will ask you to visit every one of those hosts again.
An attacker needs one PHP host where the setting never took. You can find that host first. Your Threat Map maps every web property under your name, flags each unpatched or misconfigured PHP and other critical exposure, and gives you the routes in, proven, with the fix ranked by what each one reaches. Enterprise-grade. Not enterprise-priced.
References
Sources
- The PHP Group. “Informational advisory: Session upload progress.” php.net news archive, 23 October 2026. php.net
- The PHP Group. “Security advisory: Critical remote code execution vulnerabilities, update now.” php.net news archive, 21 October 2026. php.net
- Cloudflare. “Cloudflare deploys protections against php2shell vulnerability.” 21 October 2026, updated 23 October 2026. blog.cloudflare.com
- Astra Security. “CVE-2026-115560: Another PHP Session-Handler RCE.” October 2026. getastra.com
- PHP security advisory GHSA-6wmf-4rv5-p3rp (CVE-2026-109619). GitHub, php/php-src, 21 October 2026. github.com