{"id":"CVE-2026-59892","aliases":["CLSA-2026-1791460637","CLSA-2026-1793272717","CLSA-2026-1793272846","CLSA-2026-1793275058","EUVD-2026-42324","GHSA-45rx-2jwx-cxfr","ROOT-APP-NPM-CVE-2026-59892"],"status":"published","title":"OpenTelemetry JavaScript: Denial of service in `JaegerPropagator` via unhandled exception on a malformed header","description":"OpenTelemetry JavaScript is the OpenTelemetry JavaScript client. Prior to 2.9.0, @opentelemetry/propagator-jaeger decodes incoming uber-trace-id and uberctx-* HTTP header values with decodeURIComponent() without handling decode errors, allowing an unauthenticated remote attacker to send a malformed percent-encoded value that throws an uncaught URIError and terminates a Node.js process using JaegerPropagator as the active propagator. This issue is fixed in version 2.9.0.","severity":{"version":"3.1","score":7.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H","level":"high","assessor":"cna","from":"cve"},"epss":{"day":"2026-11-09","score":0.00557,"percentile":0.46729,"model":"v2026.06.15"},"facts":{"in_kev":false,"known_exploited":false,"public_exploit":false,"fix_available":true},"cwes":["CWE-248"],"published":"2026-07-08T16:03:58Z","modified":"2026-10-29T13:45:03Z","fixes":[{"ecosystem":"npm","package":"@opentelemetry/propagator-jaeger","fixed_in":["2.9.0"],"sources":["ghsa","osv"]},{"ecosystem":"TuxCare:npm","package":"@opentelemetry/propagator-jaeger","fixed_in":["1.30.1-tuxcare.1","1.22.0-tuxcare.2","1.27.0-tuxcare.2","2.8.0-tuxcare.1"],"sources":["osv"]},{"ecosystem":"Root:npm","package":"@opentelemetry/propagator-jaeger","fixed_in":["2.0.1-aikido.1","1.26.0-aikido.1","2.7.1-aikido.1","2.7.0-aikido.1","2.2.0-aikido.1","2.8.0-aikido.1","2.1.0-aikido.1","2.6.0-aikido.1","1.19.0-aikido.1"],"sources":["osv"]},{"ecosystem":"Root:npm","package":"@rootio/opentelemetry__propagator-jaeger","fixed_in":["2.0.1-root.io.1","1.26.0-root.io.1","2.7.1-root.io.1","2.7.0-root.io.1","2.2.0-root.io.1","2.8.0-root.io.1","2.1.0-root.io.1","2.6.0-root.io.1","1.19.0-root.io.1"],"sources":["osv"]}],"affected":[{"source":"ghsa","ecosystem":"npm","package":"@opentelemetry/propagator-jaeger","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"2.9.0"}]}]},{"source":"osv","ecosystem":"TuxCare:npm","package":"@opentelemetry/propagator-jaeger","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"1.30.1-tuxcare.0"},{"fixed":"1.30.1-tuxcare.1"}]}],"versions":["1.30.1"]},{"source":"osv","ecosystem":"TuxCare:npm","package":"@opentelemetry/propagator-jaeger","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"1.22.0-tuxcare.0"},{"fixed":"1.22.0-tuxcare.2"}]}],"versions":["1.22.0"]},{"source":"osv","ecosystem":"TuxCare:npm","package":"@opentelemetry/propagator-jaeger","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"1.27.0-tuxcare.0"},{"fixed":"1.27.0-tuxcare.2"}]}],"versions":["1.27.0"]},{"source":"osv","ecosystem":"TuxCare:npm","package":"@opentelemetry/propagator-jaeger","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"2.8.0-tuxcare.0"},{"fixed":"2.8.0-tuxcare.1"}]}],"versions":["2.8.0"]},{"source":"osv","ecosystem":"npm","package":"@opentelemetry/propagator-jaeger","ranges":[{"type":"SEMVER","events":[{"introduced":"0"},{"fixed":"2.9.0"}]}]},{"source":"osv","ecosystem":"Root:npm","package":"@opentelemetry/propagator-jaeger","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"2.0.1-aikido.1"},{"fixed":"1.26.0-aikido.1"},{"fixed":"2.7.1-aikido.1"},{"fixed":"2.7.0-aikido.1"},{"fixed":"2.2.0-aikido.1"},{"fixed":"2.8.0-aikido.1"},{"fixed":"2.1.0-aikido.1"},{"fixed":"2.6.0-aikido.1"},{"fixed":"1.19.0-aikido.1"}]}]},{"source":"osv","ecosystem":"Root:npm","package":"@rootio/opentelemetry__propagator-jaeger","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"2.0.1-root.io.1"},{"fixed":"1.26.0-root.io.1"},{"fixed":"2.7.1-root.io.1"},{"fixed":"2.7.0-root.io.1"},{"fixed":"2.2.0-root.io.1"},{"fixed":"2.8.0-root.io.1"},{"fixed":"2.1.0-root.io.1"},{"fixed":"2.6.0-root.io.1"},{"fixed":"1.19.0-root.io.1"}]}]}],"products":[{"vendor":"open-telemetry","product":"opentelemetry-js"}],"references":[{"url":"https://github.com/open-telemetry/opentelemetry-js/security/advisories/GHSA-45rx-2jwx-cxfr","tags":["x_refsource_CONFIRM","exploit","advisory","web"]},{"url":"https://github.com/open-telemetry/opentelemetry-js/commit/b1c196d49d54caae59741cca0a9d57d101d7ea88","tags":["x_refsource_MISC","fix","web"]},{"url":"https://github.com/open-telemetry/opentelemetry-js/releases/tag/v2.9.0","tags":["x_refsource_MISC","web"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-59892","tags":["advisory"]},{"url":"https://github.com/advisories/GHSA-45rx-2jwx-cxfr"},{"url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/59xxx/CVE-2026-59892.json","tags":["advisory"]},{"url":"https://github.com/open-telemetry/opentelemetry-js","tags":["package"]}],"sources":{"cve":[{"id":"CVE-2026-59892","title":"OpenTelemetry JavaScript: Denial of service in `JaegerPropagator` via unhandled exception on a malformed header","description":"OpenTelemetry JavaScript is the OpenTelemetry JavaScript client. Prior to 2.9.0, @opentelemetry/propagator-jaeger decodes incoming uber-trace-id and uberctx-* HTTP header values with decodeURIComponent() without handling decode errors, allowing an unauthenticated remote attacker to send a malformed percent-encoded value that throws an uncaught URIError and terminates a Node.js process using JaegerPropagator as the active propagator. This issue is fixed in version 2.9.0.","status":"published","published":"2026-07-08T16:03:58.439Z","modified":"2026-07-08T19:41:27.498Z","cvss":[{"version":"3.1","score":7.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H","level":"high","assessor":"cna"}],"cwes":["CWE-248"],"updated_at":"2026-11-02T14:19:58.560602Z"}],"euvd":[{"id":"EUVD-2026-42324","description":"OpenTelemetry JavaScript is the OpenTelemetry JavaScript client. Prior to 2.9.0, @opentelemetry/propagator-jaeger decodes incoming uber-trace-id and uberctx-* HTTP header values with decodeURIComponent() without handling decode errors, allowing an unauthenticated remote attacker to send a malformed percent-encoded value that throws an uncaught URIError and terminates a Node.js process using JaegerPropagator as the active propagator. This issue is fixed in version 2.9.0.","status":"published","published":"2026-07-08T16:03:58Z","modified":"2026-07-08T19:41:27Z","cvss":[{"version":"3.1","score":7.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H","level":"high"}],"updated_at":"2026-11-02T18:20:10.095263Z"}],"ghsa":[{"id":"GHSA-45rx-2jwx-cxfr","title":"OpenTelemetry JavaScript: Denial of service in `JaegerPropagator` via unhandled exception on a malformed header","description":"## Summary\n\n`@opentelemetry/propagator-jaeger` decodes incoming HTTP header values with `decodeURIComponent()` without handling decode errors. A single request carrying a malformed percent-encoded value (for example a bare `%`) in an `uber-trace-id` or `uberctx-*` header throws an uncaught `URIError`, terminating any Node.js process that uses `JaegerPropagator` as its active propagator.\n\n\n## Impact\n\n**Denial of Service:** Any unauthenticated remote attacker who can send an HTTP request to a service that has `JaegerPropagator` registered as the global propagator (e.g. via `OTEL_PROPAGATORS=jaeger` or `propagation.setGlobalPropagator(new JaegerPropagator())`) can terminate the process with a single request. Confidentiality and integrity are not affected.\n\n## Am I affected?\n\nThis issue affects only a specific, opt-in configuration. If you use OpenTelemetry's default propagators (W3C TraceContext and Baggage), you are **not** affected.          \n\nYou are affected only if you have registered `JaegerPropagator` as the active propagator. Check for:\n\n- `@opentelemetry/propagator-jaeger` in your dependency tree, **and**\n- `OTEL_PROPAGATORS` set to `jaeger` (Jaeger only), **or** a direct `propagation.setGlobalPropagator(new JaegerPropagator())` call in your code.\n\nNote: if `JaegerPropagator` is combined with other propagators through a `CompositePropagator` (for example `OTEL_PROPAGATORS=jaeger,tracecontext`), the process does not terminate - the composite propagator catches the error - but affected requests silently fail to extract context. You should still upgrade.\n\n\n## Patched versions\n\n- `@opentelemetry/propagator-jaeger` 2.9.0\n\n## Remediation\n\nUpdate `@opentelemetry/propagator-jaeger` to 2.9.0 or later. The propagator now ignores header values it cannot decode instead of throwing.\n\n**Interim mitigation (if you cannot update):** Trace-context headers should never be accepted unfiltered from untrusted callers. Until you can upgrade, strip or validate the `uber-trace-id` and `uberctx-*` headers on inbound requests at your edge - for example with a reverse proxy, API gateway, or load balancer (nginx, Envoy, etc.) - so that only trusted upstream services can set them.\n\n## Details\n\n`JaegerPropagator.extract()` calls `decodeURIComponent()` on raw header values at two unguarded call sites: the `uber-trace-id` trace header and each `uberctx-*` baggage value. `decodeURIComponent()` throws `URIError: URI malformed` on invalid percent-encoding. Because the HTTP instrumentation extracts context before its request-handler error wrapper, and a single configured propagator is not wrapped in a `CompositePropagator` (which would otherwise catch the error), the exception propagates as an `uncaughtException` and terminates the process.\n\n## Proof of concept\n\nAgainst a service using `JaegerPropagator`:\n\n```bash\ncurl -H 'uberctx-user: %' http://target/\n# or\ncurl -H 'uber-trace-id: %' http://target/\n```\n\nThe Node.js process exits with `URIError: URI malformed` and subsequent requests are refused.","status":"published","published":"2026-07-21T19:07:28Z","modified":"2026-07-21T19:07:29Z","cvss":[{"version":"3.1","score":7.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H","level":"high"}],"cwes":["CWE-248"],"updated_at":"2026-11-02T14:40:50.444681Z"}],"nvd":[{"id":"CVE-2026-59892","description":"OpenTelemetry JavaScript is the OpenTelemetry JavaScript client. Prior to 2.9.0, @opentelemetry/propagator-jaeger decodes incoming uber-trace-id and uberctx-* HTTP header values with decodeURIComponent() without handling decode errors, allowing an unauthenticated remote attacker to send a malformed percent-encoded value that throws an uncaught URIError and terminates a Node.js process using JaegerPropagator as the active propagator. This issue is fixed in version 2.9.0.","status":"published","published":"2026-07-08T17:17:27.19Z","modified":"2026-10-25T17:10:00.197Z","cvss":[{"version":"3.1","score":7.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H","level":"high","assessor":"secondary"}],"cwes":["CWE-248"],"updated_at":"2026-11-02T14:12:28.040501Z"}],"osv":[{"id":"CVE-2026-59892","title":"OpenTelemetry JavaScript: Denial of service in `JaegerPropagator` via unhandled exception on a malformed header","description":"OpenTelemetry JavaScript is the OpenTelemetry JavaScript client. Prior to 2.9.0, @opentelemetry/propagator-jaeger decodes incoming uber-trace-id and uberctx-* HTTP header values with decodeURIComponent() without handling decode errors, allowing an unauthenticated remote attacker to send a malformed percent-encoded value that throws an uncaught URIError and terminates a Node.js process using JaegerPropagator as the active propagator. This issue is fixed in version 2.9.0.","status":"published","published":"2026-07-08T16:03:58.439Z","modified":"2026-10-28T02:31:14.32276294Z","cvss":[{"version":"3.1","score":7.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H","level":"high"}],"cwes":["CWE-248"],"updated_at":"2026-11-02T15:45:12.496548Z"},{"id":"GHSA-45rx-2jwx-cxfr","title":"OpenTelemetry JavaScript: Denial of service in `JaegerPropagator` via unhandled exception on a malformed header","description":"## Summary\n\n`@opentelemetry/propagator-jaeger` decodes incoming HTTP header values with `decodeURIComponent()` without handling decode errors. A single request carrying a malformed percent-encoded value (for example a bare `%`) in an `uber-trace-id` or `uberctx-*` header throws an uncaught `URIError`, terminating any Node.js process that uses `JaegerPropagator` as its active propagator.\n\n\n## Impact\n\n**Denial of Service:** Any unauthenticated remote attacker who can send an HTTP request to a service that has `JaegerPropagator` registered as the global propagator (e.g. via `OTEL_PROPAGATORS=jaeger` or `propagation.setGlobalPropagator(new JaegerPropagator())`) can terminate the process with a single request. Confidentiality and integrity are not affected.\n\n## Am I affected?\n\nThis issue affects only a specific, opt-in configuration. If you use OpenTelemetry's default propagators (W3C TraceContext and Baggage), you are **not** affected.          \n\nYou are affected only if you have registered `JaegerPropagator` as the active propagator. Check for:\n\n- `@opentelemetry/propagator-jaeger` in your dependency tree, **and**\n- `OTEL_PROPAGATORS` set to `jaeger` (Jaeger only), **or** a direct `propagation.setGlobalPropagator(new JaegerPropagator())` call in your code.\n\nNote: if `JaegerPropagator` is combined with other propagators through a `CompositePropagator` (for example `OTEL_PROPAGATORS=jaeger,tracecontext`), the process does not terminate - the composite propagator catches the error - but affected requests silently fail to extract context. You should still upgrade.\n\n\n## Patched versions\n\n- `@opentelemetry/propagator-jaeger` 2.9.0\n\n## Remediation\n\nUpdate `@opentelemetry/propagator-jaeger` to 2.9.0 or later. The propagator now ignores header values it cannot decode instead of throwing.\n\n**Interim mitigation (if you cannot update):** Trace-context headers should never be accepted unfiltered from untrusted callers. Until you can upgrade, strip or validate the `uber-trace-id` and `uberctx-*` headers on inbound requests at your edge - for example with a reverse proxy, API gateway, or load balancer (nginx, Envoy, etc.) - so that only trusted upstream services can set them.\n\n## Details\n\n`JaegerPropagator.extract()` calls `decodeURIComponent()` on raw header values at two unguarded call sites: the `uber-trace-id` trace header and each `uberctx-*` baggage value. `decodeURIComponent()` throws `URIError: URI malformed` on invalid percent-encoding. Because the HTTP instrumentation extracts context before its request-handler error wrapper, and a single configured propagator is not wrapped in a `CompositePropagator` (which would otherwise catch the error), the exception propagates as an `uncaughtException` and terminates the process.\n\n## Proof of concept\n\nAgainst a service using `JaegerPropagator`:\n\n```bash\ncurl -H 'uberctx-user: %' http://target/\n# or\ncurl -H 'uber-trace-id: %' http://target/\n```\n\nThe Node.js process exits with `URIError: URI malformed` and subsequent requests are refused.","status":"published","published":"2026-07-21T19:07:28Z","modified":"2026-09-10T03:50:51.338220338Z","cvss":[{"version":"3.1","score":7.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H","level":"high"}],"cwes":["CWE-248"],"updated_at":"2026-11-02T15:46:36.434231Z"},{"id":"CLSA-2026-1791460637","title":"TuxCare security update for @opentelemetry/propagator-jaeger (1 CVE)","description":"TuxCare rebuilt @opentelemetry/propagator-jaeger to address 1 CVE. Fixed in 1.30.1-tuxcare.1.","status":"published","published":"2026-10-08T11:57:17Z","modified":"2026-10-15T09:47:58.38855172Z","updated_at":"2026-11-02T15:43:49.016976Z"},{"id":"CLSA-2026-1793272717","title":"TuxCare security update for @opentelemetry/propagator-jaeger (1 CVE)","description":"TuxCare rebuilt @opentelemetry/propagator-jaeger to address 1 CVE. Fixed in 1.22.0-tuxcare.2.","status":"published","published":"2026-10-29T11:18:37Z","modified":"2026-10-29T13:45:03.336500376Z","updated_at":"2026-11-02T15:43:55.669514Z"},{"id":"CLSA-2026-1793272846","title":"TuxCare security update for @opentelemetry/propagator-jaeger (1 CVE)","description":"TuxCare rebuilt @opentelemetry/propagator-jaeger to address 1 CVE. Fixed in 1.27.0-tuxcare.2.","status":"published","published":"2026-10-29T11:20:46Z","modified":"2026-10-29T13:45:02.573353557Z","updated_at":"2026-11-02T15:43:55.669514Z"},{"id":"CLSA-2026-1793275058","title":"TuxCare security update for @opentelemetry/propagator-jaeger (1 CVE)","description":"TuxCare rebuilt @opentelemetry/propagator-jaeger to address 1 CVE. Fixed in 2.8.0-tuxcare.1.","status":"published","published":"2026-10-29T11:57:38Z","modified":"2026-10-29T13:45:03.331406045Z","updated_at":"2026-11-02T15:43:55.669514Z"},{"id":"ROOT-APP-NPM-CVE-2026-59892","title":"CVE-2026-59892 in @opentelemetry/propagator-jaeger - Patched by Root","description":"Root has patched CVE-2026-59892 in the @opentelemetry/propagator-jaeger package for Root:npm. Multiple fixed versions available.","status":"published","published":"2026-10-08T05:08:53Z","modified":"2026-10-08T06:15:03.199280661Z","updated_at":"2026-11-02T15:53:27.649662Z"}]}}
