CVE-2026-59892: OpenTelemetry JaegerPropagator Denial of Service
A critical denial of service vulnerability, CVE-2026-59892, exists in `@opentelemetry/propagator-jaeger` versions prior to 2.9.0, allowing an unauthenticated remote attacker to terminate Node.js applications configured with `JaegerPropagator` by sending a malformed percent-encoded value in `uber-trace-id` or `uberctx-*` HTTP headers, leading to an uncaught `URIError`.
An unauthenticated remote denial-of-service vulnerability (CVE-2026-59892) affects Node.js applications utilizing @opentelemetry/propagator-jaeger versions older than 2.9.0. This flaw allows an attacker to send a specially crafted HTTP request containing a malformed percent-encoded value (such as a bare '%') within the uber-trace-id or uberctx-* HTTP headers. When JaegerPropagator attempts to decode this malformed header value using decodeURIComponent(), an uncaught URIError is triggered. If JaegerPropagator is configured as the sole active propagator, this exception propagates as an uncaughtException, causing the entire Node.js process to terminate immediately. This vulnerability allows for easy service disruption with a single request.
Attack Chain
- An unauthenticated attacker sends an HTTP request to a target Node.js service.
- The HTTP request includes a header, such as
uber-trace-idoruberctx-*, with a malformed percent-encoded value (e.g.,uber-trace-id: %oruberctx-user: %). - The target service is running a Node.js application that uses
@opentelemetry/propagator-jaegerversion < 2.9.0. - The application has
JaegerPropagatorregistered as its active global propagator (e.g., viaOTEL_PROPAGATORS=jaegerorpropagation.setGlobalPropagator(new JaegerPropagator())). - During context extraction, the
JaegerPropagator.extract()method attempts to decode the malformed header value usingdecodeURIComponent(). - The
decodeURIComponent()function throws aURIError: URI malformeddue to the invalid percent-encoding. - Since the
JaegerPropagatoris not wrapped by aCompositePropagator(which would catch the error), theURIErrorpropagates as anuncaughtException. - The Node.js process immediately terminates, resulting in a denial of service for the application.
Impact
This vulnerability leads to a severe denial of service, allowing any unauthenticated remote attacker to terminate vulnerable Node.js applications with a single HTTP request. This disrupts service availability and can lead to significant downtime for affected organizations. The impact is specifically on service availability; confidentiality and integrity of data are not directly affected by this particular flaw. Organizations in any sector using the affected OpenTelemetry library configurations are susceptible to this easy-to-exploit DoS vector.
Recommendation
- Upgrade
@opentelemetry/propagator-jaegerto version 2.9.0 or later to patch CVE-2026-59892. - As an interim mitigation, if immediate upgrading is not possible, implement controls at your edge (e.g., reverse proxy, API gateway, or load balancer like Nginx or Envoy) to strip or validate
uber-trace-idanduberctx-*headers on all inbound requests. Ensure these headers are only accepted from trusted upstream services. - Verify if your
OTEL_PROPAGATORSenvironment variable is set to includejaegeror ifpropagation.setGlobalPropagator(new JaegerPropagator())is called in your code.