Your RSA-2048 keys break in 2030. Find every one of them before attackers do.
Home/Blog/PHP's Unpatched Critical RCEs (CVE-2026-109618, CVE-2026-109619): What's Confirmed and What Isn't
Threat ResearchOctober 21, 20268 min read

PHP's Unpatched Critical RCEs (CVE-2026-109618, CVE-2026-109619): What's Confirmed and What Isn't

Two critical PHP flaws, CVSS 9.2 each, leaked before PHP's fix shipped. What PHP has confirmed, what's still researcher-reported, and what to do now.

O
O3 Security Team
PHP's Unpatched Critical RCEs (CVE-2026-109618, CVE-2026-109619): What's Confirmed and What Isn't
Key takeaways
  • PHP's own security team confirmed an out-of-band release for two critical vulnerabilities, both CVSS v4.0 9.2, scheduled for October 21, 2026 at 14:00 UTC, but as of publication PHP's own advisory has not named CVE numbers, affected versions, or the technical mechanism.
  • Everything more specific, the CVE IDs CVE-2026-109618 and CVE-2026-109619, the affected version range, and the use-after-free mechanism in session upload-progress handling, comes from independent researchers (Sansec, Upwind, watchTowr) after embargoed details leaked, not from PHP directly.
  • watchTowr says it reproduced one of the two bugs in a lab. No source we could independently verify confirms mass exploitation in the wild; treat exploitation reports as developing, not settled.
  • Disabling session.upload_progress in php.ini is a commonly recommended stopgap, but multiple researchers and a PHP core developer have said it is not a confirmed complete fix. There is no config-only fix for this class of bug.
  • A proof-of-concept exploit tool is already circulating publicly. We are not naming, linking to, or describing how it works while the vulnerability remains unpatched for most of the ecosystem.

Most security advisories tell you what's wrong and how to fix it. This one is unusual because the two things arrived separately, and out of order. PHP's security team announced an emergency release for two critical bugs, both rated as severe as a vulnerability score gets, but withheld every technical detail until the fix was ready. Then the details leaked anyway, a day early, along with a working exploit tool. By the time you read this, PHP may have already shipped the fix. The gap between what PHP has confirmed and what independent researchers have reported is the most important thing to understand right now, because they are not the same list.

Key takeaway

This report distinguishes two tiers of fact. Tier one: what PHP's own security team has stated, directly, in its official announcement. Tier two: what independent researchers (Sansec, Upwind, watchTowr) have reported after embargoed material leaked, which we have not been able to verify against an official PHP source. We label every claim by tier. Treat tier two as credible but not yet officially confirmed.

What PHP itself has actually said (tier one, confirmed)

PHP's security team posted an announcement on October 20, 2026, titled "Upcoming Critical PHP Security Release." The full operative text is short enough to quote directly:

“It addresses two critical vulnerabilities, both rated CVSS v4.0 9.2. Full details, affected versions, and the fixed versions will be published with the release. We reserve the right to release earlier should details of either vulnerability become public, or should evidence of active exploitation appear in the wild.”
— PHP security team, official announcement, php.net

That's it. No CVE numbers. No affected version list. No description of the bug class. PHP deliberately withheld those details, which is normal practice for a severe, unpatched vulnerability: publishing exploit-relevant specifics before a fix exists just hands attackers a head start. The release was scheduled for Wednesday, October 21, 2026, at 14:00 UTC.

What leaked, and who's reporting it (tier two, unconfirmed by PHP)

The plan to withhold details didn't survive contact with the internet. According to multiple independent write-ups, information about the embargoed bugs leaked on October 20, a day before the scheduled release, along with a screenshot of an exploit tool. Once that happened, several security research firms published their own analyses, and this is where the CVE numbers and technical details actually come from.

