PHP 8.3 and PHP2Shell: Fixed in 8.3.36, What to Do

By: Irina Shvaya | October 23, 2026
This guide is part of our PHP2Shell Resource Center: fixed versions, how to check your PHP version, WordPress, Drupal and Joomla steps, mitigations and signs of a hack.

As of 23 October 2026, PHP 8.3 is patched for PHP2Shell in PHP 8.3.36, released on 21 October 2026. Releases up to and including 8.3.35, from 24 September 2026, are affected. The fix for most 8.3 sites is a package update from the operating system or the host, followed by a PHP restart.

Of the four fixed releases, 8.3.36 is the least disruptive. PHP 8.3 is in its security-only phase, so this release contains the PHP2Shell fix and nothing else. There are no bundled bug fixes to test around.

PHP 8.3 is also everywhere. It is the PHP in Ubuntu 24.04 LTS, the default on RHEL 10 and its rebuilds, the runtime in the official wordpress:latest Docker image, and the minimum for current Drupal, Joomla and Laravel releases. This page lists the fixed package for each of those platforms and explains why so many patched 8.3 servers report a version number lower than 8.3.36.

Key Takeaways

  • Target 8.3.36 or a vendor build with the same patch. 8.3.35 and older are affected.
  • 8.3.36 changes nothing except the PHP2Shell fix, so it is a low-risk update. Take a backup anyway.
  • Ubuntu 24.04 LTS's fixed package reports PHP 8.3.6 (full version 8.3.6-0ubuntu0.24.04.13). It needs no Ubuntu Pro subscription.
  • RHEL 10, RHEL 9's php:8.3 stream, AlmaLinux, Rocky, Alpine 3.21 to 3.24 and Amazon Linux 2023 all have fixed 8.3 packages. On Alpine 3.21 the fix is in the package index but not yet in Alpine's security database, so scanners may still flag it.
  • wordpress:latest runs PHP 8.3 with Apache mod_php, the setup PHP rates highest risk. Redeploy from the image rebuilt on 22 October.
  • Security fixes for 8.3 end on 31 December 2027. Plan a move to 8.4 during 2027.

PHP 8.3 Quick Reference

ItemPHP 8.3 (as of 23 October 2026)
Initial release23 November 2023
Active support ended31 December 2025
Security support until31 December 2027
Last affected upstream release8.3.35 (24 September 2026)
Fixed upstream release8.3.36 (21 October 2026)
Also in the fix releaseNothing; security fix only
Default PHP onUbuntu 24.04 LTS, RHEL 10, AlmaLinux 10, Rocky Linux 10
Docker official imagephp:8.3 tags carry 8.3.36; wordpress:latest uses php8.3-apache
Minimum PHP forDrupal 11, Joomla 6, Laravel 13

Branch dates are from PHP's supported versions page. The full cross-branch list is in our PHP2Shell fixed versions table.

Why 8.3.36 Is the Easiest PHP2Shell Update

PHP's ChangeLog entry for 8.3.36 has one line: "Fixed GHSA-w8hw-w9fx-j79w, GHSA-6wmf-4rv5-p3rp (Avoid state corruption via bailout)." The 8.4 and 8.5 fix releases add more than a hundred other bug fixes, and a SimpleXML regression has been reported against 8.4.27 and 8.5.12. That report does not name 8.3.

The fix does change one behavior on every branch. From 8.3.36, memory_limit is a soft limit, and a separate hard limit sits above it. By default, the hard limit is twice memory_limit when memory_limit is 1G or less. A process that hits the hard limit is stopped at once with exit status 137, without running shutdown code. Most sites will never notice. Code that regularly runs near its memory limit should be watched after the update.

Ubuntu 24.04 LTS: Why Your Patched Server Says 8.3.6

Ubuntu 24.04 LTS ships PHP 8.3. Ubuntu fixed PHP2Shell by backporting the patch into its own package, so the upstream number did not change. According to Ubuntu's CVE page, the fixed version is 8.3.6-0ubuntu0.24.04.13, in standard support. No Ubuntu Pro subscription is needed, and 24.04 standard support runs to May 2029.

