CVE-2026-81870: OpenTelemetry-Go: Exporter config logging may leak endpoint URLs in info logs

Published Sep 16, 2026
·
Updated

Summary

OpenTelemetry Go versions 1.5.0 through 1.44.0 can include trace exporter endpoint configuration in an internal diagnostic log emitted when an SDK TracerProvider is created. The default OpenTelemetry logger does not emit this event. Exposure requires an application to install a logger that enables OpenTelemetry's internal Info-level diagnostics and for someone other than the intended audience to have access to those logs.

The logged configuration can disclose the address of the trace collector and whether the OTLP/HTTP connection is configured as insecure. The Zipkin exporter logs its complete collector URL, so credentials in URL userinfo or tokens in the query string are also disclosed if an application embeds them there. OTLP authentication headers, TLS key material, and exported span data are not included in this log.

Exporter MarshalLog implementations that caused this configuration to be included in internal logs were introduced by a1fff3c.

Details

When sdk/trace.NewTracerProvider constructs a provider, it records a TracerProvider created internal Info event containing the provider configuration. In affected versions, the configuration's MarshalLog methods recursively include:

1. the provider's span processors; 2. each processor's span exporter; and 3. for the OTLP trace exporter, its client configuration.

This causes the following values to be present in the event:

- OTLP trace gRPC: the configured endpoint; - OTLP trace HTTP: the configured endpoint and the Insecure flag; and - Zipkin: the complete collector URL.

OpenTelemetry Go does not emit this event with its default logger, which only emits errors. An application must explicitly configure a sufficiently verbose logger with otel.SetLogger. The required logr verbosity is version-dependent:

- versions 1.5.0 through 1.14.x use V(1) for this Info event; and - versions 1.15.0 through 1.44.0 use V(4).

OTLP header configuration is not part of the marshaled object, so credentials supplied with WithHeaders or the corresponding environment variables are not exposed. The documented OTLP WithEndpoint input is a collector address rather than a credential-bearing URL. The higher-risk case is therefore the Zipkin collector URL, which is retained and logged in full, or an application passing sensitive data in an OTLP endpoint outside the documented format.

Proof of concept

The following program demonstrates the behavior with OpenTelemetry Go 1.44.0. It deliberately places credentials and a token in the Zipkin collector URL and enables internal Info logging:

go package main

import ( "bytes" "context" "fmt"

"github.com/go-logr/logr/funcr" "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/exporters/zipkin" sdktrace "go.opentelemetry.io/otel/sdk/trace" )

func main() { var logs bytes.Buffer otel.SetLogger(funcr.New(func(, args string) { , = logs.WriteString(args) }, funcr.Options{Verbosity: 4}))

exporter, err := zipkin.New( "http://user:pass@zipkin.internal:9411/api/v2/spans?token=secret", ) if err != nil { panic(err) }

tp := sdktrace.NewTracerProvider(sdktrace.WithBatcher(exporter)) = tp.Shutdown(context.Background())

fmt.Println(logs.String()) }

The TracerProvider created event contains:

text http://user:pass@zipkin.internal:9411/api/v2/spans?token=secret

For versions before 1.15.0, set funcr.Options{Verbosity: 1} instead.

Impact

This is a conditional disclosure through application logs. Affected applications must enable verbose OpenTelemetry internal diagnostics and configure a trace exporter containing information they do not intend to expose to readers of those logs. In that configuration, a person or system with log access can learn the trace collector address and internal network topology. If credentials or tokens are embedded directly in a Zipkin collector URL, those values can also be recovered from the logs.

There is no exposure with the default OpenTelemetry logger, and the vulnerable log is generated from local application configuration rather than remotely supplied span data. OTLP authentication headers, certificate or private-key contents, and telemetry payloads are not logged by this path.

Remediation

Upgrade the affected OpenTelemetry Go modules to version 1.45.0 or later. The fix in 3a1412d stops recursively marshaling exporter and client configuration and records their types instead.

If an immediate upgrade is not possible:

- keep OpenTelemetry internal logging below the Info verbosity described above; - do not embed credentials or tokens in exporter endpoint URLs; use authentication headers or another supported credential mechanism; and - restrict access to existing logs and rotate any credentials that may already have been recorded.

Other sources

OpenTelemetry-Go is the Go implementation of OpenTelemetry. From version 1.5.0 to 1.44.0, sdk/trace.NewTracerProvider emits a TracerProvider created internal Info-level diagnostic event whose MarshalLog implementations recursively include span processor, exporter, and client configuration. Applications that call otel.SetLogger to enable OpenTelemetry internal Info logging can therefore record OTLP gRPC and HTTP collector endpoints, the OTLP HTTP Insecure flag, and complete Zipkin collector URLs. A person or system with access to those logs can learn internal collector topology and can recover credentials or tokens embedded in Zipkin URL user information or query strings. The default OpenTelemetry logger does not emit the event, and this path does not log OTLP authentication headers, TLS key material, or span payloads. This issue is fixed in version 1.45.0.

— MITRE

OpenTelemetry-Go: Exporter config logging may leak endpoint URLs in info logs

— Microsoft

Affected Software

