Security operationsAnalysis
Every critical fix shipped between 20 and 29 October 2026 across PHP, Node.js, Oracle, Java, Fortinet and EDK II firmware, counted from the advisories and put in patch order.
Between 20 and 29 October 2026 the three runtimes under most enterprise web estates, PHP, Node.js and Java, all shipped critical security fixes within two days of each other. Oracle shipped its quarterly update in the same window, a firewall vendor shipped fixes before announcing what they were, and a firmware bug turned PXE booting into a risk. A team with one change window this month has to choose an order. This piece sets out what each fix is, how much of it is exposed, and the order we would patch in.
The calendar is unusual on its own. PHP and Node.js released fixes on 21 October; Oracle’s Critical Patch Update came the day before, and its out-of-cycle Java alert the day after.61013 Speed is the second unusual thing. Amazon’s MadPot honeypot logged a PHP2Shell attempt on 17 October, four days before the vulnerabilities were public.3 CISA added both PHP CVEs to its Known Exploited Vulnerabilities catalogue on 26 October and the Brotli bug behind Node2Shell on 27 October. It set a federal due date of 29 October for PHP and 10 November for Brotli.12
Fix to ‘known exploited’ took five days for PHP and six for Brotli
Disclosures, fixes and exploitation signals across the late-October patch cluster, 17 to 29 October 2026 (UTC dates)
| Date | Event | Detail |
|---|---|---|
| 17 Oct 2026 | First PHP2Shell probe | Amazon MadPot honeypot, from a commercial anonymiser, four days before disclosure |
| 20 Oct 2026 | Oracle CPU; PHP leak | 1,295 Oracle patches; PHP2Shell details leak ahead of the planned 22 October release |
| 21 Oct 2026 | PHP, Node.js, Java fixes | PHP 8.2.35 to 8.5.12; Node.js 22, 24 and 26 releases; Oracle Java alert CVE-2026-91403 |
| 22 Oct 2026 | Fortinet, EDK II | Fortinet hardening release, CVEs held to 10 November; EDK II PXE advisory, CVSS v4 9.5 |
| 26 Oct 2026 | PHP2Shell in KEV | Both CVEs added; federal due date 29 October |
| 27 Oct 2026 | Brotli in KEV | CVE-2026-111497 added; Defused decoys see Oracle EBS exploit probes the same morning |
| 28 Oct 2026 | Hetzner: do not reboot | PXE-booting hosts told to avoid reboots and block inbound ICMP |
| 29 Oct 2026 | GitLab, Cisco ASA in KEV | Two more exploited bugs, each with a three-day federal deadline |
Source: Amazon via The Hacker News; Oracle CPU advisory; PHP, Node.js and Fortinet releases; TianoCore advisory; CISA KEV feed; BleepingComputer; Hetzner status page · as of 30 October 2026
Read the discovery credits and AI turns up on both sides. Researchers from Calif, OpenAI and Wiz found PHP2Shell.3 OpenAI’s Codex Security reported the Brotli bug to Node.js.6 An Anthropic and a Google researcher found the EDK II flaw.15 Fortinet attributes its fixes to its “frontier AI-assisted security testing program”.14 On the attacking side, Cyfirma reports a suspected North Korean operator group using a local AI model to rank public PHP2Shell exploits before testing them by hand.5
CVE-2026-109618 and CVE-2026-109619 sit in PHP’s memory management and error handling, code that nearly every request touches. Both allow unauthenticated remote code execution and both are scored 9.2.3 The fixed builds are 8.5.12, 8.4.27, 8.3.36 and 8.2.35. PHP 8.1 and older get no new release.4 A reload that keeps old workers alive leaves the stale state in place, so restart every PHP worker after updating.5 Firewalls are not a safe assumption either. Palo Alto confirmed that PAN-OS and Panorama are affected, through PHP in the management web interface and XML API.21
99.998%
of 2,608,039 internet-facing PHP hosts that VulnCheck judged vulnerable or likely vulnerable on 21 October
VulnCheck counts each host once and calls every figure a floor. Hosts with no visible version are counted as likely vulnerable.4
More than eight in ten exposed PHP hosts run an end-of-life branch or hide their version
Internet-facing PHP hosts by branch, share of 2,608,039, VulnCheck scan of 21 October 2026
| Value (%) | Share | |
|---|---|---|
| No version shown | 43.4 | 43% |
| PHP 3.x to 7.3: no fix at all | 27 | 27% |
| PHP 7.4 to 8.1: source backports only | 15 | 15% |
| PHP 8.2 to 8.5: fix released | 14.6 | 15% |
Source: VulnCheck, PHP2Shell vulnerabilities (27%, 15%, 43.4%); supported-branch share computed by TechBag as the remainder · as of 26 October 2026 · VulnCheck gives 700,000+ hosts (27%) on 3.x to 7.3 and just under 400,000 (15%) on 7.4 to 8.1; its rounded counts overlap slightly, so the shares are used
The exploitation and disclosure story, including the embargo Chainguard broke and what the mod_php worst case means, is in our separate piece, the PHP2Shell deep dive. For ordering purposes, one fact is enough: PHP2Shell is the only item this month with a three-day federal deadline and a 2.6-million-host footprint.14
The Node.js release of 21 October fixed ten CVEs across the 22, 24 and 26 lines: four High, three Medium and three Low. Four of the ten are incomplete fixes of, or a regression after, earlier CVEs.6 The one that matters is CVE-2026-111497, an out-of-bounds write in the Brotli decoder. Node.js says it can lead to “a crash, disclosure of process memory, or remote code execution” and rates it High. Google, which assigned the CVE, scores it 9.2 under CVSS v4.67
Reachability is what makes it a priority. Most Node.js code never imports a Brotli library, and it does not have to. According to Akamai, the built-in fetch() decompresses Brotli responses automatically, and Express 5 with body-parser 2 decompresses request bodies sent as Content-Encoding: br by default. Akamai says its telemetry shows affected Node.js versions on 61% of networks, without saying how it measured that.8
One malformed compressed body reaches the decoder through defaults, and the same decoder ships in other runtimes
How CVE-2026-111497 is reached and where else it lives, as published 21 to 27 October 2026
A compressed body arrives
Any client sends Content-Encoding: br to an Express 5 app, or a server answers a fetch() call with Brotli.
Decompression runs by default
body-parser’s inflate option is on unless you turn it off; fetch() has no switch at all.
The decoder writes past its buffer
An invalid block switch is treated as needing more input, so the decoder keeps appending to an eight-byte buffer.
Same bug, other runtimes
Bun, .NET, Python’s brotli and brotlicffi, Envoy and Istio, brotli4j and Red Hat packages are all named.
Source: Node.js security release; Akamai; Rapid7; Microsoft .NET advisory; Bun v1.4.4 release · as of 27 October 2026
So the inventory question is wider than “which Node.js versions do we run”. Microsoft published .NET 8.0.33, 9.0.22 and 10.0.14 for the same CVE on 25 October.9 Bun shipped 1.4.4 on 22 October.22 Rapid7 lists the upstream Brotli ranges as 1.0.3 before 1.0.10, 1.1.0 before 1.1.1 and 1.2.0 before 1.2.1, which is the string to search a software bill of materials for.7 Node.js offers no workaround. If you cannot upgrade an Express service today, setting inflate: false makes it reject compressed bodies with HTTP 415.8 The same release updated Node’s bundled root certificates for the eMudhra intermediate CA compromise, which we cover in eMudhra’s private key was the number 4.6
Oracle’s October Critical Patch Update, published 20 October, contains 1,295 new security patches.10 Volume is not the useful measure. Severity is, and severity is concentrated in a few product families.
Fusion Middleware and Communications hold 70 of the 112 critical-rated patches; Java SE holds none
Oracle Critical Patch Update, October 2026: new security patches by product family, split at CVSS 3.1 base score 9.0
| CVSS 9.0 or higher | Below 9.0 | |
|---|---|---|
| Fusion Middleware | 40 | 166 |
| E-Business Suite | 4 | 190 |
| Database products | 14 | 112 |
| Siebel CRM | 3 | 119 |
| Communications | 30 | 80 |
| PeopleSoft | 2 | 107 |
| JD Edwards | 5 | 97 |
| MySQL | 4 | 94 |
| Java SE | 0 | 55 |
| All other families | 10 | 163 |
Source: Oracle Critical Patch Update Advisory, October 2026, risk matrices; TechBag count · as of 26 October 2026 · Database products include Essbase, REST Data Services, GoldenGate and APEX, as Oracle groups them. Counts are risk-matrix rows; 112 rows cover 95 unique CVEs
The EBS bug drawing attention is CVE-2026-101767, an unauthenticated SQL injection in the Thin Client Framework servlet at /OA_HTML/AppsTCFServer. It chains to operating-system commands, affects versions 12.2.3 to 12.2.15, and the default EBS URL firewall allows the endpoint. Horizon3 reported it to Oracle on 24 July.11 On 27 October Defused’s EBS decoys recorded “exploratory exploits” against it, and Shadowserver tracks more than 670 internet-exposed EBS instances, most of them in the United States.12 It was not in the KEV catalogue as of 29 October.1 If you cannot patch this week, Horizon3’s interim step is to remove that servlet from the URL firewall allowlist.11
Java is where the calendar misleads. The CPU’s Java SE section has 55 patches, 49 of them exploitable over the network without credentials, but none critical: the top score is 7.5.10 The serious Java fix arrived on 21 October as Security Alert CVE-2026-91403, a 9.1 in JSSE. That update distrusts the eMudhra intermediate CA certificates. It lists Java SE 8u511, 11.0.33, 17.0.21, 21.0.13, 25.0.5 and 27.0.1, and GraalVM, as affected.13 Those versions are newer than the ones the CPU lists as affected (8u503, 11.0.32.1 and so on), so a team that patched Java on 20 October still needs the next update.10
Fortinet released FortiOS 8.0.2, 7.6.8, 7.4.13 and 7.2.14 on 22 October, with FortiManager, FortiAnalyzer, FortiMail and FortiAuthenticator alongside. CVE IDs and scores follow on 10 November, Fortinet’s next Patch Tuesday.14 For 19 days you have a version table and the vendor’s word that it includes “critical and high-severity fixes”. That is enough to act on.
EDK II, the open-source reference UEFI code that much commercial firmware is built on, has CVE-2026-97631 (CVSS v4 9.5). While a machine PXE-boots, an oversized ICMP error message overflows a 504-byte field and can run attacker code “before Secure Boot or measured boot has verified or measured any OS component”.15 The fix was merged on 15 October, a week before the 22 October advisory, and the pull request named the CVE. On 28 October Hetzner told customers to avoid rebooting PXE-booting hosts and to block inbound ICMP during reboots.16
jackson-databind, the JSON library inside most enterprise Java, published CVE-2026-110879 on 20 October: a 9.8 bypass of its polymorphic type validator. It is an incomplete fix of an earlier CVE and is fixed in 2.18.12, 2.21.8, 2.22.4, 3.1.8 and 3.2.4. It applies where class-name polymorphism is in use: configured default typing in 2.x or 3.x, or annotation-based class-name type IDs, which a default 3.x mapper accepts. An application that does neither is not on this path.17 And LiteLLM’s poisoned 1.107.0 release on 21 October belongs on the same list. We covered it in Two CERT-In advisories in six days.
Patch by evidence of exploitation and exposure, not by CVSS score or vendor size
TechBag's recommended patch order for the 20 to 29 October 2026 cluster
Step 1 of 6
1. Internet-facing PHP
In KEV, three-day federal deadline. Include appliances with a PHP management UI. Restart every worker after updating.
Source: CISA KEV feed; PHP, Node.js, Fortinet, Oracle, TianoCore and FasterXML advisories; TechBag analysis · as of 30 October 2026
Sources
Related on TechBag: the vulnerability management guide covers the scanners that find these runtimes; the RMM and patch guide covers the tools that push the fixes; the Fortinet hub maps the products the hardening release touches.
Disclosure. TechBag is a software reseller: it earns a margin when a reader buys through it, including from vendors named here. The analysis is TechBag’s own; no vendor paid for or saw this piece before publication. Facts are labelled reported, TechBag count or our view.