Skip to main content
Published on October 21, 2026
CVE-2026-109618 and CVE-2026-109619, CVSS v4.0 9.2 each. Two unauthenticated remote code execution flaws in the PHP core, whatever the application. The details leaked before the embargo ended and attacks have been seen since the morning of October 21. Fixed in PHP 8.5.12, 8.4.27, 8.3.36 and 8.2.35, released on October 21. Update now.

The problem in two sentences

An unauthenticated HTTP request can corrupt PHP’s internal state and lead to code execution, before the application even starts. WordPress, Magento, PrestaShop or an in-house app: every site served by PHP is in scope, patched or not. According to the PHP security team, every installation serving web requests is affected: PHP-FPM, Apache with mod_php, php-cgi, FrankenPHP and LiteSpeed. The risk is rated highest for mod_php, where a working exploit has been demonstrated. The full technical details are in advisories GHSA-w8hw-w9fx-j79w and GHSA-6wmf-4rv5-p3rp.

Timeline

The public fix now tells attackers where to look: expect attacks to ramp up against servers that are not yet updated.

What we did at OnetSolutions

Mitigation in place before the fix. On October 21, before the fixed releases shipped, we disabled session.upload_progress on all our web hosting servers, for every PHP version on offer (7.0 to 8.4). We checked the effective values version by version. Fix installed the same day. Our teams were on it from the moment the flaws leaked and followed the situation throughout. The fixed PHP releases went onto all our web hosting the same day they were published, for every version on offer, including PHP 7.0 to 8.1, which get a backported fix. The mitigation stays in place on top. Monitoring. Real-time malware scanning stays on across our web hosting servers.
The mitigation narrows the attack surface; it does not close it. The PHP team is clear: only updating fixes these flaws.

Assess your exposure

You run your VPS, so installing the fix there is up to you. The commands follow.

Update PHP

Linux distributions received the patches in advance, so their packages follow within hours of the release.
Then restart every PHP process: one of the two flaws lives in the state a worker keeps from one request to the next.
If you use the Remi repository (rpms.remirepo.net), it will not ship updates on October 21. The PHP team recommends switching to your distribution’s packages or building from source.
PHP 8.1 and earlier. The PHP project no longer ships releases for these branches. Given the severity, its security team still published minimal fixes for PHP 7.4, 8.0 and 8.1, to build yourself. Some distributions and extended-support vendors carry them in their packages: ask your vendor, or move to a supported version.

If you cannot update right away

The PHP team lists measures that close some of the known attack paths. It warns that they do not make an installation safe.

Against CVE-2026-109619 (stale global state)

Disable upload progress tracking in php.ini or a conf.d file loaded at startup, then restart every worker. ini_set() or a .user.ini is not enough: the setting has to apply before the request is parsed.
To enforce it in a specific PHP-FPM pool, add this to the pool’s configuration (for example /etc/php/8.3/fpm/pool.d/www.conf):
On PHP 8.5, also set fatal_error_backtraces = 0: it closes the confirmed attack path through fatal error backtraces.

Against CVE-2026-109618 (out of memory)

Lower the maximum request size: post_max_size = 8M if the application takes no file uploads, 32M if it does, with upload_max_filesize below post_max_size. The PHP team also suggests memory_limit = -1, provided a container or cgroup memory limit protects the server. Without that limit a single worker can eat all of the machine’s memory, so do not apply it lightly.

Check

Expected: session.upload_progress.enabled => Off.

Look for traces

Attacks came before the fix. On a server that ran a vulnerable version, look for PHP files created or modified since October 20:
A file you did not deploy, especially in an upload directory, means a compromise. Treat the server as compromised: restore from a backup taken before October 20 and rotate every secret it holds.

What next?

The mitigation can stay after the update: few applications use upload progress tracking. The real issue lies elsewhere. PHP 8.1 and earlier no longer get official releases, and PHP 8.2 reaches end of life on December 31, 2026. If one of your sites still depends on them, now is the time to migrate. Any question? Our team is available from your customer area.