CVE-2026-81870

CVE-2026-81870 is a low-severity security vulnerability in go.opentelemetry.io/otel/sdk (go), affecting versions >= 1.5.0, <= 1.44.0. It is fixed in 1.45.0.

Does this CVE actually affect you?

Kodem shows which CVEs are reachable and running in your applications, so you fix what's exploitable, not just what's listed.

Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.

Runtime intelligence, not another scanner.

Summary

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

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:

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:[email protected]: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:

http://user:[email protected]: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.

Affected versions

go.opentelemetry.io/otel/sdk (>= 1.5.0, <= 1.44.0) go.opentelemetry.io/otel/exporters/otlp/otlptrace (>= 1.5.0, <= 1.44.0) go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc (>= 1.5.0, <= 1.44.0) go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp (>= 1.5.0, <= 1.44.0) go.opentelemetry.io/otel/exporters/zipkin (>= 1.5.0, <= 1.44.0)

Security releases

go.opentelemetry.io/otel/sdk → 1.45.0 (go) go.opentelemetry.io/otel/exporters/otlp/otlptrace → 1.45.0 (go) go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc → 1.45.0 (go) go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp → 1.45.0 (go) go.opentelemetry.io/otel/exporters/zipkin → 1.45.0 (go)

Kodem intelligence

Severity tells you how bad this could be in the worst case. It does not tell you whether you are exposed. Exploitability and impact are functions of runtime truth: whether the vulnerable code is present, reachable, and actually executes in your application. A vulnerable package can sit in your dependency tree and never run.

Kodem, an Intelligent Application Security platform, uses runtime intelligence to reveal which vulnerabilities actually execute in production, so teams prioritize the ones that genuinely matter. Kodem's runtime-powered SCA identifies whether this CVE is reachable in your applications.

Already deployed Kodem?

See it in your environmentNew to Kodem? Get a demo →

Remediation advice

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.

Frequently Asked Questions

  1. What is CVE-2026-81870? CVE-2026-81870 is a low-severity security vulnerability in go.opentelemetry.io/otel/sdk (go), affecting versions >= 1.5.0, <= 1.44.0. It is fixed in 1.45.0.
  2. Which packages are affected by CVE-2026-81870?
    • go.opentelemetry.io/otel/sdk (go) (versions >= 1.5.0, <= 1.44.0)
    • go.opentelemetry.io/otel/exporters/otlp/otlptrace (go) (versions >= 1.5.0, <= 1.44.0)
    • go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc (go) (versions >= 1.5.0, <= 1.44.0)
    • go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp (go) (versions >= 1.5.0, <= 1.44.0)
    • go.opentelemetry.io/otel/exporters/zipkin (go) (versions >= 1.5.0, <= 1.44.0)
  3. Is there a fix for CVE-2026-81870? Yes. CVE-2026-81870 is fixed in 1.45.0. Upgrade to this version or later.
  4. Is CVE-2026-81870 exploitable, and should I be worried? Whether CVE-2026-81870 is exploitable in your environment depends on whether the vulnerable code is present and reachable. A CVSS score is a worst-case rating; it does not account for your specific deployment, configuration, or usage patterns. Kodem, an Intelligent Application Security platform, uses runtime intelligence to show which vulnerabilities actually execute in production, so you can focus on the ones that represent real risk. Get a demo
  5. What actually determines whether CVE-2026-81870 is exploitable, and how bad it is? Exploitability and impact are not fixed properties of a CVE. They depend on runtime truth: whether the vulnerable code is present, reachable, and actually executes in your application. A high CVSS score on a dependency that never runs is not the same as real risk. Kodem, an Intelligent Application Security platform, uses runtime intelligence to reveal which vulnerabilities actually execute in production, so teams prioritize the ones that genuinely matter.
  6. How do I fix CVE-2026-81870?
    • Upgrade go.opentelemetry.io/otel/sdk to 1.45.0 or later
    • Upgrade go.opentelemetry.io/otel/exporters/otlp/otlptrace to 1.45.0 or later
    • Upgrade go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc to 1.45.0 or later
    • Upgrade go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp to 1.45.0 or later
    • Upgrade go.opentelemetry.io/otel/exporters/zipkin to 1.45.0 or later

Other vulnerabilities in go.opentelemetry.io/otel/sdk

Stop the waste.
Protect your environment with Kodem.