CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



CVE-2026-54712

CVE-2026-54712: Uncontrolled Resource Consumption in OpenTelemetry Javaagent RMI Context Propagation

Alon Barad
Alon Barad
Software Engineer

Jul 29, 2026·7 min read·2 visits

Executive Summary (TL;DR)

OpenTelemetry Javaagent prior to 2.27.0 allows unauthenticated remote attackers to trigger heap memory exhaustion and Denial of Service (DoS) by sending oversized RMI context propagation payloads.

An uncontrolled resource consumption vulnerability in the OpenTelemetry Javaagent RMI context propagation mechanism allows remote unauthenticated attackers to cause a Denial of Service (DoS) via heap memory exhaustion.

Vulnerability Overview

The OpenTelemetry Javaagent provides auto-instrumentation capabilities for Java applications, injecting tracing, metrics, and logging facilities into various frameworks without requiring manual code modifications. Within this ecosystem, Remote Method Invocation (RMI) instrumentation is utilized to capture and trace remote calls across JVM boundaries. To maintain trace context across these distributed boundaries, the agent intercepts incoming and outgoing RMI invocations to propagate context payloads containing trace IDs, span IDs, and associated metadata.

The vulnerability, tracked as CVE-2026-54712, resides in how the OpenTelemetry Javaagent deserializes incoming RMI context propagation payloads. Specifically, when an RMI endpoint is monitored by an instrumented Java Virtual Machine, the agent attempts to parse trace context from the incoming stream. If the network interface exposing the RMI service is reachable by an unauthenticated attacker, malicious payloads can be transmitted directly to the instrumentation layer.

This flaw belongs to the class of Uncontrolled Resource Consumption (CWE-400), which can lead to complete Denial of Service (DoS) of the underlying application. By abusing the context propagation parsing logic, a remote attacker can force the Java Virtual Machine to allocate an excessive volume of heap memory, triggering a java.lang.OutOfMemoryError (OOM) and terminating the host process.

Root Cause Analysis

The root cause of CVE-2026-54712 is a lack of validation on the cumulative size of strings deserialized from the RMI context propagation stream. Distributed tracing agents must reconstruct context state from serialized inputs. In vulnerable versions of the OpenTelemetry Javaagent (2.26.1 up to, but excluding, 2.27.0), the context deserialization logic is handled by the ContextPayload class, which extracts keys and values directly from an incoming object input stream.

While the implementation implemented a check on the total number of map entries (MAX_CONTEXT_ENTRIES set to 1000) to prevent CPU-based denial of service or hash collision attacks, it omitted any verification of the length of the individual strings. The deserialization loop sequentially reads string keys and values using the ObjectInput.readUTF() method. This method reads a length indicator from the stream and attempts to allocate and construct a corresponding Java String instance.

Because Java's readUTF() function supports strings up to 65,535 bytes in length, an attacker can supply 1,000 entries where every key and value is of maximum length. The JVM is then forced to allocate memory for 1,000 keys and 1,000 values, each close to 64 KB, within a single short-lived network transaction. This results in the allocation of approximately 131 megabytes of heap memory per malicious payload, bypassing the entry-count limit and exhausting system resources when multiple concurrent requests are processed.

Code Analysis

An analysis of the vulnerable source code in io.opentelemetry.javaagent.instrumentation.rmi.context.ContextPayload reveals the precise implementation weakness. The parsing mechanism reads an integer indicating the number of context entries, performs a simple boundary check against MAX_CONTEXT_ENTRIES, and then enters a loop to retrieve the string elements.

// Vulnerable Code Path (v2.26.1)
public static ContextPayload read(ObjectInput oi) throws IOException {
  int size = oi.readInt();
  if (size > MAX_CONTEXT_ENTRIES) { // Only limits entry count, not byte size
    logger.log(FINE, "RMI context propagation payload size {0} exceeds...", size);
    return null;
  }
  Map<String, String> map = new HashMap<>();
  for (int i = 0; i < size; i++) {
    String key = oi.readUTF(); // Allocates string up to 65535 characters
    String value = oi.readUTF(); // Allocates string up to 65535 characters
    map.put(key, value);
  }
  return new ContextPayload(map);
}

The patch implemented in version 2.27.0 introduces two defensive layers. First, the MAX_CONTEXT_ENTRIES limit is lowered from 1,000 to 100, which aligns the threshold with standard corporate limits such as Tomcat's maxHeaderCount. Second, a new constant MAX_CONTEXT_SIZE (8,192 characters) is introduced, and a running total of character allocations is accumulated during the loop.