DetailWhat's reportedSource and confidence
CVE identifiersCVE-2026-109618 and CVE-2026-109619Multiple independent researchers; not named in PHP's own announcement as of publication
MechanismUse-after-free bugs in php_session_rfc1867_callback, the function that tracks multipart file-upload progressReported by Upwind's technical analysis; unconfirmed by an official PHP advisory
Affected versionsDisputed. One researcher says all servers running PHP 5.4 or later; another says confirmed only on stock PHP 8.4.4 and 8.2.34; PHP officially supports only 8.2 through 8.5, so 8.1 and older get no official fix regardlessConflicting across sources; treat the "back to 5.x" claim as unverified
Exploitation in the wildOne research firm (Sansec) reported early attacks observed via Cloudflare; we could not independently verify a Cloudflare statement to that effectSingle-source as of publication; watchTowr says it reproduced one bug in a lab but has not reported observing live attacks
Proof-of-concept availabilityA public exploit tool is circulatingConfirmed to exist; we are not naming or linking it while the bug remains unpatched for most deployments
What's reported, by whom, and how confirmed it is

Read that table as a confidence gradient, not a wall of equally solid facts. The CVE numbers and the broad severity are about as solid as unofficial reporting gets, since they're consistent across multiple independent firms. The exact affected version range and the in-the-wild exploitation claim are each resting on thinner evidence. Don't make irreversible decisions, like taking production systems offline for days, based on the shakiest items in that list without also checking PHP's actual release once it's out.

Why "just change a config setting" doesn't work here

Most PHP vulnerabilities can be partially contained with a config change while you wait to patch. This one is different, and that difference is the main reason it's gotten this much attention.

  • If the reported mechanism (a use-after-free in memory handling) is accurate, this is a bug in PHP's own C code, not in how your application uses PHP. No amount of application-level validation reaches it.
  • PHP core developer Gina Peter Banyard has publicly stated that patching is the only real mitigation, according to researcher write-ups of the leak.
  • The commonly circulated stopgap, setting session.upload_progress.enabled to 0 in php.ini, closes one plausible path but multiple sources are explicit that it is not confirmed to fully eliminate the risk.
  • Because the vulnerable code reportedly runs during PHP's own request parsing, before your application code executes, request-level defenses like a WAF rule matching a specific exploit pattern can be evaded by variations the rule doesn't anticipate.
Watch out

Treat every interim mitigation below as risk reduction, not a fix. The only thing that actually closes this is upgrading to the patched PHP release once it's available, and verifying the version actually changed on every host, container image, and serverless function running PHP.

What to actually do, right now

  1. Check what PHP version every internet-facing system you run is actually on. Not what you think it's on: actual runtime version, including inside containers and serverless functions, which often lag behind what's patched on the host.
  2. If you can take internet-facing PHP services offline or put them behind an authenticated access path until the patch is available, that's the highest-confidence mitigation. Not every team can do this; if you can, it's worth the disruption for a CVSS 9.2 unauthenticated RCE.
  3. If you can't go offline: set session.upload_progress.enabled = 0 in php.ini, .user.ini, or .htaccess as a partial stopgap, understanding it isn't guaranteed complete.
  4. If you're behind a CDN or WAF, check whether your provider has shipped rules targeting this vulnerability class and enable them, while treating any single vendor's rule as incomplete coverage rather than a fix.
  5. Patch the moment the official PHP release is available. Don't wait for a maintenance window on a CVSS 9.2 unauthenticated RCE with public leak activity.
  6. If you're on PHP 8.1 or earlier, you are on an end-of-life branch and will not get an official fix. Upgrading to a supported branch (8.2 or later) is the only real path off this exposure, for this bug and every future one.
check-php-exposure.sh
# Check the actual running PHP version (not just what's installed)
php -v

# Check across all running containers using PHP
docker ps --format '{{.Names}}' | xargs -I{} docker exec {} php -v 2>/dev/null

# Check whether session.upload_progress is currently enabled
php -i | grep -i upload_progress

# Disable it as an interim stopgap (edit php.ini directly, then restart php-fpm / apache)
# session.upload_progress.enabled = 0

# Confirm the setting took effect
php -i | grep 'session.upload_progress.enabled'