8 affected componentsFixes available
OpenTelemetry OpenTelemetry-Go>=1.5.0<=1.44.0
go/go.opentelemetry.io/otel/exporters/zipkin>=1.5.0<=1.44.0
1.45.0
go/go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp>=1.5.0<=1.44.0
1.45.0
go/go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc>=1.5.0<=1.44.0
1.45.0
go/go.opentelemetry.io/otel/exporters/otlp/otlptrace>=1.5.0<=1.44.0
1.45.0
go/go.opentelemetry.io/otel/sdk>=1.5.0<=1.44.0
1.45.0
Microsoft azl3 azurelinux-image-tools 1.6.0-3<1.7.0-1
1.7.0-1
Microsoft azl3 containerd2 2.3.4-1<2.4.0-1
2.4.0-1

Remediation

Recommended actions to resolve this vulnerability, in priority order.

  1. Upgrade

    Upgrade go/go.opentelemetry.io/otel/exporters/zipkin to a version that resolves this vulnerability.

    Fixed in 1.45.0
  2. Upgrade

    Upgrade go/go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp to a version that resolves this vulnerability.

    Fixed in 1.45.0
  3. Upgrade

    Upgrade go/go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc to a version that resolves this vulnerability.

    Fixed in 1.45.0
  4. Upgrade

    Upgrade go/go.opentelemetry.io/otel/exporters/otlp/otlptrace to a version that resolves this vulnerability.

    Fixed in 1.45.0
  5. Upgrade

    Upgrade go/go.opentelemetry.io/otel/sdk to a version that resolves this vulnerability.

    Fixed in 1.45.0
  6. Upgrade

    Upgrade to a fixed release to a version that resolves this vulnerability.

    Fixed in 1.7.0-1
  7. Upgrade

    Upgrade to a fixed release to a version that resolves this vulnerability.

    Fixed in 2.4.0-1
  8. Upgrade

    Upgrade go.opentelemetry.io/otel to a version that resolves this vulnerability.

    Fixed in 1.45.0
  9. Upgrade

    Upgrade go.opentelemetry.io/otel/sdk/trace to a version that resolves this vulnerability.

    Fixed in 1.45.0
  10. Configuration

    If immediate upgrade is not possible for versions before 1.15.0, set `funcr.Options{Verbosity: 1}` instead of enabling the vulnerable Info-level verbosity via `otel.SetLogger`.

    OpenTelemetry Go internal logging (otel.SetLogger / funcr.Options verbosity) funcr.Options{Verbosity: ...} = 1
  11. Configuration

    For versions 1.15.0 through 1.44.0, avoid using `funcr.Options{Verbosity: 4}` for `otel.SetLogger` (this verbosity level enables the vulnerable internal Info logging that can include OTLP/Zipkin endpoint configuration).

    OpenTelemetry Go internal logging (otel.SetLogger / funcr.Options verbosity) funcr.Options{Verbosity: ...} = 4
  12. Configuration

    For versions 1.5.0 through 1.14.x, avoid using the vulnerable Info-level verbosity for `otel.SetLogger` (the issue description states versions 1.5.0 through 1.14.x use `V(1)` for the Info event).

    OpenTelemetry Go internal logging (otel.SetLogger / funcr.Options verbosity) funcr.Options{Verbosity: ...} = 1
  13. Configuration

    Do not embed credentials or tokens in Zipkin exporter endpoint URLs (e.g., avoid `user:pass@...` in the URL and tokens in query strings); use authentication headers or another supported credential mechanism instead.

    Zipkin exporter endpoint configuration (zipkin.New) Zipkin collector URL = no credentials/tokens in URL userinfo or query string
  14. Compensating control

    Restrict access to existing application logs that may contain the internal Info-level event with trace exporter endpoint/collector URL details, and rotate any credentials/tokens that may already have been recorded.

Event History

Sep 16, 2026
CVE Published
via MITRE·08:03 PM
Data Sourced
via MITRE·08:03 PM
DescriptionWeakness
Data Sourced
via NVD·08:17 PM
DescriptionSeverityWeakness
Sep 17, 2026
Advisory Published
via GitHub·08:31 PM
Data Sourced
via GitHub·08:31 PM
DescriptionWeaknessAffected Software
Sep 19, 2026
Data Sourced
via Microsoft·08:05 AM
DescriptionSeverityWeaknessAffected Software

Frequently Asked Questions

1

Which deployments are exposed to this logging leak?

Deployments using OpenTelemetry-Go versions 1.5.0 through 1.44.0 are exposed only if they call otel.SetLogger and enable OpenTelemetry internal Info-level logging. The default OpenTelemetry logger does not emit the affected event.

2

What information could an observer recover from affected logs?

Affected logs can reveal OTLP gRPC and HTTP collector endpoints, the OTLP HTTP Insecure setting, and complete Zipkin collector URLs. Zipkin URLs may expose credentials or tokens if those are embedded in URL user information or query strings.

3

What should teams do if they cannot immediately upgrade?

Disable OpenTelemetry internal Info-level logging or avoid configuring it through otel.SetLogger, and restrict access to existing application logs. Review logs produced when TracerProvider instances were created for Zipkin URLs containing user information or query-string credentials or tokens.

4

What information is not included by this logging path?

The affected event does not log OTLP authentication headers, TLS key material, or span payloads.

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2026 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203