PHP2Shell: what we know about CVE-2026-109618 and CVE-2026-109619
Two critical PHP flaws, who is seeing attacks, how big the exposure is and what to do first.
CybersecurityAman Singh23 October 202613 min read
Contents
On 21 October 2026 the PHP project shipped an emergency release for two bugs that let an unauthenticated attacker run code on a server. PHP runs about 69 percent of the websites whose server language anyone can identify1. So when CISA, the UK's NCSC and CERT-EU all told people to patch or take the system offline2, 3, 4, governments from the Netherlands to Australia did exactly that to some of their own sites5, 6.
I read PHP's advisories, the write-ups from the three teams that found the bugs, the commit that fixes them, a dozen vendor posts and the government alerts. This post pulls that together. It has nine charts and a numbered reference for every claim that needs one.
The research cut-off is 22 October. The story is still moving, so check the references before you act on anything here.
- Reported. Stated by the PHP project, a government body, a vendor or a named publication, with the source cited. A vendor's statement is that vendor's own account, not an independent finding.
- Claimed. Said by one party and not confirmed by anyone else.
- My analysis. My reading, reconstruction or recommendation. The chart scores and the ATT&CK mapping are mine.
The short version
| The bugs | CVE-2026-109618, "RCE via OOM corruption"7. CVE-2026-109619, "RCE via stale global state"8. |
| Who is affected | Any PHP version from 5.4 up, as far as the vendors say9, 10. Apache with mod_php is the worst case11. |
| Needs a login | No. The request comes over the network and needs no user interaction7. |
| Fixed in | 8.5.12, 8.4.27, 8.3.36 and 8.2.35, released 21 October. Source-only backports exist for 7.4, 8.0 and 8.1. Nothing from upstream for 7.3 and older11. |
| Attacks | Attempts since 17 October12. No published, confirmed breach yet. CISA's catalog lists neither CVE13. |
The severity score depends on who you ask, and the spread is wider than you would expect for one pair of bugs.
Loading chart
Show the data
| Source | Score |
|---|---|
| PHP CNA, CVSS v4.0 | 9.2 |
| NVD, CVSS 3.1 | 9.8 |
| Red Hat, SUSE, Amazon, CVSS 3.1 | 8.1 |
| The leaked score (wrong) | 10 |
PHP's own CNA scores both at 9.2 on CVSS v4.0, and NVD says 9.8 on CVSS 3.114. Red Hat, SUSE and Amazon Linux say "Important" at 8.1. Red Hat's argument is that reliable exploitation needs precise heap work, and that its default PHP-FPM setup exits workers on early-init failure15. The 10.0 that circulated on 20 October was wrong16. I would plan around the high scores. A vendor rating tells you about its own build, not about the PHP binary you installed by hand.
What broke
Both bugs come from one habit. When PHP runs out of memory mid-request, it aborts with a longjmp, which internally is zend_bailout. The jump skips whatever the interrupted code was doing. Request shutdown then cleans up whatever state it finds7, 8. Half-built state looks like finished state, and PHP trusts it.
CVE-2026-109618 is the first version of that mistake. An out-of-memory error interrupts PHP while request data is only partly set up, and cleanup treats the invalid data as valid7. CVE-2026-109619 is the second. Request-owned state survives after its memory is freed, and a later request on the same worker uses it8.
PHP's advisory is blunt about mod_php. An unauthenticated request "can trigger the attack before any application code runs"11. There is no plugin to audit and no application code to blame, and a WAF written in PHP never sees the request.
Wiz found four separate bugs under the two CVEs and demonstrated unauthenticated code execution against the stock WordPress, Drupal and Joomla container images9. The chart below scores them on six things a defender cares about. Read each line left to right.
Loading chart
Show the data
| Bug | Pre-auth reach | Before app code | On by default | Public evidence | Easy to exploit | Blast radius |
|---|---|---|---|---|---|---|
| 1 Upload-progress unserializer UAF | 5 | 5 | 4 | 4 | 2 | 5 |
| 2 Process-memory disclosure | 5 | 5 | 5 | 4 | 4 | 3 |
| 3 Fatal-backtrace UAF (8.5 only) | 4 | 3 | 2 | 3 | 2 | 5 |
| 4 OPcache type confusion | 4 | 2 | 3 | 1 | 1 | 5 |
The memory leak is the one that makes the rest practical. Wiz says a leftover pointer lets the next multipart request copy reclaimed heap memory into a PHPSESSID response cookie, even if the application never calls session_start()9. JPCERT/CC lists abnormally long or malformed PHPSESSID cookies among its indicators17. If a host was exposed, assume that any secret that passed through its workers could have been read. That includes session cookies and API keys, not only what sits on disk.
Sources disagree on which CVE covers which of Wiz's four bugs. Wiz's blog table, Wiz's own php2shell.com and PHP's advisories all differ in places. I use PHP's mapping, since one release fixes everything. It only matters when a scanner or ticket calls one CVE "the info-leak one".
They also disagree on affected versions. The CVE records list 8.2 and up, yet PHP shipped backports for 7.4, 8.0 and 8.1, and Google and Wiz say 5.4 through 8.511, 10, 9. I treat everything from 5.4 up as affected until someone shows me otherwise.
How the fix works
The fix commit is by Arnaud Le Blanc, authored on 18 October. It adds a soft memory limit that queues the usual error instead of jumping out mid-allocation. It also adds a hard limit that prints "Hard memory limit exhausted" and calls _exit(137) with no shutdown handlers. The new INI setting is memory_hard_limit_percent, which defaults to 200 percent of memory_limit, or the limit plus 1 GiB when the limit is above 1 GiB18. An engine change this deep brings regressions, and the project filed one against the hard exit within hours of the release19.
Who knew, and when
The bugs are old. Bug 78876, an out-of-memory crash on long multipart variables, was filed in 2020 and left alone because nobody had shown it was exploitable20. A 2024 audit saw the first signs, and competing fixes stalled for months16, 21.
The recent timeline starts on 30 July, when Calif began a PHP audit. Calif reported an unconditional code execution bug on 11 August, and OpenAI reported the same root cause the same day. Wiz found its first bug on 19 August, reported on 24 August and heard back from PHP on 21 September16, 20, 9.
Loading chart
Show the data
| When (UTC) | Lane | Event |
|---|---|---|
| 2026-10-17 12:00 | Attacker traffic | AWS MadPot: first attempt (time not published) |
| 2026-10-18 12:00 | Leaks and disclosure | Fix commit authored (18 Oct) |
| 2026-10-20 15:00 | Leaks and disclosure | CVE IDs leak with the wrong CVSS |
| 2026-10-20 19:30 | Leaks and disclosure | PHP posts advance notice |
| 2026-10-20 20:00 | Leaks and disclosure | Calif PoC video posted by mistake |
| 2026-10-21 02:00 | Attacker traffic | AWS: multiple actors |
| 2026-10-21 03:02 | Defender moves | Cloudflare WAF rules on for every plan |
| 2026-10-21 07:41 | Defender moves | Chainguard ships fixed images early |
| 2026-10-21 07:43 | Vendor claims | Cloudflare reports early attacks |
| 2026-10-21 08:36 | Attacker traffic | ELLIO: first request |
| 2026-10-21 08:37 | Attacker traffic | VulnCheck canary: scanner UA php2shell-scan |
| 2026-10-21 13:34 | Defender moves | GHSAs published |
| 2026-10-21 14:00 | Leaks and disclosure | Official release time |
| 2026-10-21 14:19 | Vendor claims | watchTowr: active exploitation |
| 2026-10-21 14:38 | Attacker traffic | ELLIO: Mirai-style loader |
| 2026-10-21 17:22 | Attacker traffic | VulnCheck canary: shell plant attempt (failed) |
| 2026-10-21 23:08 | Attacker traffic | ELLIO: web-shell write |
| 2026-10-22 03:46 | Attacker traffic | ELLIO: booter, ASPX shell, Go RAT |
| 2026-10-22 05:30 | Vendor claims | VulnCheck: weaponized exploit (customers only) |
Then the embargo came apart in three places. The CVE IDs leaked around 15:00 UTC on 20 October with the wrong score. Calif posted a proof-of-concept video by mistake. Chainguard shipped fixed container images at 07:41 UTC on 21 October, more than six hours before the coordinated release, and anyone could diff them against the old ones16. Cloudflare reported early attacks at 07:43, two minutes after those images went public. Nothing I read links the two, so treat the timing as an observation, not a finding.
Is anyone being attacked?
Yes, there are attempts. Nobody has published a confirmed breach. Both statements are true at once.
Reported. Amazon's MadPot honeypot logged the first attempt on 17 October, four days before disclosure. Amazon says the bugs are now "broadly exploited" and adds that it is "unclear if any of these attempts would have succeeded"12. ELLIO logged a first request at 08:36 UTC on 21 October, a Mirai-style loader at 14:38 and a web-shell write at 23:0822. VulnCheck's canaries caught scanners with php2shell-scan user agents, and one attempt to plant a web shell through the upload-progress session file. That attempt failed23. Arctic Wolf saw id checks followed by wget pulls, with Mirai-derived botnet samples on the other end. It says its data does not show any sample running24. watchTowr says its honeypots saw exploitation from 21 October, with no payloads or paths25.
Reported, the other way. CISA said it had not observed exploitation, and its catalog lists neither CVE2, 13. Bitdefender saw no attempts in its own telemetry26.
Reported, and new. VulnCheck says it has a working exploit for CVE-2026-109618 on x86-64 with ASLR on, for PHP 8.4.10 through 8.4.26. On ARM64 the leak works but code execution does not yet. It sells the exploit to its own customers, so nobody outside can check it23. Earlier reports said exploitation needed ARM64 or ASLR switched off27. That is no longer the safe assumption.
My analysis. Scanning and attempts are certain, and plenty of vendors see them. A published confirmed compromise does not exist yet. That is weak comfort, because a successful hit can return HTTP 200 with no crash28 and the memory leak leaves almost nothing behind. The agencies that say "none observed" mean a confirmed breach. The ones that say "aware of reports" are counting honeypot attempts. Both are right.
In ATT&CK terms the traffic so far is T1190, exploiting a public-facing application, then T1105, ingress tool transfer, and in one case T1505.003, a web shell29. Those are my labels.
One warning. Hundreds of proof-of-concept repositories appeared on GitHub within hours, and VulnCheck says very few are legitimate exploits23. Some are pranks26. Don't run any of them on a machine you care about.
How big is the exposure?
Depends who counts, and what.
VirusTotal found about 5.1 million PHP IP addresses. About 1.1 million disclose a version, with roughly 272,000 on 8.2 to 8.5 and roughly 758,000 on end-of-life releases30. VulnCheck counts 2,608,039 PHP hosts. Of those, 1,474,985 advertise a version older than the fixed build and 1,133,054 hide it entirely23.
Loading chart
Show the data
| Group | Hosts |
|---|---|
| Advertises a version below the fixed build | 1,474,985 |
| Hides its version | 1,133,054 |
| Total | 2,608,039 |
The hidden ones worry me most. A server that hides its version cannot be scored from outside, and it is the kind of server that gets forgotten. Distro builds also keep old version strings after they are patched, so an old number does not always mean a vulnerable host31.
The same VulnCheck data names the applications behind the hosts it could identify.
Loading chart
Show the data
| Application | Hosts |
|---|---|
| WordPress | 469,699 |
| Laravel | 124,866 |
| Joomla | 26,591 |
| Drupal | 24,116 |
| Magento | 3,735 |
| MediaWiki | 2,116 |
| Symfony | 2,104 |
| phpBB | 1,391 |
| WHMCS | 59 |
WordPress is the elephant at 469,699 hosts. Laravel is the surprise at number two with 124,86623. VirusTotal puts WordPress nearer 538,00030, so even the application counts depend on the method.
The totals do not line up either. One source says 1.5 million, another says 22.6 million.
Loading chart
Show the data
| Source | Count | Counts |
|---|---|---|
| Unit 42 | 22,600,000 | instances |
| VirusTotal | 5,100,000 | ips |
| Modat | 4,384,302 | services |
| VulnCheck | 2,608,039 | hosts |
| Shodan | 1,624,000 | mixed |
| Censys | 1,500,000 | hosts |
They count different things. VirusTotal counts IPs. VulnCheck counts hosts. Modat counts services. Unit 42 counts instances32, and Shodan splits its count between versions33. Pick one unit before you compare any two of these.
How the fix reaches you
Three finders, one security team and a long list of downstream builders. The widths in this diagram are illustrative, but the shape is real.
Loading chart
The patched 8.2 to 8.5 releases fan out fast. Older branches get a backport at best, and 7.3 and older get nothing from upstream. Here is where the main platforms stood on the morning of 22 October. It changes hourly.
| Platform | Status |
|---|---|
| Debian | Fixed packages for trixie and bookworm. Forky still vulnerable34. |
| Ubuntu | Fixes for supported releases and for Ubuntu Pro releases back to 14.04. The fixed 24.04 build is 8.3.6-0ubuntu0.24.04.13, so the number looks old31. |
| Red Hat | Rated Important. RHEL 8, 9 and 10 and UBI images are affected, with errata partly out15. |
| AlmaLinux | Production builds from 21:15 UTC on 21 October. Check with rpm -q, since php -v keeps the upstream number35. |
| Amazon Linux | AL2023 php8.2 to 8.5 fixed. AL2 core php and AL2023 php8.1 have no fix planned36. |
| cPanel | EasyApache 4 release 25.91 updates ea-php82 to 85 and adds backports for ea-php74, 80 and 8137. |
| Official Docker image | Fixed tags pushed between 18:59 and 22:10 UTC on 21 October. riscv64 lagged38. |
| Remi repository | No update on release day. PHP told users to switch to distro packages or build from source11. |
| Google Cloud | App Engine standard on 8.2 and up patched automatically. Cloud Run needs a rebuild unless automatic base-image updates are on. GKE and App Engine flexible need a redeploy10. |
| AWS and Azure | AWS has a new Elastic Beanstalk platform and a PHP WAF rule group v2.339. Azure Front Door has managed rule 9900600140. |
| Laravel Forge | Automatic updates do not patch PHP. Update each version, then restart workers41. |
A lot of this was prepared before anyone outside the room could read the advisory. Wiz thanks Automattic, Akamai, AWS, Cloudflare, Fastly, Google, Imperva, Microsoft and Vercel for pre-disclosure work9. OpenAI says it also briefed ONCD and CISA42.
Loading chart
I think that part worked. The part that did not work was keeping it quiet. Vendors, finders and governments held a secret for weeks, then lost it in about a day.
What the governments said
Every agency says to patch now. They split on three things, and the chart shows how. Hotter cells are stronger statements.
Loading chart
Show the data
| Agency | Offline advice | Exploitation claim | Hunting advice |
|---|---|---|---|
| ASD ACSC (AU) | isolate or consider | none observed | yes |
| NCSC (UK) | isolate or consider | none given | yes |
| NCSC (NZ) | isolate or consider | aware of reports | yes |
| CISA (US) | take offline | none observed | no |
| FBI and NSA (US) | take offline | none given | yes |
| CERT-EU | isolate or consider | none given | no |
| CCCS (CA) | isolate or consider | none observed | yes |
| BSI (DE) | none | none given | no |
| NCSC-NL | none | none observed | no |
| JPCERT/CC (JP) | none | none given | yes |
| CSA (SG) | none | widespread attempts | no |
CISA and the FBI say to take the system offline if you cannot update2, 43. The UK's NCSC says to consider it3. NCSC New Zealand is "aware of reports of active exploitation"44, while Canada identified a proof of concept but no active exploitation45 and Singapore reports widespread attempts46. JPCERT/CC warns that attacks may leave no trace in logs17. Some governments acted on their own sites. Wikimedia took tools offline47. The Dutch government pulled several sites5, and in Australia the ABS and Jobs and Skills Australia went offline48, 6.
AI on both sides
Every team that found these bugs says AI helped. Calif used an LLM companion and an agent for source review20. Wiz used its Atlas researcher with Gemini 4 Argon and GPT-5.6 Sol, and says one researcher did in a week what would have taken a world-class team months9. OpenAI says that, to its knowledge, frontier AI found the bugs before attackers did42.
That is a claim about the finders, and it is plausible. I have not found published evidence that attackers used AI on the exploits. watchTowr called the early proof-of-concepts "vibecoded", which is an impression, not forensics49.
The cost shift is what I take from it. The PHP Foundation says its volunteer security team has handled 15 CVEs and more than 100 invalid or duplicate reports since 1 July16. AI finds bugs faster, and open-source maintainers are the ones who triage the pile.
OpenAI also asks a question I want to flag. It asks when governments or operators should use a vulnerability to patch systems they are authorised to manage after losing administrative access. It floats "internet-wide always-on scanning" that either notifies owners or patches the system42. It is a proposal for comment. I would want a clear answer on consent and liability before anyone builds it.
What I would do on day one
- Inventory every PHP runtime. Include PHP inside appliances and vendor products. NCSC-NL keeps a cross-vendor list50. Check the version inside each container, and read the package changelog before you trust a version string.
- Patch, then restart every worker. The window closes when the worker restarts, not when the package installs51.
- If you cannot patch today, take it offline. That is what CISA, NCSC and CERT-EU say2, 3, 4. The alternative is PHP's interim settings, which are
session.upload_progress.enabled=0,memory_limit=-1that apps cannot override, a lowpost_max_sizeand a cgroup cap per worker. SkipRLIMIT_AS, which can trigger the vulnerable path. PHP says plainly that none of this makes an installation safe11. - Hunt back to 17 October. Look for "Unknown on line 0" memory errors, Apache's AH00052 crash entries, very large multipart requests, odd
PHPSESSIDcookies, and shell processes whose parent is the web server or PHP-FPM26, 12. Preserve logs before you upgrade3. - Rotate secrets that passed through PHP memory. That means session keys, framework app keys, WordPress salts, database credentials and upstream API tokens.
- Leave the public proof-of-concepts alone. Detection works better from the behaviour side, such as a web server spawning a shell52.
The Australian angle
ASD's ACSC says all PHP versions from 5 onwards may be affected, and that it was not aware of successful exploitation in Australia53. If your PHP host held personal information and you find signs of compromise, the Notifiable Data Breaches scheme applies. You have 30 days to assess whether it is an eligible breach, and if serious harm is likely you notify the OAIC and the people affected54. The memory-disclosure bug makes credentials of users who logged in during the exposure window a realistic category to assess. Other regimes, such as ransomware payment reporting and critical-infrastructure rules, run their own clocks, so check yours.
What is still open
- Will a public exploit follow VulnCheck's, and will it reach other branches?
- Has any vendor confirmed a real compromise?
- How complete is the fix? Researchers on oss-security raised incomplete-fix claims for 8.5.12, and PHP called them unrelated.
- How exposed are RoadRunner, Swoole and the CLI? I found no source that addresses them.
- Does PHP-FPM allow a full exploit? The advisory says no complete FPM chain was shown for CVE-2026-109618, while Wiz and the Foundation say FPM was confirmed through application-level code paths7, 16.
References
- W3Techs. Usage statistics of PHP as a server-side programming language. 22 October 2026. w3techs.com
- CISA. Critical vulnerabilities in PHP require immediate patching. 21 October 2026. cisa.gov
- NCSC UK. Critical security issue affecting PHP. 21 October 2026. ncsc.gov.uk
- CERT-EU. Security Advisory 2026-018. 21 October 2026. cert.europa.eu
- Rijksoverheid. Government sites taken offline preventively. 21 October 2026. rijksoverheid.nl
- Information Age (ACS). Government sites go down after AI finds critical PHP vulnerabilities. 22 October 2026. ia.acs.org.au
- php/php-src. GHSA-w8hw-w9fx-j79w, RCE via OOM corruption (CVE-2026-109618). github.com
- php/php-src. GHSA-6wmf-4rv5-p3rp, RCE via stale global state (CVE-2026-109619). github.com
- Wiz Research. PHP2Shell: AI uncovers critical RCE vulnerabilities affecting 70% of the Internet. 21 October 2026. wiz.io
- Google Cloud. Responding to core PHP vulnerabilities CVE-2026-109618 and CVE-2026-109619. Updated 22 October 2026. cloud.google.com
- PHP Group. Security advisory and interim mitigations. 20 and 21 October 2026. php.net
- Amazon Threat Intelligence. PHP2Shell exploitation prior to public disclosure in MadPot. aws.amazon.com
- CISA. Known Exploited Vulnerabilities catalog, version 2026.10.21. cisa.gov
- NIST NVD. CVE-2026-109618. services.nvd.nist.gov
- Red Hat. RHSB-2026-013. 21 October 2026, updated 22 October. access.redhat.com
- PHP Foundation. Today's PHP security release and how we're strengthening PHP security. 21 October 2026. thephp.foundation
- JPCERT/CC. JPCERT-AT-2026-0033. 22 October 2026. jpcert.or.jp
- php/php-src. Commit 31c0ea7, Avoid state corruption via bailout. Authored 18 October 2026. github.com
- php/php-src. Issue 24492, hard OOM exit regression. 21 October 2026. github.com
- Calif. PHP2Shell. 21 October 2026. calif.io
- Quarkslab for OSTIF and the PHP Foundation. PHP security audit report 24-07-1730-REP v1.4. 14 March 2025. thephp.foundation
- ELLIO. PHP2Shell: what we observed and what to do. ellio.tech
- VulnCheck. PHP2Shell vulnerabilities: CVE-2026-109618 and CVE-2026-109619. Updated 22 October 2026. vulncheck.com
- Arctic Wolf. PHP2Shell: critical PHP vulnerabilities enable unauthenticated remote code execution. 22 October 2026. arcticwolf.com
- watchTowr. PHP remote code execution (PHP2Shell). 21 October 2026. watchtowr.com
- Bitdefender. Technical advisory: PHP2Shell pre-auth RCE. 22 October 2026. bitdefender.com
- Tanium. PHP2Shell: responding to CVE-2026-109618 and CVE-2026-109619. tanium.com
- CrowdStrike. CrowdStrike protects customers from PHP RCE zero-days. 21 October 2026. crowdstrike.com
- MITRE. ATT&CK Enterprise matrix. attack.mitre.org
- VirusTotal. Sizing the PHP exposure window for CVE-2026-109618 and CVE-2026-109619. October 2026. blog.virustotal.com
- Ubuntu. PHP2Shell vulnerability fixes available. 21 October 2026. ubuntu.com
- Palo Alto Networks Unit 42. Threat brief on CVE-2026-109618 and CVE-2026-109619. 21 October 2026. unit42.paloaltonetworks.com
- SOCRadar. PHP2Shell CVE-2026-109618 and 109619: affected versions and fix. socradar.io
- Debian security tracker. CVE-2026-109618. security-tracker.debian.org
- AlmaLinux. PHP2Shell blog post. 21 October 2026. almalinux.org
- Amazon Linux Security Center. CVE-2026-109618. explore.alas.aws.amazon.com
- cPanel. EasyApache 4 change log, release 25.91. 21 October 2026. docs.cpanel.net
- Docker Hub. Official php image tags. hub.docker.com
- AWS. Security Bulletin 2026-143-AWS. 21 October 2026. aws.amazon.com
- Microsoft. Addressing PHP2Shell: upgrade guidance and Azure WAF. 21 October 2026. techcommunity.microsoft.com
- Laravel Forge. PHP security release, October 2026. laravel.com
- OpenAI. Patch the Planet: global response coordination as agents uncover critical vulnerabilities. 21 October 2026. openai.com
- Newsweek. FBI issues advice as security issue hits global websites. Relays the FBI and NSA posts. newsweek.com
- NCSC NZ. CVE-2026-109618 and CVE-2026-109619 affecting PHP. 22 October 2026. ncsc.govt.nz
- Canadian Centre for Cyber Security. AL26-026. 21 October 2026. cyber.gc.ca
- CSA Singapore. Alert AL-2026-151. 21 October 2026. csa.gov.sg
- Wikimedia Diff. Impact of PHP vulnerabilities on Wikimedia tools and services. 21 October 2026. diff.wikimedia.org
- ABC News. PHP vulnerabilities and ASD. 22 October 2026. abc.net.au
- The Register. PHP devs publish critical bug fix as site owners warned to pull them offline if unpatched. 21 October 2026. theregister.com
- NCSC-NL. php2shell repository: detection, mitigation and product inventory. github.com
- Safeguard. After PHP2Shell: check if you are already compromised. 22 October 2026. safeguard.sh
- Elastic Security Labs. PHP2Shell detection coverage. elastic.co
- ASD's ACSC. Critical vulnerabilities in PHP. 21 October 2026, reviewed 22 October. cyber.gov.au
- OAIC. About the Notifiable Data Breaches scheme. oaic.gov.au
Topics: PHP2Shell, CVE-2026-109618, CVE-2026-109619, PHP vulnerability, PHP remote code execution, PHP RCE, PHP security update, PHP 8.5.12, PHP 8.4.27, PHP 8.3.36, PHP 8.2.35, mod_php, PHP-FPM, zend_bailout, session upload progress, MITRE ATT&CK T1190, incident response, vulnerability management, unauthenticated RCE, AI vulnerability discovery