# After patching, confirm the version actually changed everywhere
php -v | head -1

If you were already exposed: what to hunt for

Because embargoed details leaked and a proof-of-concept exists, the responsible assumption for any internet-facing PHP system with a long uptime is that you may have been probed or worse, not just as of this week, but since the leak first circulated. If your systems handle anything sensitive, don't wait for a confirmed breach notification to start looking.

  • Look for unexpected PHP files in upload directories, temp directories, or anywhere your application writes user-supplied content, especially files with recent modification times that don't correspond to a known deploy.
  • Check for new or modified admin users across any system with a PHP-based admin panel (CMS platforms, e-commerce backends, internal tools).
  • Review outbound connections from PHP worker processes for anything unexpected: unfamiliar destinations, unusual ports, or connections initiated outside normal application behavior.
  • Check web server and PHP-FPM error logs for repeated crashes or worker restarts around the same request pattern. Researchers have noted that failed exploitation attempts against this bug class tend to crash the PHP worker rather than fail silently, which is itself a signal worth investigating.
  • If you have WAF or CDN logs, look for unusual multipart/form-data POST requests, particularly ones with malformed or oversized boundaries, which is the general shape of request this vulnerability class interacts with.

The bigger picture

PHP still runs a large share of the web. Whatever the exact affected version range turns out to be once PHP's own advisory publishes, a CVSS 9.2 unauthenticated RCE in the interpreter itself, not in a plugin or a specific application, is as serious as this category of bug gets. The embargo leak is its own lesson: coordinated disclosure exists precisely to give defenders a head start over attackers, and when that head start gets cut short, the sensible response isn't panic, it's falling back to the things that work regardless of exact technical details: know your exposure, reduce it where you can, patch the moment a real fix exists, and verify rather than assume. We'll update this piece once PHP's official release and advisory are out with confirmed CVE mappings, affected versions, and fixed versions.

Frequently asked questions

What are CVE-2026-109618 and CVE-2026-109619?

+
They're identifiers independent researchers have assigned to two critical PHP vulnerabilities, each rated CVSS v4.0 9.2, after embargoed details leaked ahead of PHP's scheduled fix. PHP's own security team has not named these CVE numbers in its official announcement as of publication; it has only confirmed that two critical vulnerabilities exist and that a fix is scheduled.

Is there a fix for these PHP vulnerabilities?

+
PHP scheduled an emergency security release for October 21, 2026 at 14:00 UTC, which may have already shipped by the time you're reading this. There is no complete configuration-only workaround; the recommended interim step, disabling session.upload_progress, reduces risk but is not confirmed to fully close the vulnerability.

What PHP versions are affected?

+
This is disputed across sources. PHP officially supports versions 8.2 through 8.5, so those are the branches that will receive an official fix. Independent researchers have reported the underlying bug affecting versions as far back as PHP 5.4, but that claim is unverified against an official PHP source. Anything on PHP 8.1 or earlier is end-of-life and will not get an official patch regardless.

Is this vulnerability being actively exploited?

+
One research firm reported early attack activity observed via Cloudflare, but we could not independently verify a direct Cloudflare statement confirming this. A security researcher (watchTowr) says it reproduced one of the two bugs in a lab but has not reported observing live attacks. Treat exploitation status as developing rather than confirmed, and patch urgently regardless.

Does disabling session.upload_progress fix the vulnerability?

+
It's a commonly recommended interim stopgap, but multiple researchers and a PHP core developer have stated it is not a confirmed complete fix. The vulnerability is reported to be a memory-handling bug in PHP's own code, not something purely config-level mitigations reliably close. Patching remains the only real fix.

Is there a public exploit for these PHP vulnerabilities?

+
Yes, a proof-of-concept exploit tool is circulating publicly after the embargoed details leaked. We are deliberately not naming, linking to, or describing how it works while the vulnerability remains unpatched for a large share of PHP deployments.

See your full attack chain.
Code, build, runtime. One platform.