On 21 October 2026, PHP and Node.js both shipped urgent security releases. PHP fixed PHP2Shell (CVE-2026-109618 and CVE-2026-109619), a pair of critical flaws that can let an attacker run code on your server without logging in. Node.js fixed 10 vulnerabilities, including a Brotli decoder bug that can lead to remote code execution. Here is what each vulnerability means, how to check whether you are affected, exactly what to patch, and how we build systems so advisories like these become routine updates instead of emergencies.
Key takeaways
- PHP: upgrade to 8.5.12, 8.4.27, 8.3.36 or 8.2.35 and restart every PHP worker. PHP 8.1 and older get no fix.
- Node.js: upgrade to 26.12.1, 24.22.1 or 22.23.4, rebuild your images and redeploy. Node.js 20 is end of life.
- Can’t patch today? Set
session.upload_progress.enabled = 0for PHP as a stopgap, then upgrade. - Then: check logs from 17 October onwards, because exploitation attempts were seen before the public disclosure.
What is PHP2Shell (CVE-2026-109618 and CVE-2026-109619)?
PHP2Shell is the name given to two memory-safety vulnerabilities in the core of PHP, disclosed on 21 October 2026. Because they live in the PHP engine rather than in any framework, every application running on a vulnerable PHP version inherits them: WordPress and WooCommerce sites, Laravel and Symfony apps, Magento and Drupal stores, and custom PHP ERPs and CRMs.
- CVE-2026-109618 is memory corruption triggered when PHP runs out of memory while setting up a request, which can leave request memory uninitialised.
- CVE-2026-109619 is a use-after-free: a later request handled by the same PHP worker can reuse stale state that points to freed memory.
Chained together, they allow unauthenticated remote code execution. The PHP project rates both at CVSS 9.2; early copies of the CVE records carried an incorrect 10.0. Every PHP version from 5.4 up to 8.5.11 is affected.
Who is at risk?
Any PHP installation that serves web requests. Security vendors rate Apache with mod_php as the highest risk, and also list PHP-FPM, php-cgi, FrankenPHP and LiteSpeed as affected setups. The attack paths confirmed so far go through PHP’s session upload progress feature, which is enabled by default.
Is PHP2Shell being exploited?
Treat it as actively targeted. Amazon Threat Intelligence reported an exploitation attempt on 17 October 2026, four days before public disclosure, and security teams reported attacks on the day the fix was released. National agencies including the UK’s NCSC, CERT-EU and Singapore’s CSA have issued alerts urging immediate patching.
Affected and fixed PHP versions
| PHP branch | Vulnerable | Fixed in |
|---|---|---|
| 8.5 | 8.5.11 and earlier | 8.5.12 |
| 8.4 | 8.4.26 and earlier | 8.4.27 |
| 8.3 | 8.3.35 and earlier | 8.3.36 |
| 8.2 | 8.2.34 and earlier | 8.2.35 |
| 8.1 to 5.4 | All versions | No fix (end of life) |
How to patch PHP2Shell
- Check the version your web server actually runs. The command-line PHP can differ from the one serving requests, so check both:
php -vandphp-fpm -v(orphpinfo()on a protected page). - Upgrade through your OS packages, Docker base image or hosting control panel to a fixed release from the table.
- Restart every PHP worker, for example
sudo systemctl restart php8.3-fpmor your Apache service. Patched binaries do nothing while old workers keep running. - On managed hosting, ask your provider to confirm the patched version is live for your site.
Temporary mitigation if you cannot upgrade today
Disable session upload progress in php.ini or in the PHP-FPM pool configuration, then restart every worker:
; php.ini
session.upload_progress.enabled = 0
; or in a PHP-FPM pool (e.g. www.conf)
php_admin_flag[session.upload_progress.enabled] = offSetting it with ini_set() or a .user.ini file is too late in the request to help. This blocks the confirmed attack paths, but the PHP project is clear that no configuration change fully closes the vulnerability, so upgrade as soon as you can. CERT-EU also lists a further PHP issue, CVE-2026-115560, with details due in the next PHP release, so expect to patch again soon.
Node.js October 2026 security release: 10 CVEs patched
The same day, Node.js released 26.12.1, 24.22.1 and 22.23.4, fixing 10 vulnerabilities across all supported release lines, four of them rated high severity. End-of-life versions are always affected and receive no fixes.
| CVE | Severity | What it does |
|---|---|---|
| CVE-2026-111497 | High | Out-of-bounds write in the Brotli decoder. Attacker-supplied Brotli data decompressed with node:zlib can crash the process, leak memory or lead to remote code execution. |
| CVE-2026-105482 | High | dns.resolve truncates names containing a NUL character, so a hostname that passed an allowlist can resolve to a different name. |
| CVE-2026-105483 | High | TLS certificate hostname check can be bypassed when an IP address is written in fullwidth digits (24.x, 26.x). |
| CVE-2026-106069 | High | TLS certificate hostname check can be bypassed when a host loosely resolves to an IP address. |
| CVE-2026-106074 | Medium | crypto.randomUUID() and randomInt() values cached in startup snapshots and single executable apps repeat in every process. |
The release also fixes a keep-alive response-ordering bug, an IPv4 certificate validation issue, two Permission Model bypasses and a ZIP parsing flaw, and updates bundled dependencies including OpenSSL, c-ares and Undici.
How to patch Node.js
- Check versions everywhere with
node -v: servers, CI runners, Docker images and serverless functions. - Upgrade to 26.12.1, 24.22.1 or 22.23.4, rebuild Docker images from an updated base image (a cached
node:22layer can still be old), and redeploy. - If you build startup snapshots or single executable applications, rebuild them with the patched version so they stop repeating cached random values.
- Prioritise services that decompress data from untrusted sources or connect to user-supplied URLs.
- Move anything still on Node.js 20 or older to a supported LTS line.
A 30-minute response checklist for PHP and Node.js teams
- List every server, container and function running PHP or Node.js, including staging and forgotten admin tools.
- Record the exact runtime version of each one.
- Patch internet-facing systems first, then internal ones.
- Restart PHP workers and redeploy Node.js services so the new versions actually run.
- Apply the PHP stopgap anywhere an upgrade is blocked, and set a deadline to remove it.
- Review logs since 17 October for unusual multipart uploads, new files in web roots and unexpected processes. If anything looks wrong, rotate credentials and API keys.
- Schedule upgrades away from end-of-life runtimes (PHP 8.1 and older, Node.js 20 and older).
How Tegnol approaches security in the systems we build
PHP2Shell is a reminder that risk lives in the platform as much as in your own code. You can write perfect application code and still be exposed by the runtime underneath it. That is why we design every product so that a critical advisory is a short, rehearsed update, not a weekend of firefighting:
- Supported runtimes only. We launch on actively supported PHP and Node.js LTS versions and plan upgrades before end of life, so a fix is always available.
- Reproducible builds and deployments. Infrastructure and deployments are defined in code, so patching means rebuilding and redeploying in minutes, with health checks and instant rollback.
- Automated vulnerability monitoring. Dependency and runtime alerts (Composer and npm audits, plus automated update pull requests) run on every repository we hand over.
- Defence in depth. Least-privilege access, a web application firewall, rate limiting, strict input validation, secrets kept out of code and encrypted, tested backups, so a single runtime bug does not become a full breach.
- Custom code, not AI-generated shortcuts. AI tools are great for demos, but the code they generate is rarely built for real users: weak authentication, unchecked inputs and outdated dependencies are common. In a Production Sprint we rebuild that product on a clean, custom codebase with a proper architecture, so it holds up when real users and real attackers arrive.
How our free post-launch support protects clients
Launch is when real users, and real attackers, arrive. Every Tegnol project includes 30 days of free post-launch bug support: if a critical advisory like PHP2Shell or the Node.js Brotli flaw lands in that window, we patch the runtime, rebuild and redeploy your product at no extra cost. After that, Growth Partner clients get ongoing monitoring, dependency updates and runtime upgrades as part of their plan, so their product stays secure while it keeps improving.
That is a big part of why founders choose us. They are not buying a one-off build that ages the day it ships; they get a team that stays accountable for keeping the product fast, stable and secure, and that works all year round, holidays and year end included, because vulnerabilities do not wait for office hours.
Modernising legacy PHP systems and ERPs without losing data
Many established businesses and enterprises run critical ERPs, CRMs and internal tools on older PHP versions that will never receive a PHP2Shell fix. Patching is not an option there; modernisation is. We redesign and re-architect these systems into secure, modern platforms that teams actually enjoy using:
- Audit first. We map your current system, data model, integrations and the workflows your team relies on every day.
- Secure architecture. Role-based access control, audit logs, encryption in transit and at rest, and a supported, maintainable stack.
- Zero data loss migration. Data is migrated with validation and reconciliation, and old and new systems can run in parallel until every record checks out.
- User-friendly redesign. Faster, clearer screens built around how your staff work, not around what the old system happened to allow.
- Phased rollout. Module by module, so operations never stop for a risky big-bang switchover.
For enterprise teams, a Production Sprint is the best place to start. It is not a bug-fixing exercise: in as little as 20 days (the final timeline depends on your requirements) we audit your current system, rebuild it on a new, secure codebase with an improved architecture, and launch the first modernised module. From there, the Growth Partner plan carries the rest of the migration forward at your pace. We work with Laravel, React, Next.js, Node.js and Flutter, so we can modernise PHP systems on a stack your team already knows or move them to a new one.
Frequently asked questions
Is my WordPress or Laravel site affected by PHP2Shell?
Yes, if the server runs PHP 5.4 through 8.5.11 and serves web requests. The flaw is in PHP itself, not in WordPress, Laravel or your plugins, so the fix is upgrading PHP to 8.5.12, 8.4.27, 8.3.36 or 8.2.35 and restarting every PHP worker. Managed hosts often patch for you, but confirm the version your site actually runs.
Does disabling session.upload_progress fully fix PHP2Shell?
No. Setting session.upload_progress.enabled = 0 in php.ini or the PHP-FPM pool, then restarting workers, blocks the confirmed attack path, but the PHP project states that no configuration change fully closes the vulnerability. Use it only as a stopgap until you can upgrade.
Which Node.js versions fix the October 2026 vulnerabilities?
Node.js 26.12.1, 24.22.1 and 22.23.4. They fix 10 CVEs, including a Brotli decoder out-of-bounds write (CVE-2026-111497) that can lead to remote code execution. End-of-life lines such as Node.js 20 receive no fixes.
Do I need to update Node.js if my app never uses Brotli?
Yes. The same release fixes three other high-severity issues in DNS resolution and TLS hostname checks, plus medium-severity bugs, so every app on 22.x, 24.x or 26.x should upgrade and redeploy.
What should I do if I am still on PHP 8.1, 7.4 or older?
Those versions are end of life and will not get a fix. Apply the session.upload_progress stopgap now and plan an upgrade to a supported PHP version, or a migration to a modern architecture, as soon as possible. Tegnol helps teams do this without losing data.
Sources
- Node.js: October 21, 2026 security releases
- Unit 42: Threat brief on CVE-2026-109618 and CVE-2026-109619
- Tenable: PHP2Shell frequently asked questions
- Google Cloud: Responding to core PHP vulnerabilities
- NCSC (UK): Critical security issue affecting PHP
- CERT-EU: Critical vulnerabilities in PHP
- Sansec: PHP2Shell research and FPM mitigation
- Plesk: PHP2Shell mitigation guidance
- CSA Singapore: Critical vulnerability in Node.js