CVE-2026-115560 is a possible remote code execution path in PHP session upload progress. PHP calls it unlikely: an application must switch session.serialize_handler to php at runtime. Status on 11 November 2026: PHP has no fix and no full advisory, CVE.org and NVD have no record, and CISA KEV does not list it. Stopgap: session.upload_progress.enabled=0.
What it allows
PHP calls CVE-2026-115560 an "unlikely RCE vector" in session upload progress. The feature lets an application follow a file upload through the PHP session, so a page can draw a progress bar. PHP says that in one unusual setup the feature can lead to remote code execution.
PHP has not yet published how the attack works. It will do so in a full advisory with the next regular bugfix release. To follow reports of attacks on CVE-2026-115560, use a vulnerability intelligence platform that tracks exploitation.
Status on 11 November 2026
- PHP has not published the full advisory. The news page at php.net still shows the 23 October note, and PHP says the full advisory comes with the next release.
- There is no fixed version. The latest PHP 8.5 release is 8.5.12 of 21 October, and PHP has not said it fixes this id.
- The PHP security advisories on GitHub have no entry for the id. The newest ones are the two PHP2Shell advisories of 21 October.
- CVE.org returns no record and the NVD has no entry, so there is no CVSS score yet.
- The id is not in the CISA KEV catalog (version 2026.11.10).
The Setup PHP Describes
Three things must be true together. The application sets session.serialize_handler to php_binary or php_serialize in its configuration. It then switches the handler to php at runtime with ini_set() before it calls session_start(). Session upload progress must also still be on, and the PHP manual lists it as on by default.
Applications that never change the serialize handler at runtime can keep the feature on, says PHP. The stopgap it suggests is session.upload_progress.enabled=0 until the next bugfix release.
Public Exploit Code
On 11 November 2026 a GitHub search found 26 repositories that name the id, created between 21 and 31 October. Many are checkers or hardening scripts. At least six describe a proof of concept, a lab or an exploit framework.
Several say the handler switch leads to object injection and then command execution. Those are the authors' claims. We did not run or link any of the repositories. No source we read confirms that an exploit works against a real server.
What Is Not Known Yet
- How the attack works. PHP has not published the details.
- Which PHP versions are affected. PHP gives conditions, not a range.
- The CVSS score and the weakness type, which come with a CVE record.
- Whether any public exploit works outside a lab.
- Which release carries the full advisory. PHP 8.6.0 is planned for 19 November, but PHP has not said it carries the advisory.
How It Differs From PHP2Shell
PHP2Shell is the name for CVE-2026-109618 and CVE-2026-109619, fixed on 21 October in PHP 8.5.12, 8.4.27, 8.3.36 and 8.2.35. PHP's advisory for CVE-2026-109619 already lists turning off upload progress as a mitigation, and that is why the same setting is named again. PHP's note does not say the 21 October releases fix CVE-2026-115560.
Sources differ on which id covers which upload-progress path: VulnCheck ties the upload-progress scans it saw to CVE-2026-109618, while PHP gives CVE-2026-115560 to the serializer switch. Our PHP security news post on CVE-2026-115560 and the PHP2Shell analysis carry the wider story.
A similar mismatch between what a WAF inspects and what the backend uses appears in the ModSecurity multipart filename bypass, CVE-2026-104269.
Who is affected
PHP has not published an affected version range, and the id still had no NVD or CVE program record on 11 November 2026 (we first looked on 23 October). What it has published is a set of conditions, not versions:
- The application configures
php_binaryorphp_serializeas the session serialize handler. - The application code switches it to
phpwithini_set()beforesession_start(). - Session upload progress is enabled.
Who Can Rule Itself Out
PHP says applications that never change the serialize handler at runtime can keep the feature on. Because the trigger lives in application code, the version PHP reports to the outside does not show it. Our free PHP check compares versions for CVE-2026-109618 and CVE-2026-109619 only and does not test this id.
How To Check Your Setup
php -i | grep session.upload_progress.enabled shows the command-line setting. Your web server may load another php.ini, so check the file it uses. To find a handler switch, search the code with grep -rnE "ini_set.*session.serialize_handler" /path/to/app. A match that sets php before session_start() is the case PHP describes.
Timeline
- 21 Oct 2026
PHP releases 8.5.12, 8.4.27, 8.3.36 and 8.2.35 for PHP2Shell. Its CVE-2026-109619 advisory lists turning off upload progress as a mitigation.
- 23 Oct 2026
PHP posts an informational advisory on session upload progress and names CVE-2026-115560. A full advisory is due with the next bugfix release.
- 23 Oct 2026
Between 16:37 and 18:31 UTC, three GitHub repositories appear that claim lab proofs of concept for the id.
- 23 Oct 2026
The CISA KEV file released at 17:00 UTC does not list the id.
- 31 Oct 2026
The newest GitHub repository that names the id is created. By 11 November, 26 repositories name it, and at least six describe a proof of concept, a lab or an exploit framework.
- 5 Nov 2026
PHP announces 8.6.0 RC5 and plans the 8.6.0 release for 19 November. PHP has not said whether it carries the advisory.
- 11 Nov 2026
We re-checked: no full PHP advisory, no PHP advisory on GitHub for the id, no CVE.org or NVD record, and no CISA KEV entry (version 2026.11.10).
What to do
-
Turn off session upload progress
Set session.upload_progress.enabled=0 in php.ini, the FPM pool or the server configuration, then restart every PHP worker. PHP's advisory for CVE-2026-109619 says to set it administratively and restart every worker. PHP's 21 October security note adds that the setting must apply before request parsing, so do not rely on ini_set() or FPM .user.ini.
-
Check your setup
Run php -i | grep session.upload_progress.enabled and php -i | grep session.serialize_handler on each server that runs PHP; both only read settings. The command line may read a different php.ini than your web server, so also check the file and FPM pool the web server loads.
-
Search your code for the handler switch
Search your code and configuration for session.serialize_handler and for ini_set calls that change it. A switch to php that runs before session_start() is the case PHP describes.
-
Test your upload forms
Turning the feature off stops any page that reads upload progress from the session, such as a progress bar, from working. Test the forms before and after the change.
-
Apply the PHP2Shell updates
Update PHP to 8.5.12, 8.4.27, 8.3.36 or 8.2.35 if you have not yet. These fix CVE-2026-109618 and CVE-2026-109619. PHP has not said they fix CVE-2026-115560.
-
Watch for the full advisory
PHP will publish a full advisory for CVE-2026-115560 with the next regular bugfix release. It has not done so as of 11 November 2026. Update when it appears, and keep upload progress off if you do not need it.
What Brandefense can do
- Scan your domain in Brandefense Atlas, free
Atlas checks public sources for leaked credentials, phishing domains, dark web mentions and data sales, then gives your domain a risk grade. Free, no sign-up.
- Vulnerability intelligence platform
Brandefense Vulnerability Intelligence follows which vulnerabilities attackers are using, so your team can patch what is under attack first.
Frequently Asked Questions
Is CVE-2026-115560 patched?
Not yet. As of 11 November 2026 PHP has released no fix and no full advisory. It says it handles the issue in its regular release cycle, and its note does not say the 21 October releases fix it.
Does PHP 8.5.12 fix CVE-2026-115560?
PHP has not said so. PHP 8.5.12, 8.4.27, 8.3.36 and 8.2.35 fix CVE-2026-109618 and CVE-2026-109619. For this id PHP names a setting, session.upload_progress.enabled=0, as the control.
Am I affected if I use WordPress or another popular application?
Only if the application sets the serialize handler to php_binary or php_serialize and then switches it to php at runtime before session_start(), with upload progress on. PHP says applications that never change the handler can keep the feature on. Check your own code.
Is CVE-2026-115560 being exploited?
No source we read confirms exploitation. PHP's advisory does not mention it and calls the setup unlikely in practice. The id is not in the CISA KEV catalog (checked 11 November 2026). Authors of public GitHub repositories claim lab proofs of concept, which we have not run.
Is CVE-2026-115560 a use-after-free?
PHP's note does not say so. It names no bug class and describes a session serialize handler that is switched at runtime. Treat the class as unconfirmed until the full advisory is out.
Is this the same as PHP2Shell?
No. PHP2Shell is CVE-2026-109618 and CVE-2026-109619, fixed on 21 October. The mitigation overlaps, and sources differ on which id covers which upload-progress path.
Is there a CVE record or CVSS score yet?
Not yet. On 11 November 2026 CVE.org returned no record for the id and the NVD had no entry, so there is no CVSS score.
When will PHP publish the full advisory?
PHP says it will come with the next release and gives no date. PHP 8.6.0 is planned for 19 November, but PHP has not said it will carry the advisory.
Sources
- Informational advisory: Session upload progressPHP.net
- Security advisory: Critical remote code execution vulnerabilities, update nowPHP.net
- GHSA-6wmf-4rv5-p3rp: RCE via stale global statePHP on GitHub
- Session upload progressPHP manual
- PHP2Shell vulnerabilitiesVulnCheck
- Security advisories for php-srcPHP on GitHub
- Known Exploited Vulnerabilities catalogCISA