So php -v on a fully patched 24.04 server still says 8.3.6. The part that matters is the suffix after "ubuntu". USN-8948-1 lists the fixed binary packages, including libapache2-mod-php8.3, php8.3-cgi, php8.3-cli and php8.3-fpm.

An example update and restart (use apache2 instead of php8.3-fpm if you run mod_php):

sudo apt update && sudo apt upgrade
sudo systemctl restart php8.3-fpm
apt policy php8.3-fpm

The last command shows the installed package version, which should be 8.3.6-0ubuntu0.24.04.13 or later. Ubuntu installs most security updates automatically each day by default. Even so, confirm that the PHP service restarted after the update, because old workers keep running old code. Our guide to restarting PHP workers covers every setup.

RHEL 10, RHEL 9 and Their Rebuilds

PHP 8.3 is the default PHP on RHEL 10 and is also a module stream on RHEL 9. Red Hat's application streams life cycle lists the RHEL 9 PHP 8.3 stream as supported until May 2029. That is longer than PHP's own support for the branch, because Red Hat backports fixes itself.

PlatformStreamFixed build or advisory
RHEL 10Default phpRHSA-2026:87070, php-8.3.36-1.el10_2
RHEL 10.0 EUSDefault phpRHSA-2026:88561, php-8.3.19-1.el10_0.2 (23 October)
RHEL 9php:8.3RHSA-2026:87079
AlmaLinux 10Default phpphp-8.3.33-1.el10_2.alma.1
AlmaLinux 9php:8.3php-8.3.33-1.module_el9.8.0+328+1fdeb728.alma.1
Rocky Linux 10 and 9Default php and php:8.3RLSA-2026:87070 and RLSA-2026:87079

The same branch carries three different numbers here: 8.3.36, 8.3.33 and 8.3.19. All of them are fixed builds. AlmaLinux puts it plainly: "Don't rely on php -v." Its documented steps are:

sudo dnf clean metadata && sudo dnf upgrade 'php*'
sudo systemctl restart php-fpm
rpm -q php-common

Compare the result with the builds above. If you are unsure which stream a RHEL 9 or AlmaLinux 9 server uses, dnf module list php shows it.

Alpine, Amazon Linux and Debian

  • Alpine: php83 is fixed as 8.3.36-r0 in the community repository on 3.22, 3.23, 3.24 and edge. On 3.21, the package index has php83 8.3.36-r0, built on 22 October, but Alpine's security database had not been updated as of 23 October, so vulnerability scanners may still report it as unfixed. We found no fix for 3.20. See our PHP2Shell on Alpine guide. Alpine says its community repository "is supported until next stable release", per Alpine's release page. Treat those older releases as unfixed and move to a supported one.
  • Amazon Linux 2023: php8.3 is fixed in ALAS2023-2026-3302 (php8.3-cli-8.3.36-1.amzn2023.0.1).
  • Debian: no Debian release ships PHP 8.3 as a distribution package. Debian 12 uses 8.2 and Debian 13 uses 8.4.

Docker and the wordpress:latest Image

The official php:8.3 Docker tags carry 8.3.36. They were pushed late on 21 October. The official wordpress:latest image is WordPress 7.1.3 on php8.3-apache, rebuilt on 22 October. Docker's Apache variants run PHP as mod_php. PHP's advisory says: "We consider the risk highest for mod_php." Our Apache mod_php guide explains why.

Containers do not patch themselves. Pull the current image, rebuild anything based on it, and redeploy. If you build your own image with a pinned PHP version, change the pin to 8.3.36 or later.

CMS and Framework Support for PHP 8.3

For many platforms, 8.3 is the floor, not the ceiling:

  • WordPress recommends "PHP version 8.3 or greater," per its requirements page. Our WordPress PHP2Shell guide covers the WordPress side.
  • Drupal 11 requires PHP 8.3 or newer.
  • Joomla 6 has a minimum of 8.3.0, with 8.4 recommended.
  • Laravel 13 "requires a minimum PHP version of 8.3."
  • Magento and Adobe Commerce 2.4.7 supports 8.3 and 8.2. 2.4.8 supports 8.4 and 8.3.

