On October 21, 2026, two runtimes you may be running in production shipped security patches on the same day. Node.js fixed 11 CVEs across its three supported release lines, and PHP announced fixes for two unauthenticated remote code execution vulnerabilities. CISA named the PHP issue “php2shell” and added both CVEs to its Known Exploited Vulnerabilities Catalog on October 26, which means real-world exploitation has already happened. This summary is assembled from each vendor’s official pages, which we checked on November 3, 2026.
What happened on October 21, 2026?
Two major security releases landed together: Node.js v22.23.4, v24.22.1, and v26.12.1, plus PHP 8.5.12, 8.4.27, 8.3.36, and 8.2.35. On the Node.js side, the official announcement lists 11 CVEs: four high severity, four medium, and three low, alongside dependency updates for c-ares, OpenSSL, SQLite, Undici, and ca-cert. The ca-cert update matters beyond Node itself: the compromised eMudhra intermediate certificate was pulled, and the TLS trust chain was refreshed on every supported line. On the PHP side, the official news archive labels these “Critical Security Releases” for two CVEs, with an advance notice published one day earlier, on October 20.
Why does php2shell count as the most urgent?
Because both bugs are unauthenticated RCEs scored CVSS v4.0 9.2, and both are already on the actively-exploited list. CISA explains that the pair, nicknamed “php2shell”, affects every PHP installation serving web requests: Apache with mod_php is considered highest risk, followed by PHP-FPM, php-cgi, FrankenPHP, and LiteSpeed.
The mechanisms differ but both end in code execution. In CVE-2026-109618, out-of-memory handling interrupts PHP while internal request data is only partially initialized; request cleanup then treats that incomplete data as valid. CVE-2026-109619 is sneakier: request-owned internal state can survive after its backing memory has been freed, and a later request handled by the same worker uses that stale state before normal initialization resets it.
The official PHP changelog shows both GHSAs fixed in 8.5.12, 8.4.27, 8.3.36, and 8.2.35, with limited source backports for PHP 7.4, 8.0, and 8.1. The PHP team wrote in its announcement that there are no complete mitigations and updating is the only safe choice. PHP 8.2 reaches end of life on December 31, 2026, so servers still on 8.2 should not stop at this version either.
What does CISA ask of teams operating PHP?
Five steps, none of which wait on another vendor. First, inventory every system running PHP; CISA notes PHP is often bundled inside other software and may not be directly visible. Second, patch immediately, prioritizing internet-facing systems, to 8.5.12, 8.4.27, 8.3.36, or 8.2.35. Third, for systems that cannot be patched yet or still run unsupported PHP 8.1 or earlier, CISA explicitly recommends taking them offline until they can be patched. Fourth, a web application firewall may provide interim protection, not a replacement. Fifth, watch for suspicious activity, especially PHP worker processes launching shells or downloading tools; CISA also published SIGMA detection rules for this.
How serious are the 11 CVEs in Node.js?
The four high-severity ones deserve individual attention, because their patterns repeat across Node.js security releases. CVE-2026-111497 is an out-of-bounds write in the Brotli decoder through node:zlib: an 8-byte buffer overflow from an invalid block switch, with possible crash, memory disclosure, or RCE. CVE-2026-105482 makes dns.resolve*() truncate hostnames at NUL bytes, so attacker.example\0.trusted.example passes an allowlist that checks the full name. The other two are TLS bypasses: tls.checkServerIdentity() can be fooled by fullwidth digits such as 127.0.0.1 (24.x and 26.x only), or by leading-zero IPv4 literals such as 0127.0.0.1 that WHATWG URL parsing and the OS resolver normalize differently.
Equally decision-relevant for architecture: two of the eleven are continuations of fixes the project flagged as incomplete. CVE-2026-105482 completes an unfinished fix of CVE-2026-48930, and CVE-2026-105481 extends CVE-2026-48931: the HTTP keep-alive Agent still accepted responses sent before any request. There is also CVE-2026-106074, which matters if you use --build-snapshot or single executable applications: entropy caches for crypto.randomUUID() and randomInt() get saved into the snapshot, so up to 127 UUIDs can repeat across processes. Three low-severity CVEs round out the list, including two permission-model fixes that only touch 26.x. EOL lines are affected too; the announcement recommends upgrading per the release schedule.
If your Node.js application is built and deployed through a pipeline like the ones we build in our product engineering service, updating the runtime is a one-line version bump, then an image rebuild and deploy. What is slower is finding the hidden Node.js: internal CLI tools, stale containers, or vendor appliances. The inventory pattern is the same one CISA asks for on the PHP side.
Did Node.js and PHP really catch the same hole?
Yes, one CVE surfaced in two ecosystems: Brotli. The same Brotli decoder flaw, CVE-2026-111497, appears in Node.js through node:zlib and in PHP through Windows builds that bundle the Brotli library for the cURL extension. php.net shipped new Windows builds on October 26 bundling Brotli 1.2.1, and the “Updated PHP Windows builds for Brotli security fix” banner sits on its site. For infrastructure teams this is a useful reminder: shared C dependencies mean shared security fate, and a per-runtime CVE list never covers the system libraries carried along.
What about AI tooling security in the same month?
Busy, with numbers too large to ignore. Three signals from October 2026:
First, the Pydantic AI advisory wave on October 8. Most relevant for agents with web access: CVE-2026-107290, an event loop blocked by quadratic title extraction in the local web_fetch tool, plus resource-consumption and SSRF issues in the same tool. A prompt leak through OpenTelemetry instrumentation on failed retries was fixed across the 1.107.x and 2.27.x through 2.44.0 ranges. The pattern matches what we covered in the guard architecture for MCP: tools that accept external input need size limits, host allowlists, and sanitization before they touch observability infrastructure.
Second, the stream of Langflow advisories through September 2026: critical RCE via the MCP Stdio transport (September 10), cross-project file disclosure through MCP resource handlers (September 22), and two cross-user access fixes at the end of the month. If your team runs an agent flow builder inside your internal stack, its advisory page belongs on your subscription list.
Third, Anthropic’s coordinated vulnerability disclosure dashboard, last updated October 2, 2026: 6,157 vulnerabilities disclosed across 591 open source projects, 516 of them known to be patched, with 219 CVE records and 365 GitHub Security Advisories issued. Anthropic runs the discovery with Claude models and names human triage as the rate-limiting step. The number points at what comes next: finding vulnerabilities is no longer the bottleneck; handling them is the queue.
What patch order makes sense this week?
The following is our suggested editorial checklist, not an official guide from any vendor; adjust it to your actual exposure:
- Internet-facing PHP systems first, today, following the KEV status of the two php2shell CVEs. If you cannot patch yet, CISA recommends taking them offline.
- The Node.js release lines you run, with image rebuilds rather than restarts alone: runtime-level holes like the Brotli decoder and the TLS bypasses only close when images are actually rebuilt.
- Pipelines using
--build-snapshotor SEA in Node.js need a snapshot rebuild after upgrading, because the entropy cache is baked into the old artifact. - Inventory internal AI tooling: pydantic-ai below 2.44.0 (or 1.107.6 on the 1.x line) and long-exposed Langflow installs on public networks are two combinations you should not leave standing.
- CISA’s SIGMA detection rules over PHP worker logs, running before the week ends if any PHP system is still unpatched.
flowchart TD
A["Internet-facing system?"] -->|"PHP"| B["Patch php2shell today: 8.5.12 / 8.4.27 / 8.3.36 / 8.2.35"]
A -->|"Node.js"| C["Upgrade to v22.23.4 / v24.22.1 / v26.12.1"]
B --> D["Cannot patch yet? CISA: take it offline"]
C --> E["Rebuild images, snapshots, and SEA artifacts"]
B --> F["Inventory hidden PHP: appliances and containers"]
E --> G["Inventory AI tooling: pydantic-ai, Langflow, MCP clients"]
D --> G
F --> G
Automation workflows that connect these systems, including agents with tool access, are day-to-day work for our AI agents service; the inventory and patching belong in a maintenance contract you can ask for from day one.
What does this article not cover?
Exploit internals, hosting pricing, and per-provider patch timelines are out of scope; version figures on official pages may change after our check date. We also skip third-party roundups, so every claim above traces to a vendor page or CISA alert we link. Sources were checked on November 3, 2026. If you want to assess your production stack’s exposure to waves like this one, talk to us.

