On October 20, the PHP security team announced an out-of-band security release for Wednesday, October 21, 2026 at 14:00 UTC, fixing two critical vulnerabilities rated CVSS v4.0 9.2 (CVE-2026-109618 and CVE-2026-109619). Hours before the release, technical details leaked publicly. They point to the session.upload_progress feature, which has been part of PHP since 5.4.0 and is enabled by default. The community quickly converged on an interim mitigation: set session.upload_progress.enabled = Off in php.ini.
That leaves defenders with two questions: how big is the exposed surface, and where should they start? We used Internet Scanning in VirusTotal to answer both.
Note: Official details, affected versions and fixed versions are published by the PHP project with the release. The figures below describe the Internet-facing PHP footprint, not confirmed vulnerable hosts.
Most PHP servers don't say they are PHP
VirusTotal fingerprints roughly 5.1 million IP addresses running PHP (port_service_cpe:php), about 3.8 million of them with at least one port open today. Only around 1.1 million of those announce a version in an HTTP header such as X-Powered-By: PHP/8.3.35.
In other words, roughly four out of five PHP servers hide their version (expose_php = Off, stripped headers, reverse proxies). VirusTotal still identifies them as PHP through other signals: the application on top (WordPress, Laravel, Nextcloud...), PHPSESSID cookies and framework-specific headers. If you only search for a version string, you only see the fraction of the problem that volunteers it.
The version picture: the long tail of end-of-life PHP
Among the servers that do disclose their version, the split is stark:
~272K run a supported branch (8.2 to 8.5), the only branches that receive security fixes from the PHP project.
~758K run an end-of-life branch between 5.4 and 8.1. These branches have session.upload_progress enabled by default and no longer receive security fixes. PHP 7.4 alone accounts for ~187K IPs and PHP 5.4 for ~119K.
~88K run PHP 5.2 or 5.3, which predate session.upload_progress.
Being up to date doesn't buy much time either: about 85K IPs run the exact releases published on September 24 (8.3.35, 8.2.34, 8.4.26 and 8.5.11), the latest available before this fix.
What runs on top, and where
Apache (~2.9M) and nginx (~1.48M) are the web servers most often seen on PHP hosts, followed by LiteSpeed (~90K). On the application side, WordPress dominates with ~538K IPs, followed by Laravel (~141K) and Nextcloud (~107K). Webmail (Roundcube) and database admin panels (phpMyAdmin) add another ~25K high-value targets.
The geography is concentrated: the United States accounts for ~920K PHP hosts with at least one open port, and a handful of cloud and hosting providers (AWS, DigitalOcean, Alibaba, OVHcloud, Hetzner) concentrate a large share. That concentration is good news for remediation: a few providers that push a configuration change or a WAF rule can cover a lot of ground.
Going beyond the web port
PHP rarely travels alone. ~394K PHP hosts also have port 22 open (SSH by default), ~233K port 3306 (MySQL) and ~68K port 3389 (RDP). Those co-exposed services are useful for something else: identifying the exact build behind the web server.
The leaked material references LiteSpeed lsphp82 8.2.34 builds for Debian 12, Ubuntu 22.04 and Ubuntu 24.04, and notes that HTTP headers alone don't tell those builds apart. The OpenSSH package on port 22 does. With the bracket syntax, every condition is pinned to its port:
Of the ~3.5K IPs whose banners show both LiteSpeed and PHP 8.2.34, about 500 also have port 22 open. Across all PHP 8.2.34 hosts, the OpenSSH package on port 22 matches Ubuntu 24.04 on 269 IPs, Ubuntu 22.04 on 112 and Debian 12 on 65. For a defender, that is the difference between "patch everything" and "these are the machines that match the leaked target profile, patch them first". Keep in mind that port 22 reveals the host operating system: PHP may still run inside a container built on a different base image.
Adversaries run PHP too
The exposed surface also includes attacker infrastructure. Around 5.7K PHP hosts with at least one open port have five or more detections in VirusTotal, 729 of them disclosing PHP 8.x. One of them is an old acquaintance: the NOX Stealer panel (rebranded as BOMBAY) on 5.175.221[.]206:8443, which we profiled in our Internet Scanning post, runs nginx 1.24.0 with PHP/8.3.33.
What the VirusTotal corpus saw
The leak left traces across VirusTotal. The archive referenced in the write-up was first submitted at 02:29 UTC on October 21, less than 15 minutes after the first submission of the write-up URL. By the time of writing, 21 crowdsourced reports covering the vulnerabilities had been ingested as collections. Following entity:collection collection_type:report "CVE-2026-109618" is the fastest way to keep up with new reporting as it appears.
What to do now
Patch. Upgrade to the fixed release of your branch (8.2, 8.3, 8.4 or 8.5) as soon as it is available on php.net or through your distribution.
Plan the EOL migration. PHP 8.1 and older no longer receive security fixes. If you are on 5.4 to 8.1, upgrade the branch or check whether your distribution or vendor ships a backport.
Disable upload progress until you patch. Set session.upload_progress.enabled = Off in php.ini (or the pool configuration) and reload PHP-FPM, Apache or LSAPI. It only breaks upload progress bars that rely on the feature. Community analysis suggests it may not cover every vector, so treat it as a stopgap, not a fix.
Filter multipart at the edge. Where an application doesn't need file uploads, block or inspect multipart/form-data requests before they reach PHP. Cloudflare shipped emergency rules to its Managed and Free rulesets on October 21, and its CTO stated that they cover known payloads, while stressing that only updating PHP fully protects a site.
Make sure the WAF can't be bypassed. Edge rules only help if the origin is not directly reachable. Search your own ranges in VirusTotal (for example, entity:ip port_service_cpe:php asn:<your ASN>) to find origins that expose PHP directly to the Internet.
Don't rely on hiding the version.expose_php = Off hides the header, not the vulnerability.
Queries used in this post
Query
What it finds
entity:ip port_service_cpe:php
All IPs where VirusTotal fingerprinted PHP on any port
entity:ip port_service_cpe:php port_status:open
PHP hosts with at least one port currently open
entity:ip port_service_cpe:php port_banner:"PHP/"
PHP hosts that disclose their version in an HTTP header
Note: All counts in this post were taken on October 21, 2026. For large result sets VirusTotal returns estimated totals that vary between runs, so we report the median of seven runs, rounded. Port modifiers without a port in brackets match per IP, not per port: port_service_cpe:php port_status:open means PHP was fingerprinted on the IP and at least one of its ports is open.
Recently, somebody from a fairly mature security team told me something I did not want to hear: if software vendors run βMythos-classβ models on their own code and fix what they find, they must publish a CVE for every fixed vulnerability.
CVE art
My first reaction (vendor hat firmly on, since I now work at Cisco) was: huh? Why? These bugs were found by the vendor, fixed by the vendor and were never public. A vast majority (but not all!) are not exploited. CVE CNA rules make assignment a SHOULD, not a MUST, and whether a quietly shipped fix even counts as βpublicly disclosedβ is something considered debatable. Why would anybody wantΒ it?
My second reaction, a bit later in the conversation was: oh,Β that!
They have a point. Sort of. They were simply describing how their vulnerability management program works. And, I suspect, how many of yours work too. Their problem is about to become everybodyβs problem; they just noticed itΒ first.
The Problem In OneΒ Sentence
Many VM programs start with a vulnerability scan, not with a patch, a vendor release orΒ β¦ a news headline about a new terrible securityΒ issue.
The chain looks likeΒ this:
old sadΒ VM
Note what is not on this list: the vendor advisory. It is not an input in theirΒ case.
Before anybody snickers or ROFLs about it: this was a sound design for about 20 years. In the 2000s and 2010s, an issue that mattered usually got a CVE (yes, before the βvuln-puristsβ tear me to shreds, there were some exceptions to this even back then!). And a CVE got a check from your vulnerability scanner vendor, usually within days (in my Gartner days, we called them βQ/R/Tβ for the reasons you can easily guessβ¦). Auditors want evidence, ticketing systems need an ID, and SLAs need an event that starts the clock. A βscan-firstβ program is what you get when you optimize for all of that at scale. It is a property of the pipeline, not a failure of the people runningΒ it.
So a software or an OS vendor can shout βURGENT, upgrade now!β all it wants. If the fix has no CVE, the scanner (usually) has no finding, there is no ticket, no SLA clock, no change request, and no patch (at the companies that follow thatΒ model).
Here are the two paths side byΒ side:
Paths table
Why This Matters Now: Hello, Vulnerability Apocalypse
I hate the βpost-Mythosβ label as much as the next person, but these numbers are not marketing. (BTW, every time you say βpost-Mythosβ for marketing purposes, Claude kills aΒ kitten.)
In Patch Sound Barrier Part 2 I defined the βvulnerability apocalypseβ as four things arriving together: massive vulnerability volume, fast exploit development, exploitation at scale and resulting incident damage. Factor #1 is no longer theoretical: high and critical CVEs from notable vendors ran at roughly 3.5x the prior monthly record in June 2026, and at about 5x inΒ July.
Now the twist: those charts only count the fixes that got a CVE. The pile of internally found, internally fixed, never-CVEβd bugs is not on any chart. For scale: Anthropic said in May that Mythos Preview had been used to find more than 10,000 high- or critical-severity bugs, not all of them publicly reported.
That is the part of the iceberg your scanner cannot see (usually). So a big chunk of the AI eraβs fixes may be exactly the ones that scan-first programs miss! Your patch SLA dashboard stays green while your actual exposure grows. Green-but-wrong is worse thanΒ red.
BTW, βinternally foundβ does not mean βnobody else knows.β Attackers have access to capable models too, AI makes patch diffing cheap, and some vendor advisories now list βinternally discoveredβ bug classes that also contain actively exploited bugs. Found internally means βwe found it too,β not βwe found it first and only.β Yes, I know, Captain Obvious strikes again, but a scan-first program behaves as if this were not obvious atΒ all.
Timing makes it worse. Here is one real example (via X post): CVE-2026β72529, a remote, unauthenticated script execution bug in TrueConf Server. The issue was found in June, the patch was also released in June, exploitation was spotted in July, and the CVE was assigned in August, by Kaspersky as a third-party CNA, not by the vendor. For a scan-first program, that bug did not exist for about two months, including the month it was being exploited. Note that even the βexploited bugs get a CVEβ metric ran a month behind the exploitation hereβββaway too slow. (Yes, it is a niche product. Niche is exactly where scanner coverage is thinnest.)
Who Taught Us to Think ThisΒ Way?
Naturally, I also asked on X, and I got my share of thoughtful responses like βask if adversaries will delay exploitation until a CVE and severity score existβ, βFYI, vulnerabilities without CVEs, or with low scores, regularly cause damageβ and a reminder that βa CVE reflects severity after discovery, not exploit probability.β All true, all ignored by scan-first vulnerability management programsβ¦
The best answer IMHO was this point: somewhere along the way, βa lookup key [CVE] became a proxy for risk.β Indeed, how did thatΒ happen?
βScan-firstβ did not appear out of nowhere. Scanner vendors taught the market to think this way, and the market went alongΒ happily.
Some of the blame here is well deserved:
Coverage was sold in CVEs. For years, the headline number in every bake-off was how many CVEs a product detects and how fast a new check ships. Many customers learned that the CVE list is the threatΒ model.
The CVE became the unit of work. Dashboards, risk scores, SLA reports and ticketing integrations were all built around CVE IDs. Anything without one is a second-class citizen in the product, and therefore in theΒ program.
βClean scanβ became audit evidence. Compliance scanning made βthe scan report is cleanβ the proof that auditors still ask for. In PCI DSS ASV scanning, pass or fail is largely decided by the CVSS scores of the findings. (Yes, I co-wrote a book on PCI, so I am not innocent hereΒ either.)
Non-CVE coverage exists, but nobody marketed and sold it. Many scanners do have checks keyed to vendor bulletins, and most flag outdated or unsupported versions. In practice, those often land as low-priority findings that no SLA tracks. They were never the thing on theΒ slideβ¦
And before you say βjust use KEV and EPSSβ: both are keyed onΒ β¦ CVE IDs. KEV only lists vulnerabilities that have an assigned CVE, and EPSS only scores CVEs. βRisk-basedβ Vulnerability Management built on CVE-keyed inputs inherits the exact same blind spot. Not very risk-aware, thatΒ is.
To be fair, all of this was once rational. A CVE is a clean, shared, countable unit, and you can build a product (and a business) on countable units. This worked kinda OK in 2015, worked poorly in 2021, and really, really does not work inΒ 2026.
So a market that was essentially taught βif itβs not in the scanner, it didnβt happenβ now needs to learn something new, and the people who taught the first lesson are best placed to teach the nextΒ one.
The Three Obvious Fixes Are Suboptimal
CVEs are not only a scanner input; they are also a public accountability ledger. This industry has a long and not very proud history of silent patching, and βtrust us, we fixed it, this matters to youβ has earned all the skepticism itΒ gets.
At the same time, the vendor-side point also stands. Defenders at software companies will use those models to fix their code, and their code is getting better and more secure. Flooding the market with huge piles of CVEs will not help anybody. Both things are true at once, and that is what makes this problem interesting.
So, the quick fixes, each with aΒ catch:
Option 1: A CVE for every internally found bug. At AI scale, this floods scanner queues with hundreds of findings that a single upgrade closes. We have actually run this experiment: after the Linux kernel became a CNA in 2024, it started assigning CVEs for thousands of backported fixes, and people have complained about the noise ever since. Even Epoch had to footnote it as noise in their CVEΒ charts.
Option 2: Bundled CVEs. Cisco now ships scheduled security releases with CVEs bundled by weakness type (CWE), and still assigns an individual CVE when a bug is exploited or needs a compensating control. It is a pragmatic middle path. If a bundle is scored by its worst member, it also pushes you toward handling exceptions per release rather than per CVE, which, as you will see below, is exactly where I think you should end upΒ anywayβ¦
Option 3: Read vendor advisories manually. Ah, the good old days! Mapping advisories from hundreds of vendors onto thousands of assets by hand does not scale, and frankly neverΒ did.
Note that Option 3 is wrong about the how, not the what. The advisory does need to reach your program. A human with a browser and 200 vendor websites just cannot be the delivery mechanism.
So What Would Actually Work? Make the Advisory anΒ Input
In my strictly private opinion, the vendor advisory must become a first-class input to vulnerability management, next to the scan, not behind it. Not βinstead of the scan,β and not βif the scanner vendor gets around toΒ it.β
The chain should look likeΒ this:
new coolerΒ VM
Obviously, better programs do this today, so for a decent percentage of this blogβs readers this should really not be news. This blog is not forΒ you.
Getting there needs three parties to move, not one (plus your auditor):
Vendors: publish machine-readable advisories (CSAF much?) with fixed versions, urgency and exploitation status. And keep the accountability ledger honest: assign an individual CVE the moment a bug is exploited or needs a compensating control. (Yes, this is close to what my employer committed to in June. This is the easy part; the next bullets are the hardΒ ones.)
Scanner vendors: you taught the market that the scanner is the source of truth, so you get the first job. Ingest those feeds and create findings under your own IDs, no CVE required, at real severity rather than as an informational footnote. You already flag βoutdated versionβ; this is the same idea, driven by vendor data. (Yes, the risk is that coverage follows market share. Niche OT vendors, I am looking atΒ you.)
VM programs: add a currency metric next to CVE closure, e.g., percent of assets within N releases of the vendorβs latest security release. In other words, patch the release, not just the CVE. If your remediation speed is capped by the patch sound barrier, spend that limited throughput on upgrades, not on ticket accounting.
Your auditor: if audit accepts only CVE closure as evidence, nothing above will change. Bring them in early and show them the currency metric before it shows up in an auditΒ finding.
What To Do ThisΒ Week
Run the 30-minute self-test:
Pick your top vendor by asset count (or by internet exposure).
Pull their last three security releases and count the security fixes vs. the CVEs. (If the release notes just say βmultiple security fixesβ with no count, congrats, that is a findingΒ too.)
Check what your scanner flagged for those releases.
The difference between what the vendor fixed and what your scanner flagged is your blind spot, inΒ numbers.
Ask your scannerΒ vendor:
What do you do with a vendor advisory that has noΒ CVE?
Do you ingest CSAF advisories, and from whichΒ vendors?
What is your median lag from a vendor advisory to a detection?
Can you show me every asset more than N releases behind the vendorβs latest security release, and at what severity?
Change yourΒ program:
For edge and crown-jewel asset classes, start the SLA clock at the vendor security release, not at the scannerΒ finding.
Grant exceptions per release, not perΒ CVE.
Report a currency metric next to CVE closure, e.g., βpercent of internet-facing assets on the vendorβs latest security release within 30Β days.β
Put it in contracts: vendors provide machine-readable advisories with fixed versions and exploitation status, and scanner vendors cover non-CVE vendor fixes at real severity.
So?
With my vendor hat on, I still donβt think every internally found bug needs its own CVE. With my VM hat on, it should not matter: your program should not need one to act. Patch the release, not just the CVE. If the gap is zero, congrats, and please tell me how you did it. If it is not, you have found your blind spotβ¦ haveΒ fun!
A critical vulnerability has been discovered in the popular WordPress content management system that allows attackers to execute arbitrary code on the web server. The vulnerability has been assigned the number CVE-2026-87902. The good news is that on September 22, WordPress released an update that patches it. The bad news is that the first attempts to exploit CVE-2026-87902 were detected just a few hours after the patch was released. Therefore, all companies whose corporate websites or blogs run on this platform are advised to update immediately.
WordPress versions affected by CVE-2026-87902
According to data published by WordPress on GitHub, all versions of the CMS from 4.7.0 through 7.1.1 are vulnerable. The company has released updates for all supported branches of the system; a complete table listing the patched version numbers can be found on the companyβs GitHub page. The latest version of WordPress should be updated to version 7.1.2 (or newer).
Whatβs the nature of the CVE-2026-87902 vulnerability, and why is it so dangerous?
Under normal circumstances, WordPress loads PHP template files only from a specific folder within the active theme. However, due to the CVE-2026-87902 vulnerability, an attacker can craft a request to WordPress in such a way that an arbitrary PHP file is included β without requiring any authorization. Yes, the file must already be uploaded to the targeted server in some way, but thatβs not really a problem for an attacker.
It sounds like a path traversal vulnerability, but in most publications, CVE-2026-87902 is classified as an RCE (Remote Code Execution) vulnerability because, under certain WordPress and PHP server configurations, the attack can lead to the execution of arbitrary code.
How to stay safe
The only way to secure a corporate WordPress site is to install the latest version. The researcher who discovered the vulnerability also offers several tips for hardening CMS security, but emphasizes that these are meant to complement the patch, not replace it.
The Hacker News lists several PHP filenames and IP addresses used in the attack via CVE-2026-87902. These can serve as indicators that a WordPress instance has been compromised.
Given that only a few hours pass between the publication of information about a vulnerabilityβs existence and the start of attacks exploiting it, itβs crucial for companies to have a properly configured, centralized vulnerability management system. To achieve this, they should have a specialized solution capable of identifying and resolving vulnerabilities, prioritizing them based on actual risks, and automating remediation processes. Our vulnerability management module for Kaspersky Next Optimum can help with this task.
The Flashpoint Method: Prioritizing Vulnerabilities in an Era of AI-Accelerated Discovery
We outline Flashpointβs practical, repeatable framework for prioritizing vulnerabilities based on real-world risk, exploitability, and business impact.
Organizations are gaining new ways to identify vulnerabilities at scale, thanks to new generations of powerful AI models. However, security teams still face the same fundamental question: which vulnerabilities actually matter?
Vulnerability management teams have increasingly struggled to keep pace with growing disclosure volumes. From January 1, 2026 to June 30, 2026, Flashpoint tracked 21,667 vulnerabilities, an 8% period-over-period increase, with one-in-five containing publicly available exploit code at time of disclosure. At the same time, the gap between disclosure and exploitation continues to shrink, with some vulnerabilities weaponized in as little as 24 hours.
Flashpointβs Method for Threat-Informed Vulnerability Prioritization
Recent developments such as Anthropicβs Mythos model have highlighted the growing potential for AI-assisted vulnerability discovery. As advances in code analysis enable researchers and organizations to identify software flaws at unprecedented speed and scale, the volume of discovered vulnerabilities is set to potentially increase significantly across software ecosystems.
Thatβs why we created this guide, The Flashpoint Method for Threat-Informed Vulnerability Prioritization, a practical, intelligence-driven framework designed to help vulnerability and exposure management teams cut through the AI-driven noise and focus on the vulnerabilities that matter most. By incorporating real-world exploitation activity, threat actor behavior, asset exposure, business context, and remediation considerations, organizations can make faster, more informed decisions and reduce risk more effectively.
Download to gain:
A clear, threat-informed prioritization framework: How to assess which vulnerabilities demand immediate attention, and why β moving beyond static severity scores alone.
Core and expanded prioritization checklists: Criteria spanning asset criticality, active exploitation, CVSS severity and ransomware risk, social risk and community chatter, business context, compensating controls, zero-day status, KEV inclusion, EPSS scoring, ease of remediation, and vulnerability age.
How to operationalize prioritization at AI scale: Insight into how Flashpointβs vulnerability intelligence platform and analyst expertise help teams keep pace as AI-assisted discovery accelerates disclosure volume.
Prioritize Vulnerabilities More Effectively and Faster Using Flashpoint
While increased visibility into vulnerabilities is ultimately a positive for defenders, it amplifies a challenge security teams already faceβseparating which vulnerabilities represent meaningful risk to your environment and require immediate action.
What is threat-informed vulnerability prioritization?
Threat-informed vulnerability prioritization is the process of evaluating vulnerabilities based on real-world risk rather than severity scores alone. It incorporates factors such as active exploitation, exploit availability, threat actor activity, asset exposure, business context, and remediation considerations to determine which vulnerabilities require immediate attention.
Why is vulnerability prioritization important?
Organizations face thousands of newly disclosed vulnerabilities each year, while security teams have limited time and resources to remediate them. Effective vulnerability prioritization helps organizations focus on the vulnerabilities most likely to be exploited and most likely to impact their environment.
How is AI changing vulnerability management?
AI-assisted code analysis is enabling researchers and organizations to identify software flaws faster and at greater scale. While increased visibility into vulnerabilities benefits defenders, it also increases the volume of vulnerabilities that security teams must evaluate, making effective prioritization even more important.
Why isnβt CVSS enough for vulnerability prioritization?
CVSS provides a standardized measure of technical severity, but it does not account for whether a vulnerability is actively being exploited, relevant to your environment, or likely to impact your business. Effective prioritization combines severity with threat intelligence and organizational context to assess real-world risk.
How does Flashpoint help organizations prioritize vulnerabilities?
Flashpoint combines analyst-driven vulnerability intelligence with real-world exploitation data, threat actor insights, asset exposure, and business context to help organizations identify the vulnerabilities that pose the greatest operational risk. This intelligence supports faster, more informed remediation decisions and operationalizes threat-informed vulnerability management at AI scale.