PHP2Shell is fixed.
Is your PHP?
Two critical flaws in PHP itself, CVE-2026-109618 and CVE-2026-109619, were fixed on 21 October 2026. Paste your php -v output to see where you stand.
Affected. Upgrade to 8.3.36.
Then restart every PHP worker.
php -v shows the command-line build. Your web server may run a different one. Ask php-fpm8.3 -v, or open phpinfo() through the site.
Steps for PHP 8.3Fixed releases21 Oct 2026
Where the flaws sit
Both flaws are in PHP, not your code. Upgrade it, restart the workers and every site on the server is fixed.
- Severity
- Critical, CVSS v4.0 9.2, both
- Reached through
- Apache mod_php, PHP-FPM, php-cgi, FrankenPHP, LiteSpeed
- Highest risk
- mod_php: no login needed, triggered before your code runs
- In the wild
- Not reported in the official advisories as of 22 Oct 2026
Every branch, one row
Find your branch and read the version that fixes it. Anything older on that branch is affected.
- Patched release
- Source backport only
- No official fix
- Checked 22 October 2026
Bar ends where php.net support ends
Versions from the php.net announcement and both advisories. Lifecycle dates from php.net supported versions. The full table is on the status page.
- PHP 8.58.5.12support to 31 December 2029
- PHP 8.48.4.27support to 31 December 2028
- PHP 8.38.3.36support to 31 December 2027
- PHP 8.28.2.35support to 31 December 2026
- PHP 8.1Source backport onlyended 31 December 2025
- PHP 8.0Source backport onlyended 26 November 2023
- PHP 7.4Source backport onlyended 28 November 2022
- PHP 7.3 and olderNo official fixended years ago
Until you can upgrade
These reduce exposure. They don’t make you safe, and the PHP project says upgrading is the only safe choice.
At the proxy, too
In front of PHP, cap request size, field count, multipart parts, header count and nesting depth. Include requests that arrive without Content-Length.
On PHP 8.5, also set fatal_error_backtraces = 0. Never use RLIMIT_AS or RLIMIT_DATA. Failed allocations are the path this flaw takes. Source: GHSA-w8hw-w9fx-j79w and GHSA-6wmf-4rv5-p3rp.
[www]; existing pool settings stay as they are; CVE-2026-109618, reduces exposurephp_admin_value[memory_limit] = -1No memory ceiling
CVE-2026-109618 starts when a request runs out of memory. Lock it with php_admin_value so scripts can’t lower it again.
php_admin_value[post_max_size] = 8Mphp_admin_value[upload_max_filesize] = 4MSmall request bodies
8M without uploads, 32M with them. Keep upload_max_filesize below post_max_size.
php_admin_value[max_input_nesting_level] = 16Shallow input
Lower the nesting limit for form and query arrays. 16 is an example, so test it against your app.
; CVE-2026-109619, reduces exposurephp_admin_flag[session.upload_progress.enabled] = offUpload progress off
The switch for CVE-2026-109619. Set it here or in php.ini, never with ini_set() or .user.ini. Leave it off after patching.
php_admin_flag[log_errors] = onphp_admin_value[error_log] = /var/log/php8.3-fpm.www.logKeep the evidence
Log every error to a file you actually read, and set error_reporting = E_ALL in php.ini. A clean log proves nothing.
; optional, costs throughputpm.max_requests = 1One request per worker
Optional and slow. Each worker exits after one request, so no state carries over.
; then restart every worker$ sudo systemctl restart php8.3-fpmThe free fix
First, read your version.
php -v reports the command-line build. Ask the binary your web server runs, or open phpinfo() through the site.
Then upgrade the package.
Take your distribution’s patched package, or build the fixed release from php.net. Its changelog should name both CVEs.
Finally, restart every worker.
Running workers keep the old PHP in memory until they restart. With mod_php, restart Apache instead.
1 of 3 · your version
$ php-fpm8.3 -v PHP 8.3.30 (fpm-fcgi) (built: Oct 2 2026 09:14:52) Copyright (c) The PHP Group Zend Engine v4.3.30, Copyright (c) Zend Technologies
2 of 3 · the package
$ sudo apt update $ sudo apt install --only-upgrade 'php8.3-*' The following packages will be upgraded: php8.3-cli php8.3-common php8.3-fpm php8.3-opcache 4 upgraded, 0 newly installed, 0 to remove. Setting up php8.3-fpm (8.3.36-1) ...
3 of 3 · every worker
$ sudo systemctl restart php8.3-fpm $ php-fpm8.3 -v PHP 8.3.36 (fpm-fcgi) (built: Oct 21 2026 18:40:07)
Where you run PHP
decides the next step
Ask a personOwn server
FreeUpgrade PHP 8.3Package, restart, verifyFreeUpgrade PHP 8.2Ends 31 Dec 2026FreeCheck the running buildAfter patchingPaidWe patch it with youScope in writing, then invoiceRead the sources
Every fact here links to where it came from and says when we last checked it. Where sources disagree, we say so. The ChangeLog dates 8.5.12 and 8.4.27 to 22 October, the announcement to 21 October. We last checked all of them on 22 October 2026.
Need a person to do it?
Tell us what you run.
Don’t paste passwords, SSH keys or API keys. We usually reply during working hours (CET). Paid work is scoped in writing and invoiced. We don’t do incident response.
- hello@php2shell.dev
- Hours
- Monday to Friday, 9:00–18:00 CET
- Billing
- Written scope first, then an invoice