// ORIGINAL RESEARCH · SEPTEMBER 2026
What actually lands on a release line after it goes end of life
Everyone agrees that running end-of-life software is a risk. Almost nobody publishes the size of it. This counts the CVE records disclosed after each line's end-of-life date that still name that line — computed from NVD's structured version data, with the method and the raw identifiers below so the result can be checked.
CVE records disclosed against Erlang/OTP 24 since it reached end of life on 10 May 2024 — 9 of them scoring CVSS 7.0 or higher, topping out at 10.
CVE records registered against RabbitMQ itself over the same period. The broker is quiet. The runtime underneath it is not.
Post-EOL CVE records across every line measured. Each is a published advisory with no upstream fix for the affected branch.
The finding
The number that matters is not the total. It is the gap between two rows of the same table. RabbitMQ 3.12 and 3.13 have accumulated no CVE records since their end-of-life dates. Erlang/OTP — the runtime every RabbitMQ node executes on — has accumulated twenty-two against its 24 line alone, including CVE-2025-32433 at CVSS 10.0.
Most vulnerability management treats the broker as the unit of risk. It fingerprints the RabbitMQ version, finds nothing outstanding, and moves on. The advisories are one layer down — in the TLS implementation, the SSH application, the crypto libraries and the standard library the broker calls into — and a scanner that reports on the application rarely reports on the runtime beneath it.
This is not a RabbitMQ-specific problem. It is the general shape of the thing: risk accumulates fastest in the layer nobody has assigned an owner to.
The data
| Release line | End of life | CVEs since | CVSS ≥ 7.0 | Highest CVSS |
|---|---|---|---|---|
| OTP 24 | 2024-05-10 | 22 | 9 | 10 |
| OTP 25 | 2025-05-17 | 21 | 8 | 9.8 |
| OTP 26 | 2026-05-26 | 17 | 7 | 8.2 |
| ZooKeeper 3.5 | 2022-06-01 | 1 | 1 | 9.1 |
| ZooKeeper 3.6 | 2022-12-30 | 1 | 1 | 9.1 |
| ZooKeeper 3.7 | 2024-01-19 | 1 | 0 | 5.3 |
| Solr 7 | 2022-05-11 | 10 | 8 | 9.8 |
| Solr 8 | 2024-10-25 | 3 | 1 | 8.2 |
| Spring Framework 5.3 | 2024-08-31 | 6 | 0 | 6.5 |
| RabbitMQ 3.12 | 2024-02-21 | 0 | 0 | — |
| RabbitMQ 3.13 | 2024-09-17 | 0 | 0 | — |
End-of-life dates from each project's published lifecycle or endoflife.date. CVE data from NVD, retrieved September 2026.
Method
- Retrieve every CVE registered against each product's own CPE from the NVD 2.0 API, paginated to completion. Not a keyword search: keyword matching returns advisories for unrelated software that merely mention the product, which is the most common way this kind of analysis goes wrong.
- Discard records NVD marks rejected, and records carrying no CVSS base score.
- For each release line with a citable community end-of-life date, keep the records published after that date whose structured CPE version range still includes the line. Platform CPEs — the Debian and Red Hat entries riding along on many records — are filtered out, because they describe the distribution rather than the software.
- Report the count, how many scored 7.0 or above, and the highest score. Every CVE identifier behind every figure is listed below.
The retrieval and analysis scripts are published in the site repository so the study can be reproduced rather than taken on trust.
Limitations, stated plainly
These are counts of CVE records. They are not counts of defects, and they are certainly not measures of exploitability. Three things follow, and they cut against the headline as much as for it.
- A low count is not a clean bill of health. Projects differ in how consistently they request CVEs and how completely CPE data is assigned. Some fix issues quietly. RabbitMQ's zero should be read as “no records in NVD”, not as “no vulnerabilities”.
- CVSS is a severity estimate, not a risk assessment. A 10.0 in a component you do not expose is less urgent than a 6.5 on your edge.
- The set is small because the dates are. Only lines with a citable end-of-life date can be measured. Apache Kafka and Apache ActiveMQ publish no per-line EOL dates at all, so they cannot appear here — which is its own kind of problem for anyone trying to plan.
We sell extended support for several of the products measured here, so treat the framing with appropriate suspicion and check the numbers. That is what the method section and the identifier list are for.
Every identifier behind the counts
OTP 24 — 22 records after 2024-05-10
CVE-2025-32433 · CVE-2026-23941 · CVE-2026-23942 · CVE-2026-23943 · CVE-2026-28808 · CVE-2026-28810 · CVE-2026-32147 · CVE-2026-42789 · CVE-2026-42790 · CVE-2026-42792 · CVE-2026-48855 · CVE-2026-48856 · CVE-2026-48858 · CVE-2026-49759 · CVE-2026-49760 · CVE-2026-53422 · CVE-2026-54886 · CVE-2026-54887 · CVE-2026-54891 · CVE-2026-55952 · CVE-2026-55953 · CVE-2026-58227
OTP 25 — 21 records after 2025-05-17
CVE-2026-23941 · CVE-2026-23942 · CVE-2026-23943 · CVE-2026-28808 · CVE-2026-28810 · CVE-2026-32147 · CVE-2026-42789 · CVE-2026-42790 · CVE-2026-42792 · CVE-2026-48855 · CVE-2026-48856 · CVE-2026-48858 · CVE-2026-49759 · CVE-2026-49760 · CVE-2026-53422 · CVE-2026-54886 · CVE-2026-54887 · CVE-2026-54891 · CVE-2026-55952 · CVE-2026-55953 · CVE-2026-58227
OTP 26 — 17 records after 2026-05-26
CVE-2026-42789 · CVE-2026-42790 · CVE-2026-42792 · CVE-2026-48855 · CVE-2026-48856 · CVE-2026-48858 · CVE-2026-49759 · CVE-2026-49760 · CVE-2026-53422 · CVE-2026-54886 · CVE-2026-54887 · CVE-2026-54891 · CVE-2026-55737 · CVE-2026-55950 · CVE-2026-55952 · CVE-2026-55953 · CVE-2026-58227
ZooKeeper 3.5 — 1 records after 2022-06-01
ZooKeeper 3.6 — 1 records after 2022-12-30
ZooKeeper 3.7 — 1 records after 2024-01-19
Solr 7 — 10 records after 2022-05-11
CVE-2023-44487 · CVE-2023-50291 · CVE-2023-50292 · CVE-2023-50298 · CVE-2023-50386 · CVE-2024-45216 · CVE-2024-45217 · CVE-2024-52012 · CVE-2025-24814 · CVE-2026-22022
Solr 8 — 3 records after 2024-10-25
Spring Framework 5.3 — 6 records after 2024-08-31
CVE-2026-22735 · CVE-2026-22737 · CVE-2026-22740 · CVE-2026-22741 · CVE-2026-22745 · CVE-2026-41839
Frequently asked questions
How were these counts produced?
For each product, every CVE was retrieved from NVD by CPE match against that product's own CPE — complete and paginated, not a keyword search and not a sample. Each record was then tested two ways against a release line: was it published after that line's community end-of-life date, and does its structured CPE version range still include that line. Only records satisfying both are counted. The scripts are in the site repository and every CVE identifier behind every figure is listed on this page.
Why CPE matching rather than searching for the product name?
Because keyword search is wrong often enough to invalidate the result. Searching NVD for "rabbitmq" returns an Ansible Tower flaw and a SolarWinds flaw that merely mention it; "zookeeper" returns Apache Dubbo and Hadoop YARN; "redis" returns a Ruby gem and a Yii template issue. Those advisories name the product without being vulnerabilities in it. CPE matching asks NVD which records are registered against the software itself.
Does a low count mean a product is safe?
No, and this is the most important limitation here. These are counts of CVE records, not of defects and not of exploitability. A project with few records may be genuinely robust, may have a small attack surface, or may simply handle disclosure differently — some projects fix issues without requesting a CVE, and CPE data is assigned with varying completeness across projects. Absence of a record is not evidence of absence of a vulnerability. Treat a low number as a reason to read the project's own security feed, not as reassurance.
Why does RabbitMQ show zero while Erlang/OTP shows twenty-two?
Both figures are what the data says, and the contrast is why this study exists — but read them carefully. RabbitMQ has no CVE records registered against it in NVD since February 2024. That may reflect a genuinely small advisory surface, and it may partly reflect how RabbitMQ advisories are assigned CPEs. The Erlang/OTP figure is not in doubt: those records are numerous, recent and specific. The practical reading is not that RabbitMQ is fine — it is that a broker-only view of exposure misses the layer where the advisories actually are.
Why do so few products appear?
A line only qualifies if its community end-of-life date is published by the project or a citable source. Several widely deployed products — Apache Kafka and Apache ActiveMQ among them — publish no per-line end-of-life dates at all, which makes the question unanswerable for them rather than merely unanswered. That absence is itself a finding: you cannot plan around a date that does not exist.
How current is this?
The data was retrieved from NVD in September 2026. CVE records are added and revised continuously, and records are sometimes back-dated or re-scored after publication, so these counts will drift. The scripts are published so the study can be re-run rather than taken on trust.
Find out what is actually running underneath your brokers
Most estates have never inventoried the runtime layer separately from the application on top of it. A scoping call establishes which versions you are on and which of them still receive fixes.