So if you run a current release of any of these on 8.3, never "fix" PHP2Shell by switching to an older branch. Patch 8.3, or move up.

Checking the memory_hard_limit_percent Directive

The fixed releases add a new directive, memory_hard_limit_percent. PHP's manual says that if it "is not recognized, the PHP version in use is affected by these vulnerabilities and must be updated immediately." One example check:

php -r 'echo ini_get("memory_hard_limit_percent") === false ? "missing" : "present";'

Use this test with care on 8.3. It is contested, and it is only reliable on builds of PHP's own 8.3.36 release, such as the official Docker image. The 8.3 branch has several fixed builds with lower numbers: Ubuntu's 8.3.6, AlmaLinux's 8.3.33 and RHEL 10.0 EUS's 8.3.19. We could not verify whether those include the directive. A "missing" result there does not prove you are vulnerable. Check the package version instead. And remember that the command-line PHP may not be the one serving your site.

Planning Beyond PHP 8.3

PHP's security support for 8.3 ends on 31 December 2027. Ubuntu 24.04 and RHEL 9 support their 8.3 packages longer, through their own backports. If you rely on that, you rely on the vendor's patches, not php.net's. Our guide to the shared responsibility model explains who patches what.

For most sites, the sensible plan is to finish patching now and move to PHP 8.4 during 2027. 8.4 gets security fixes until the end of 2028. Our PHP 8.4 page lists the 8.3 to 8.4 changes that break older code. Test that move on a copy of the site first. Our staging sites guide shows how.

Conclusion

PHP 8.3 is the simplest branch to patch. The fix release contains nothing else, and every major platform that ships 8.3 has a fixed package, except Alpine 3.20. Update through your vendor, restart PHP, and confirm the package version rather than trusting php -v. If you manage many servers or need it done today, our emergency PHP patching service can take it on. Every PHP2Shell guide is in our PHP2Shell Resource Center.

Frequently Asked Questions

Why does my Ubuntu 24.04 server say PHP 8.3.6 when the fix is 8.3.36?

Ubuntu keeps the upstream number it shipped with and adds fixes to its own package. The fixed package is 8.3.6-0ubuntu0.24.04.13. Check the full package version with apt policy, not just php -v.

Can I install 8.3.36 without testing?

It is as safe as a PHP update gets, because it contains only the security fix. Back up first, update, restart, and check the site straight away. Do not wait days for a full test cycle.

Which PHP stream is my AlmaLinux 9 server on?

Run dnf module list php to see the enabled stream. AlmaLinux 9's non-modular default is PHP 8.0, so an 8.3 site there uses the php:8.3 stream. The fixed AlmaLinux build for that stream is php-8.3.33-1.module_el9.8.0+328+1fdeb728.alma.1.

I run php83 on Alpine 3.21. What should I do?

Upgrade the package: the 3.21 index has php83 8.3.36-r0, even though Alpine's security database hadn't caught up on 23 October. Alpine 3.21's main repository reaches end of life on 1 November 2026, so plan a move to 3.22 or newer, or rebuild on a current official php:8.3 image.

Does the official wordpress:latest image include the fix?

Yes. It was rebuilt on 22 October on php8.3-apache. A container started from an older pull does not change on its own, so pull the image again and redeploy.

Should I move from 8.3 to 8.4 now?

Patch first. Upgrading branches in the middle of an emergency adds risk. Once 8.3.36 or your vendor's build is in place, schedule the move to 8.4 with testing, well before 31 December 2027.

Put this into action with eSEOspace

We help businesses grow with maintenance & support that actually performs. Explore the services behind this guide:

Book a free strategy call →

Get a FREE Audit

We'll perform a comprehensive SEO, AEO, GEO & CRO audit of your website — completely free — and show you exactly how to outrank your competitors.

Don't have a site yet? Get in touch →

Get a FREE GEO/AEO/SEO Audit

We'll analyze your site's SEO, GEO, AEO & CRO — completely free — and show you exactly how to get found across Google and AI answers.

Don't have a site yet? Get in touch →

You Might Also like to Read