fix: bump @opentelemetry/propagator-jaeger to 2.9.0 (CVE-2026-59892)#59
Merged
Conversation
Copilot
AI
changed the title
[WIP] Fix Denial of service in JaegerPropagator
fix: bump @opentelemetry/propagator-jaeger to 2.9.0 (CVE-2026-59892)
Jul 21, 2026
mageroni
approved these changes
Jul 21, 2026
mageroni
marked this pull request as ready for review
July 21, 2026 23:22
There was a problem hiding this comment.
Pull request overview
Updates the transitive Jaeger propagator to remediate CVE-2026-59892; the vulnerable path is not configured in this codebase.
Changes:
- Overrides Jaeger propagator and OpenTelemetry core at patched version 2.9.0.
- Regenerates the dependency lockfile accordingly.
Show a summary per file
| File | Description |
|---|---|
package.json |
Adds patched OpenTelemetry overrides. |
package-lock.json |
Locks both packages at 2.9.0. |
Review details
Tip
Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
- Files reviewed: 1/2 changed files
- Comments generated: 0
- Review effort level: Medium
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
@opentelemetry/propagator-jaeger≤2.7.1 throws an uncaughtURIErroron malformed percent-encodeduber-trace-id/uberctx-*headers, allowing unauthenticated DoS with a single request.Changes
package.json— added npm override"@opentelemetry/propagator-jaeger": "2.9.0"; bumped existing"@opentelemetry/core"override2.8.0→2.9.0(required by propagator-jaeger 2.9.0)package-lock.json— regenerated vianpm installAn override is required because
@opentelemetry/sdk-node@0.218.0pins the transitive dep at the exact vulnerable version2.7.1.Reachability
Not reachable (high confidence). The CVE only triggers when
JaegerPropagatoris the active propagator (OTEL_PROPAGATORS=jaegerorsetGlobalPropagator(new JaegerPropagator())). Neither configuration appears anywhere in this codebase; the package is present solely as an unexercised transitive dep. This is a scanner-hygiene fix.Original prompt
This section details the Dependabot vulnerability alert you should resolve
<alert_title>OpenTelemetry JavaScript: Denial of service in
JaegerPropagatorvia unhandled exception on a malformed header</alert_title><alert_description>## Summary
@opentelemetry/propagator-jaegerdecodes incoming HTTP header values withdecodeURIComponent()without handling decode errors. A single request carrying a malformed percent-encoded value (for example a bare%) in anuber-trace-idoruberctx-*header throws an uncaughtURIError, terminating any Node.js process that usesJaegerPropagatoras its active propagator.Impact
Denial of Service: Any unauthenticated remote attacker who can send an HTTP request to a service that has
JaegerPropagatorregistered as the global propagator (e.g. viaOTEL_PROPAGATORS=jaegerorpropagation.setGlobalPropagator(new JaegerPropagator())) can terminate the process with a single request. Confidentiality and integrity are not affected.Am I affected?
This issue affects only a specific, opt-in configuration. If you use OpenTelemetry's default propagators (W3C TraceContext and Baggage), you are not affected.
You are affected only if you have registered
JaegerPropagatoras the active propagator. Check for:@opentelemetry/propagator-jaegerin your dependency tree, andOTEL_PROPAGATORSset tojaeger(Jaeger only), or a directpropagation.setGlobalPropagator(new JaegerPropagator())call in your code.Note: if
JaegerPropagatoris combined with other propagators through aCompositePropagator(for exampleOTEL_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.Patched versions
@opentelemetry/propagator-jaeger2.9.0Remediation
Update
@opentelemetry/propagator-jaegerto 2.9.0 or later. The propagator now ignores header values it cannot decode instead of throwing.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-idanduberctx-*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.Details
JaegerPropagator.extract()callsdecodeURIComponent()on raw header values at two unguarded call sites: theuber-trace-idtrace header and eachuberctx-*baggage value.decodeURIComponent()throwsURIError: URI malformedon invalid percent-encoding. Because the HTTP instrumentation extracts context before its request-handler error wrapper, and a single configured propagator is not wrapped in aCompositePropagator(which would otherwise catch the error), the exception propagates as anuncaughtExceptionand terminates the process.Proof of concept
Against a service using
JaegerPropagator:The Node.js process exits with
URIError: URI malformedand subsequent requests are refused.</alert_description>high
https://github.com/open-telemetry/opentelemetry-js/security/advisories/GHSA-45rx-2jwx-cxfr https://nvd.nist.gov/vuln/detail/CVE-2026-59892 https://github.com/open-telemetry/opentelemetry-js/commit/b1c196d49d54caae59741cca0a9d57d101d7ea88 https://github.com/open-telemetry/opentelemetry-js/releases/tag/v2.9.0 https://github.com/advisories/GHSA-45rx-2jwx-cxfrGHSA-45rx-2jwx-cxfr, CVE-2026-59892
@opentelemetry/propagator-jaeger
npm
<vulnerable_versions>2.7.1</vulnerable_versions>
<patched_version>2.9.0</patched_version>
<manifest_path>package-lock.json</manifest_path>
<task_instructions>Resolve this alert by updating the affected package to a non-vulnerable version. Prefer the lowest non-vulnerable version (see the patched_version field above) over the latest to minimize breaking changes. Include a Reachability Assessment section in the PR description. Review the alert_description field to understand which APIs, features, or configurations are affected, then search the codebase for usage of those specific items. If the vulnerable code path is reachable, explain how (which files, APIs, or call sites use the affected functionality) and note that the codebase is actively exposed to this vulnerability. If the vulnerable code path is not reachable, explain why (e.g. the affected API is never called, the vulnerable configuration is not used) and note that the update is primarily to satisfy vulnerability scanners rather than to address an active risk. If the advisory is too vague to determine reachability (e.g. 'impr...
brace-expansionDoS vuln to 1.1.16 via npm override #60