// Patched Code Path (v2.27.0)
public static ContextPayload read(ObjectInput oi) throws IOException {
  int size = oi.readInt();
  if (size > MAX_CONTEXT_ENTRIES) { // MAX_CONTEXT_ENTRIES is now 100
    logger.log(FINE, "RMI context propagation entries count {0} exceeds...", size);
    return null;
  }
  int contextSize = 0;
  Map<String, String> map = new HashMap<>();
  for (int i = 0; i < size; i++) {
    String key = oi.readUTF();
    String value = oi.readUTF();
    contextSize += key.length() + value.length();
    if (contextSize > MAX_CONTEXT_SIZE) { // MAX_CONTEXT_SIZE is 8192
      logger.log(FINE, "RMI context propagation payload size exceeds maximum...");
      return null; // Triggers early abort
    }
    map.put(key, value);
  }
  return new ContextPayload(map);
}

> [!WARNING] > Note that this check is post-facto. The readUTF() call still instantiates the String object into memory before its length is checked. While this prevents the massive accumulation across 100 entries, an attacker can still force the allocation of a single pair of large strings on the first iteration before the limit is exceeded. This minimal residual risk is unlikely to cause a Denial of Service unless executed under highly concurrent conditions.

Exploitation Methodology

Exploiting CVE-2026-54712 requires network line-of-sight to an RMI endpoint exposed by an application running the vulnerable OpenTelemetry Javaagent. Since RMI registries usually listen on default TCP ports such as 1099 or 1098, an attacker begins by identifying accessible RMI services on the target network. Authentication is not required because context propagation is intercepted and processed prior to standard application-level authentication checks.

To construct an exploit, a client sends standard RMI call structures containing a serialized ContextPayload object. The payload is carefully formatted to set the entry count integer to a value just below the validation threshold (e.g., 1000 for vulnerable versions). Each map entry is populated with long dummy string parameters composed of repeating characters to maximize payload volume while keeping computational overhead low.

When the agent receives the RMI packet, it invokes the deserialization routine. The JVM attempts to parse and instantiate the strings on the heap. Because multiple threads often process concurrent RMI calls, a sustained transmission of these oversized packets causes rapid heap consumption. The garbage collector becomes overwhelmed, leading to thread starvation, application unresponsiveness, and an eventual crash due to a java.lang.OutOfMemoryError.

Impact Assessment

The technical impact of CVE-2026-54712 is a complete loss of availability for the affected Java Virtual Machine. While CVSS v3.1 rates the availability impact as 'Low' (yielding a base score of 5.3), in practical enterprise scenarios, an unhandled java.lang.OutOfMemoryError typically leads to JVM crash or freeze. The process is either terminated by the operating system kernel (OOM Killer) or enters a state of perpetual garbage collection thrashing, rendering the service entirely unresponsive.

Because this vulnerability occurs within the auto-instrumentation agent itself, it affects any downstream application that relies on the agent for monitoring, regardless of whether the business logic itself utilizes RMI. If the target application exposes RMI endpoints for administrative tasks, JMX monitoring, or legacy middleware communications, the entire application becomes vulnerable to remote, unauthenticated disruption.

No confidentiality or integrity impacts are associated with this flaw. The exploit vector is strictly restricted to resource exhaustion and does not allow for remote code execution (RCE) or information disclosure. The vulnerability lacks an active exploitation record in the CISA KEV catalog, and EPSS scores suggest low exploitation probability in standard enterprise networks due to the declining prevalence of externally exposed RMI services.

Remediation and Mitigation

Remediation requires upgrading the OpenTelemetry Javaagent to version 2.27.0 or higher. This release integrates strict cumulative size boundaries during RMI context parsing, ensuring that any payload exceeding 8,192 characters is rejected immediately, thereby mitigating the risk of heap exhaustion.

If upgrading is not immediately feasible, organizations can implement workarounds to eliminate the attack surface. The most effective workaround is to disable the RMI instrumentation module entirely. This can be accomplished by setting the environment variable OTEL_INSTRUMENTATION_RMI_ENABLED=false or passing the system property -Dotel.instrumentation.rmi.enabled=false at JVM startup.

Additionally, robust network access control lists (ACLs) should be deployed to prevent external networks from accessing RMI registries and communication ports (typically TCP 1099, 1098, and transient dynamic ports). Standard security best practices dictate that RMI and JMX services should never be exposed to the public internet or untrusted zones.

Technical Appendix

CVSS Score
5.3/ 10
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L
EPSS Probability
0.26%
Top 82% most exploited

Affected Systems

OpenTelemetry JavaagentOpenTelemetry Java Instrumentation

Affected Versions Detail

Product
Affected Versions
Fixed Version
OpenTelemetry Java Instrumentation
OpenTelemetry
>= 2.26.1, < 2.27.02.27.0
AttributeDetail
CWE IDCWE-400
Attack VectorNetwork (AV:N)
CVSS v3.1 Score5.3 (Medium)
Vulnerability TypeUncontrolled Resource Consumption
Exploit StatusProof-of-Concept
CISA KEV StatusNot Listed

