State of Java Exploits 2026
This year brought a record 5,649 Java security flaws. Attackers have used 18.
The count says little about danger. Attackers exploit a small and familiar set of flaws: ones with public exploit code, in a few kinds of bug, from a short list of projects, and often years old.
Each dot is a Java CVE published between 1 January and 1 November of the year shown. This report's data runs to 1 November 2026, so earlier years are counted over the same ten months. Red dots are those attacked by 1 November of the same year.
The surge in flaws did not bring a surge in attacks #
Between 1 January and 1 November, 5,649 security flaws were published for Java software. That is more than five times as many as in the same months of 2025. In no earlier year did those months produce even a fifth as many.
The number of new Java flaws attacked had risen every year since 2021. By 1 November 2024, attackers had exploited 10 of that year's flaws. By the same date in 2025, the number had nearly doubled, to 19.
This year's surge did not push it higher. By 1 November, attackers had exploited 18 of the flaws published in 2026.
Source: CVE List, NVD, OSV, CISA KEV, VulnCheck KEV, CISA SSVC
Most of the new flaws are Oracle's #
Until this year, Java had no part in the CVE boom. Worldwide, the number published each year nearly tripled between 2018 and 2025, to 48,151. Java's yearly count barely moved.
The 2026 surge comes mostly from Oracle. Its products account for 3,659 of this year's Java CVEs. In all of 2025, they accounted for 165. Java CVEs from other vendors have grown too, but more slowly than CVEs overall.
Source: CVE List, NVD, OSV. 2018 counts: all CVEs 16,510, Java 915, Java without Oracle 449. The comparison starts in 2018 because the number of CVEs published worldwide nearly tripled in 2017, when many more organisations began issuing them. The first chart on this page starts there too. NVD has not yet recorded the product for 19% of the CVEs published in 2024 and 37% of those from 2025. Some Java CVEs among them are not counted here yet, so the Java lines from 2024 on will rise as NVD catches up.
Severity scores measure harm, not the odds of attack #
Most organisations decide what to patch by CVSS score. The score estimates the harm a flaw could cause. It does not estimate the chance that anyone will exploit it.
The usual cut-off is 7.0, the line between medium and high. Patching every Java CVE at or above it means 8,648 flaws, half the total. That covers 238 of the 288 that attackers have exploited. It misses the other 50, about one in six. Move the line to test a different policy.
Source: NVD and CNA CVSS scores. Exploit code: Exploit-DB, Metasploit, Nuclei, or a GitHub proof of concept with five or more stars.
The score does not predict exploit code either. Among medium-rated Java CVEs, 267 have public exploit code or a recorded attack. Among critical ones, 266 do.
A much shorter list that catches almost as many attacks #
There is a better place to start. Public exploit code, published in catalogues such as Exploit-DB and Metasploit or shared on GitHub, exists for 691 Java CVEs. That is fewer than one in 25.
Those 691 include 230 of the 288 Java CVEs attacked in the wild, four in every five. Patching everything scored 7.0 or higher catches 238, but the list is twelve times as long.
Sometimes the attack comes first and the published code follows. That happened with 35 of the 230. In the other 195, the code was public before any recorded attack.
Source: NVD and CNA CVSS scores; Exploit-DB, Metasploit, Nuclei, GitHub; CISA KEV, VulnCheck KEV, CISA SSVC.
Exploit code is also a sharper signal in Java than across software as a whole. One in three Java CVEs with public exploit code has been attacked. For all other CVEs, the rate is one in ten.
Much of the difference lies in who the code is written for. Nearly three in four Java exploits target products from the largest vendors, those with 1,000 or more CVEs on record, such as Oracle and Apache. Outside Java, almost half target vendors with fewer than ten CVEs. Attackers seldom use those: about one in 25 has been exploited in the wild.
Vendor size does not explain all of it. Even among exploits for the largest vendors, those for Java products lead to attacks twice as often as the rest.
This year's flood has added almost nothing to the list. Of the 5,649 Java CVEs published in 2026, 36 have public exploit code. Oracle's products are mostly closed source. Just two of its 3,659 new Java CVEs have a public exploit.
Source: NVD and CNA vendor names, ignoring Linux distributions and other redistributors. CVEs with no vendor recorded are left out: 43 Java, 1,266 other.
Two-thirds of attacked Java CVEs are rated "automatable" by CISA, meaning a script can carry out the attack from start to finish. Fewer than half of other attacked CVEs are. Ransomware groups are known to have used 17% of attacked Java CVEs. For other attacked CVEs, the figure is 11%.
Forecasts and catalogues miss most new attacks #
Many teams already look past the severity score, to EPSS forecasts and CISA's catalogue of exploited flaws. Both help. Neither saw most of last year's attacks coming.
CISA's catalogue lists 102 of the 288 Java CVEs with recorded attacks. It adds a flaw once attacks are confirmed, so it shows what has already been hit.
EPSS forecasts the chance of an attack in the next 30 days. A year before this report, on 1 November 2025, 766 Java CVEs with no recorded attack yet had a forecast of 10% or more. Over the following year, attackers were first recorded using 46 Java CVEs. The list included 11 of them. Eighteen had not been published when the forecast was made.
EPSS does best with old, well-known flaws, such as the Struts and WebLogic bugs attackers keep returning to. It does worst with new flaws in closed-source products. The day before attacks were first recorded on four Oracle CVEs this past year, EPSS gave each of them a chance of less than 1%.
Public exploit code picked out more of the 46. On 1 November 2025, code was public for 446 Java CVEs with no recorded attack yet. That list included 14 of them. The 446 highest EPSS forecasts that day included 9. No list drawn up that day could include the 18 flaws not yet published.
| List | CVEs on it | Attacked | Hit rate |
|---|---|---|---|
| EPSS top 1% | 129 | 7 | 1 in 18 |
| Public exploit code | 446 | 14 | 1 in 32 |
| EPSS 10%+ | 766 | 11 | 1 in 70 |
| EPSS 1%+ | 3,383 | 18 | 1 in 188 |
| CVSS 7.0+ | 4,751 | 23 | 1 in 207 |
Source: FIRST EPSS scores of 1 November 2025 and of the day before each first recorded attack; NVD and CNA CVSS scores; CISA KEV, VulnCheck KEV, CISA SSVC. The 18 Java CVEs published after 1 November 2025 count as misses on every list. Exploit code with no recorded date (67 entries) counts as public by then.
Three kinds of bug draw half the attacks #
Injection, deserialization and file-handling flaws let an attacker run code on a server or reach its files. Only 14% of Java CVEs are of these kinds. They account for 51% of the attacked ones.
Access-control flaws are the reverse. They make up almost half of Java CVEs but only about a quarter of those attacked.
Deserialization is a peculiarly Java problem. It accounts for 13% of attacked Java CVEs, more than four times its share elsewhere. Java made it easy to rebuild objects from incoming bytes. Attackers learned to craft bytes that run their commands during the rebuild.
Source: NVD and CNA CWE, grouped by Waratek. Counts only CVEs with a usable weakness type: 12,392 of 17,688, and 235 of 288 attacked.
Attackers return to the same projects #
Twelve projects account for 149 of the 288 Java CVEs that attackers have exploited, more than half. Those projects produced only a quarter of all Java CVEs.
Some are hit year after year. Every year from 2016 to 2025 produced at least one Oracle WebLogic Server flaw that was later attacked. Apache Struts has attacked flaws from twelve different years, the earliest from 2006.
In a few projects, the odds are far higher. Across Java, one CVE in 61 has been attacked. In Log4j, and in GeoServer and GeoTools, the rate is roughly one in three.
The JDK is the exception. All 29 of its attacked flaws were published between 2008 and 2016. None of the JDK flaws published since then has been attacked.
Source: NVD and CNA product names, CISA KEV, VulnCheck KEV. Each CVE counts under the first product it names.
The JDK got safer. The libraries on top of it did not. #
A decade ago, attackers aimed at the Java runtime itself. Browser applets let any web page run code on a visitor's Java runtime. In 2013, Oracle's JDK and JRE had 177 CVEs. Browsers dropped the plugin, Oracle deprecated applets, and the count fell to 12 in 2025.
Meanwhile, the software built on Java produced more and more CVEs. CVEs in frameworks, application servers and other Java products, excluding Oracle's, rose from about 60 in 2010 to more than 900 a year in 2022 and 2023. This year there have been 1,990.
Source: NVD CPE, OSV
Attackers keep using old Java bugs #
Attackers tend to exploit what is new. Outside Java, half of the CVEs with attack evidence recorded in 2026 were two years old or less.
Java is different. Half of the Java CVEs attacked this year were 4.5 years old or more. More than two in five were published over five years ago, twice the share elsewhere. CISA's catalogue shows the same lag. Since 2023, 45% of the Java CVEs it added were more than a year old when listed. For other CVEs, the share was 21%. In October 2026 it added a Struts flaw published ten years earlier.
Source: VulnCheck KEV latest evidence, CVE List
Source: CISA KEV (date added), CVE List (date published). Listings dated before publication are drawn at "same day".
The flaw that gets you hacked may not have a CVE yet #
Severity scores, exploit code and a project's history of attacks all start with a published CVE. A zero-day is a flaw that attackers use before anyone has published one. It cannot appear on any priority list.
Waratek covers both cases. It runs inside the JVM, where it sees the full application context. Its secure RASP rules stop OWASP Top 10 attacks as they happen, whether or not the flaw has been reported. They cover attacks including remote code execution, injection, deserialization, cross-site scripting and file system abuse. For known CVEs, its virtual patches fix the flaw in the running application, without a code change or an upgrade. They protect applications that have not been patched yet, and those that never will be.