Is your PHP, WordPress or Drupal site exposed to the October 2026 PHP RCE?
CVE-2026-109618 and CVE-2026-109619 let an unauthenticated request run code on servers running unpatched PHP. Paste a PHP version, a Docker image, a Dockerfile or your PHP settings to see where you stand.
- 8.5.x needs 8.5.12
- 8.4.x needs 8.4.27
- 8.3.x needs 8.3.36
- 8.2.x needs 8.2.35
- 8.1 and older No fix
Updating PHP is the only complete fix. Settings and WAF rules reduce exposure but don’t make a server safe. This tool reads what you paste and doesn’t scan anything. Read the caution notes.
Paste php -v output, or name each site like drupal-portal: PHP 8.2.20. Distribution builds such as 8.1.2-1ubuntu2.20 are recognised.
Works with php, wordpress, drupal, Bitnami, Red Hat UBI, FrankenPHP and more. Every FROM or image: line is checked.
Checks the stopgaps from the php.net advisory. Paste php -i from the web server’s PHP to also get a version verdict.
Runs entirely in your browser. Nothing you paste is sent anywhere.
What’s affected
Every PHP installation that serves web requests: PHP-FPM, Apache with mod_php, php-cgi, FrankenPHP and LiteSpeed. The PHP team rates mod_php highest risk, with a demonstrated exploit that runs before any application code.
- Critical 9.2CVE-2026-109618
Remote code execution via out-of-memory corruption. Out-of-memory handling can leave request data partly initialized, and cleanup then treats it as valid.
8.28.38.48.5≤ 8.1 - Critical 9.2CVE-2026-109619
Remote code execution via stale global state. Request state can outlive its freed memory, and a later request on the same worker may use it.
8.28.38.48.5≤ 8.1
WordPress, Drupal and other PHP apps
The flaw is in the PHP runtime, not in WordPress, Drupal, Joomla, Magento or Laravel. Updating the application doesn’t help, and the attack can run before any application code. What matters is the PHP version on every server, container and worker that serves the site.
Official wordpress and drupal Docker images name only the PHP branch, such as php8.3. Rebuild them with a fresh pull so they pick up the patched PHP, then confirm with php -v.
Find the PHP version that serves your site
The command-line php and the web server’s PHP can be different builds. Check the one that serves requests.
On a server or in a container
php -v; php-fpm -v 2>/dev/nullDrupal
drush status --field=php-versionOr in the admin at Reports → Status report (/admin/reports/status).
WordPress
wp --infoOr in the admin at Tools → Site Health → Info → Server.
Every pod in an OpenShift or Kubernetes namespace
Replace NS with your namespace, or use kubectl on plain Kubernetes. Paste the output into the version tab.
for p in $(oc get pods -n NS -o jsonpath='{.items[*].metadata.name}'); do echo "$p: $(oc exec -n NS $p -- php -r 'echo PHP_VERSION;' 2>/dev/null || echo n/a)"; doneAll images deployed in the cluster
oc get pods -A -o jsonpath='{range .items[*]}{range .spec.containers[*]}{.image}{"\n"}{end}{end}' | sort -uSettings the web server actually uses
php-fpm -i | grep -E 'PHP Version|Server API|upload_progress.enabled|memory_limit|post_max_size|upload_max_filesize|fatal_error_backtraces'If you’re affected
- Find every server, container, CI image and developer environment running PHP, and its version.
- Update to
8.5.12,8.4.27,8.3.36or8.2.35. On Linux, install your distribution’s updated packages: vendors received the patches in advance. - Patch internet-facing sites and Apache with mod_php first.
- Rebuild every container image and restart every PHP worker. Running workers keep the old code until they restart.
- Confirm with
php -von the web server and run it through this checker again. - On PHP 8.1 or older, move to a supported branch, or use a vendor’s backported packages. PHP 8.2 itself ends on 31 December 2026.
If you can’t update today
These come from the php.net advisory. They block specific attack paths only and don’t make a server safe. Apply them in php.ini, the FPM pool or the web server config, then restart every worker.
Turn off session upload progress
Blocks the confirmed session paths for CVE-2026-109619, not other variants. Don’t rely on
.user.iniorini_set().php_admin_flag[session.upload_progress.enabled] = offRemove the PHP memory limit
Removes the controllable memory-limit failure behind CVE-2026-109618. Keep a container or cgroup memory limit as the safety boundary, and check nothing sets a finite limit back.
php_admin_value[memory_limit] = -1Keep request bodies small
8M for sites without uploads, 32M with uploads. Keep
upload_max_filesizebelow it, and enforce size and field-count limits at the web server or proxy too.post_max_size = 8MPHP 8.5 only: turn off fatal error backtraces
Blocks the confirmed fatal-backtrace path only.
fatal_error_backtraces = 0
About WAF rules. Blocking requests that contain PHP_SESSION_UPLOAD_PROGRESS at the edge covers one path of CVE-2026-109619 across many hosts at once. It’s a useful interim layer, but it doesn’t address CVE-2026-109618, and private DNS or internal-only access doesn’t remove the risk either.
Caution
- Only an update is a complete fix. The PHP project says there are no complete mitigations. Some notices in circulation describe the upload-progress setting or a WAF rule as the fix. They aren’t.
- A tag or package name isn’t proof. Images can be retagged or pinned by digest, and the CLI can differ from the web server’s PHP. Only
php -vfrom the PHP that serves requests is conclusive. - Distribution packages use their own versions. Ubuntu, Debian and Red Hat backport fixes without changing the PHP number, so
8.1.2-1ubuntu…may be patched. Check your vendor’s advisory. - remirepo users: php.net says
rpms.remirepo.netdidn’t have updates on release day and recommends switching to distribution packages or building from source. - “Not affected” covers this release only. It means the version includes the 21 October 2026 fixes. Other advisories may still apply.
- This is a triage aid, not a security assessment. It’s provided as is, with no warranty. Your security team and the official advisory take precedence.
Sources
Versions, affected setups and stopgaps checked against php.net on 22 October 2026.
- php.net: Security advisory, update nowOfficial advisory, 21 Oct 2026. Primary source for this page.
- GHSA-w8hw-w9fx-j79w (CVE-2026-109618)Technical details for the out-of-memory corruption flaw.
- GHSA-6wmf-4rv5-p3rp (CVE-2026-109619)Technical details for the stale global state flaw.
- PHP 8 ChangeLogRelease notes for 8.5.12, 8.4.27, 8.3.36 and 8.2.35.
- PHP supported versionsWhich branches still get security fixes.
- Source backport for PHP 8.1Minimal backports also exist for 7.4 and 8.0, for teams building from source.
- Phoenix Security write-upSecondary coverage. Not used for version data.
- Wikipedia: PHP2ShellSecondary. “php2shell” is a nickname used in coverage, not by php.net.
Questions
Do I need to update WordPress or Drupal?
Not for this issue. The flaw is in PHP itself. Update PHP on every server that runs the site, then keep your CMS up to date as usual.
Our servers are only reachable internally. Are we safe?
No. Internal access or private DNS reduces who can reach the server, but any request that does reach it can trigger the flaw. Patch internal systems too.
Is turning off session.upload_progress enough?
No. It blocks the confirmed session paths for one of the two CVEs. php.net says updating is the only complete fix.
We run PHP 7.4 or 8.1. What now?
There’s no official release. Use your distribution’s or LTS vendor’s backported packages if available, apply the stopgaps, and plan a move to PHP 8.3 or 8.4.
Does this page send my data anywhere?
No. Everything runs in your browser.