MITRE ATT&CK Mapping

T1499Endpoint Denial of Service
Impact
CWE-400
Uncontrolled Resource Consumption

The product does not properly control the allocation and maintenance of a limited resource, enabling an actor to influence the amount of resources consumed, leading to eventual exhaustion.

Vulnerability Timeline

Lauri Tulmin commits the fix restricting RMI context limits.
2026-04-17
GitHub Security Advisory and CVE-2026-54712 published.
2026-07-01
NVD assigns severity metrics to CVE-2026-54712.
2026-07-01

References & Sources

  • [1]GHSA-fq3f-m5qm-99f5: Uncontrolled Resource Consumption in OpenTelemetry Javaagent RMI Context Propagation
  • [2]Remediation Patch Pull Request (#17870)
  • [3]Remediation Commit (6ef1880)
  • [4]Official Release v2.27.0
  • [5]NVD Official Vulnerability Record (CVE-2026-54712)
  • [6]CVE.org Authoritative Vulnerability Detail

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•17 minutes ago•CVE-2026-54680
9.9

CVE-2026-54680: Remote Code Execution via Fluentd Configuration Injection in Logging Operator

A critical security flaw (CVE-2026-54680) in the Kubernetes Logging Operator allows authenticated attackers with namespace-level access to craft malicious Custom Resources that inject arbitrary configuration directives into the downstream Fluentd logging aggregator, resulting in unauthenticated remote code execution (RCE) in the context of the aggregator pod.

Alon Barad
Alon Barad
1 views•7 min read
•about 1 hour ago•GHSA-XVG2-CGV6-6H7V
7.4

GHSA-XVG2-CGV6-6H7V: Local Traffic Interception and Information Disclosure via Improper DNS Block Responses in netfoil

A protection mechanism failure in the netfoil DNS proxy prior to version 0.4.0 causes blocked domains to resolve to null IP addresses (0.0.0.0 or ::) with a NOERROR status instead of NXDOMAIN. On Linux systems, connections to these addresses are routed to the loopback interface (localhost), allowing local processes to intercept sensitive HTTP traffic, including authorization headers and session cookies, intended for the blocked domains.

Amit Schendel
Amit Schendel
3 views•6 min read
•about 2 hours ago•GHSA-PMWX-RM49-XV39
9.1

GHSA-PMWX-RM49-XV39: Path Traversal in ActiveRecord::Tenanted::Storage::DiskService

A directory traversal vulnerability exists in the `activerecord-tenanted` Ruby gem's local storage path resolution logic. Prior to version 0.7.0, the `path_for` method failed to sanitize input keys, allowing remote attackers to traverse directories and access arbitrary files on the host filesystem.

Alon Barad
Alon Barad
4 views•6 min read
•about 4 hours ago•CVE-2026-54704
6.5

CVE-2026-54704: Sensitive Data Exposure in OpenTelemetry Java Instrumentation SQL Sanitizer

A sensitive data exposure vulnerability (CWE-532) exists in OpenTelemetry Java Instrumentation prior to version 2.28.0. The JDBC auto-instrumentation component's SQL statement sanitizer contains lexer flaws that prevent the correct redaction of administrative passwords under specific conditions, such as when double-quotes represent identifiers or during multi-statement executions separated by semicolons.

Alon Barad
Alon Barad
4 views•5 min read
•about 5 hours ago•CVE-2026-54705
6.3

CVE-2026-54705: DOM-Based Cross-Site Scripting in MathLive LaTeX Rendering Engine

CVE-2026-54705 is a critical DOM-based Cross-Site Scripting (XSS) vulnerability affecting the MathLive library prior to version 0.110.0. The flaw stems from a lack of proper character escaping in the rendering path for LaTeX text-mode commands such as \text{} and \mbox{}, enabling unauthenticated attackers to execute arbitrary JavaScript in the victim's browser.

Amit Schendel
Amit Schendel
4 views•7 min read
•about 6 hours ago•CVE-2026-54693
8.2

CVE-2026-54693: Authorization Bypass in ZITADEL Identity Management Platform

A critical authorization bypass vulnerability was identified in the ZITADEL identity management platform, tracked as CVE-2026-54693 (GHSA-jq8w-8q2f-ffm9). Due to incorrect privilege validation in self-service profile modification endpoints, standard authenticated users could obtain plaintext verification codes during email or phone number updates. This allows attackers to claim and verify arbitrary email addresses or phone numbers without controlling the underlying contact methods.

Alon Barad
Alon Barad
4 views•7 min read