CVE-2026-94449

Denial of Service
Affects
Quarkus
in
Quarkus
No items found.
Versions
>=3.17.0.CR1 <3.27.5.3, >=3.28.0.CR1 <3.33.3.3, >=3.34.0.CR1 <3.39.5, >=3.40.0.CR1 <3.40.0

Patch Available.

Exclamation circle icon
Patch Available

This Vulnerability has been fixed in the Never-Ending Support (NES) version offered by HeroDevs.

Overview

Quarkus is a Kubernetes-native Java framework optimized for cloud-native applications, containers, and serverless workloads. It builds on standard libraries (Jakarta EE, Eclipse Vert.x, Hibernate, Netty) and compiles to both JVM and GraalVM native images for fast startup and low memory use. The SmallRye Fault Tolerance extension provides retries, circuit breakers, timeouts, bulkheads and other fault tolerance strategies for Quarkus applications, built on the SmallRye Fault Tolerance library.

A denial of service vulnerability (CVE-2026-94449) has been identified in the SmallRye Fault Tolerance extension of Quarkus, which allows attackers to exhaust the application's memory by repeatedly calling a method protected by a programmatic guard through @ApplyGuard or @ApplyFaultTolerance. Each call leaves internal metrics objects behind, so memory use grows until the application slows down and crashes.

Per OWASP: The Denial of Service (DoS) attack is focused on making a resource (site, application, server) unavailable for the purpose it was designed.

This issue affects multiple versions of Quarkus that include the io.quarkus:quarkus-smallrye-fault-tolerance package.

Details

Module Info

Vulnerability Info

This High-severity vulnerability is found in the io.quarkus:quarkus-smallrye-fault-tolerance package in multiple versions of Quarkus. The extension depends on the SmallRye Fault Tolerance library, whose DelegatingMetricsCollector caches one MetricsCollector per metered operation:

private final ConcurrentMap<MeteredOperation, MetricsCollector<V>> cache = new ConcurrentHashMap<>();

@Override
public Future<V> apply(FaultToleranceContext<V> ctx) {
    MeteredOperationName name = ctx.get(MeteredOperationName.class);
    MeteredOperation operation = name != null
            ? new DelegatingMeteredOperation(originalOperation, name.get())
            : originalOperation;
    FaultToleranceStrategy<V> delegate;
    if (operation.enabled()) {
        delegate = cache.computeIfAbsent(operation,
                ignored -> new MetricsCollector<>(this.delegate, provider.create(operation), operation));
    } else {
        delegate = this.delegate;
    }
    return delegate.apply(ctx);
}

When a method annotated with @ApplyGuard (or the deprecated @ApplyFaultTolerance) runs a programmatic Guard, TypedGuard or FaultTolerance, the fault tolerance interceptor puts a new MeteredOperationName into the context on every invocation. apply() therefore wraps the operation in a new DelegatingMeteredOperation each time. That class does not implement equals or hashCode, so the cache, which is keyed by the object instance, never finds an existing entry. Every call adds a new DelegatingMeteredOperation and MetricsCollector to a map that lives as long as the guard, which is usually an application-scoped singleton. An unauthenticated attacker who can repeatedly reach such an endpoint makes the heap grow with each request, causing rising garbage collection pressure, slowdowns and finally an OutOfMemoryError. The exported Micrometer or OpenTelemetry meters stay bounded because they are de-duplicated by name, so the growth does not show up in the metrics themselves. Methods that use only declarative annotations such as @Retry or @CircuitBreaker do not set a MeteredOperationName and are not affected.

Mitigation

Only recent versions of Quarkus are community-supported. Older lines are End-of-Life and will not receive public updates to address this issue. Quarkus LTS releases are maintained for 12 months from release; see the project's LTS release policy.

Users of the affected components should apply one of the following mitigations:

  • Upgrade Quarkus to a currently supported release that contains the fix.
  • Leverage a commercial support partner like HeroDevs for post-EOL security support.

‍

Credits

  • Jan from Red Hat (finder)
Vulnerability Details
Severity
Level
CVSS Assessment
Low
>=0 <4
Medium
>=4 <6
High
>=6 <8
Critical
>=8 <10
High
ID
CVE-2026-94449
PROJECT Affected
Quarkus
Versions Affected
>=3.17.0.CR1 <3.27.5.3, >=3.28.0.CR1 <3.33.3.3, >=3.34.0.CR1 <3.39.5, >=3.40.0.CR1 <3.40.0
NES Versions Affected
Published date
October 23, 2026
≈ Fix date
October 23, 2026
Category
Denial of Service
Vex Document
Download VEXHow do I use it?
Sign up for the latest vulnerability alerts fixed in
NES for Quarkus
Rss feed icon
Subscribe via RSS
or

By submitting the form I acknowledge receipt of our Privacy Policy.

Thanks for signing up for our Newsletter! We look forward to connecting with you.
Oops! Something went wrong while submitting the form.