Vulnerabilities in pkg:golang/go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp

PACKAGE
Advisory Identifier: GHSA-8wmf-6v46-5gfg
Advisory Summary

CVE-2026-81870 is a LOW exporter config logging may leak vulnerability (CWE-532: Insertion of Sensitive Information into Log File) affecting OpenTelemetry-Go libraries in the Go ecosystem. The issue involves exporter config logging may leak endpoint urls in info logs. Remediation is available by upgrading affected packages to version 1.45.0.

2 Known Advisory Record(s)
Package Vulnerability Intelligence

pkg:golang/go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp

2 Known Advisory Record(s)

Vulnerability advisories affecting package pkg:golang/go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp. Select an advisory below to view technical details or fixes.

Advisory ID CVE / NVD Severity Summary
GHSA-8wmf-6v46-5gfg CVE-2026-81870 LOW OpenTelemetry-Go: Exporter config logging may leak endpoint URLs in info logs
GHSA-w8rr-5gcm-pp58 CVE-2026-39882 MODERATE opentelemetry-go: OTLP HTTP exporters read unbounded HTTP response bodies

CVE-2026-81870 at a Glance

CVE Identifier CVE-2026-81870
GHSA Identifier GHSA-8wmf-6v46-5gfg
Severity LOW
CVSS v3.1 Base Score N/A
CWE Classification CWE-532: Insertion of Sensitive Information into Log File
Affected Product OpenTelemetry-Go
Package Ecosystem Go
Published Date
Last Updated

How to Fix CVE-2026-81870

To remediate this vulnerability, upgrade all affected OpenTelemetry-Go dependencies to a patched release. Both direct and transitive dependencies should be checked, as frameworks or security libraries may pull in vulnerable versions transitively.

go.opentelemetry.io/otel/sdk fixed: 1.45.0
Upgrade go.opentelemetry.io/otel/sdk to 1.45.0
go.opentelemetry.io/otel/exporters/otlp/otlptrace fixed: 1.45.0
Upgrade go.opentelemetry.io/otel/exporters/otlp/otlptrace to 1.45.0
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc fixed: 1.45.0
Upgrade go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc to 1.45.0
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp fixed: 1.45.0
Upgrade go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp to 1.45.0
go.opentelemetry.io/otel/exporters/zipkin fixed: 1.45.0
Upgrade go.opentelemetry.io/otel/exporters/zipkin to 1.45.0
Verify Direct and Transitive Dependencies

Run the following command in your project directory to verify that all resolved dependencies use the patched release:

inspect dependencies for go.opentelemetry.io/otel/sdk

How to Check if You Are Affected

To determine whether your application is affected by CVE-2026-81870, inspect your project dependencies for OpenTelemetry-Go:

inspect dependencies for go.opentelemetry.io/otel/sdk

Analyze the terminal output to locate any version of OpenTelemetry-Go in your dependency tree. If any resolved version matches the vulnerable ranges listed in the table below (for example, versions earlier than 1.45.0), your application is affected.

Note: Verify declared build manifests and deployed runtime container environments.

Technical Details

Vulnerability Mechanism & Technical Analysis

This vulnerability is classified under CWE-532: Insertion of Sensitive Information into Log File, where the product writes sensitive information to a log file. In OpenTelemetry-Go, software state validation or input boundaries are circumvented during processing. Review the official source advisory statement below for specific affected components, classes, and reproduction details.

Source Advisory Statement

### 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`](https://github.com/open-telemetry/opentelemetry-go/commit/a1fff3c2588c783d1f3f6fd2315aa2660fc6d330). ### 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`](https://github.com/open-telemetry/opentelemetry-go/commit/3a1412d2b3bc4e4231fbeac2ed42117ae541bb38) 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.

CVE-2026-81870 Affected OpenTelemetry-Go Versions

5 component(s)
Fixed Versions:
1.45.0
Product / Package Ecosystem Affected Versions Fixed Version
go.opentelemetry.io/otel/sdk
Go
≥ 1.5.0
< 1.45.0
1.45.0
go.opentelemetry.io/otel/exporters/otlp/otlptrace
Go
≥ 1.5.0
< 1.45.0
1.45.0
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc
Go
≥ 1.5.0
< 1.45.0
1.45.0
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp
Go
≥ 1.5.0
< 1.45.0
1.45.0
go.opentelemetry.io/otel/exporters/zipkin
Go
≥ 1.5.0
< 1.45.0
1.45.0

References

Frequently Asked Questions

What is CVE-2026-81870?
CVE-2026-81870 is a security vulnerability in OpenTelemetry-Go involving Exporter config logging may leak endpoint URLs in info logs under CWE-532: Insertion of Sensitive Information into Log File.
Which OpenTelemetry-Go versions are affected?
Affected versions include releases prior to 1.45.0 across affected packages: go.opentelemetry.io/otel/sdk, go.opentelemetry.io/otel/exporters/otlp/otlptrace, go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc, go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp, go.opentelemetry.io/otel/exporters/zipkin.
What version fixes CVE-2026-81870?
Upgrading to 1.45.0 (or the latest patched release for your respective branch) resolves the vulnerability.
Is go.opentelemetry.io/otel/sdk affected?
Yes, go.opentelemetry.io/otel/sdk is affected in releases prior to 1.45.0. Upgrade your dependency to 1.45.0 or later.
Is go.opentelemetry.io/otel/exporters/otlp/otlptrace affected?
Yes, go.opentelemetry.io/otel/exporters/otlp/otlptrace is affected in releases prior to 1.45.0. Upgrade your dependency to 1.45.0 or later.
What CWE is associated with CVE-2026-81870?
CVE-2026-81870 is classified under CWE-532: Insertion of Sensitive Information into Log File (The product writes sensitive information to a log file.).
How can I check Go dependencies for CVE-2026-81870?
Run the dependency tree command: 'inspect dependencies for go.opentelemetry.io/otel/sdk'. This command lists direct and transitive dependencies in your build configuration so you can verify if a vulnerable version is resolved.
Machine-readable OSV JSON OSV v1.5 Schema
Normalized schema output
{
  "schema_version" : "1.4.0",
  "id" : "GHSA-8wmf-6v46-5gfg",
  "modified" : "2026-09-17T20:31:06Z",
  "published" : "2026-09-17T20:31:06Z",
  "aliases" : [ "CVE-2026-81870" ],
  "summary" : "OpenTelemetry-Go: Exporter config logging may leak endpoint URLs in info logs",
  "details" : "### Summary\n\nOpenTelemetry 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.\n\nThe 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.\n\nExporter `MarshalLog` implementations that caused this configuration to be included in internal logs were introduced by [`a1fff3c`](https://github.com/open-telemetry/opentelemetry-go/commit/a1fff3c2588c783d1f3f6fd2315aa2660fc6d330).\n\n### Details\n\nWhen `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:\n\n1. the provider's span processors;\n2. each processor's span exporter; and\n3. for the OTLP trace exporter, its client configuration.\n\nThis causes the following values to be present in the event:\n\n- OTLP trace gRPC: the configured endpoint;\n- OTLP trace HTTP: the configured endpoint and the `Insecure` flag; and\n- Zipkin: the complete collector URL.\n\nOpenTelemetry 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:\n\n- versions 1.5.0 through 1.14.x use `V(1)` for this Info event; and\n- versions 1.15.0 through 1.44.0 use `V(4)`.\n\nOTLP 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.\n\n### Proof of concept\n\nThe 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:\n\n```go\npackage main\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"fmt\"\n\n\t\"github.com/go-logr/logr/funcr\"\n\t\"go.opentelemetry.io/otel\"\n\t\"go.opentelemetry.io/otel/exporters/zipkin\"\n\tsdktrace \"go.opentelemetry.io/otel/sdk/trace\"\n)\n\nfunc main() {\n\tvar logs bytes.Buffer\n\totel.SetLogger(funcr.New(func(_, args string) {\n\t\t_, _ = logs.WriteString(args)\n\t}, funcr.Options{Verbosity: 4}))\n\n\texporter, err := zipkin.New(\n\t\t\"http://user:pass@zipkin.internal:9411/api/v2/spans?token=secret\",\n\t)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\ttp := sdktrace.NewTracerProvider(sdktrace.WithBatcher(exporter))\n\t_ = tp.Shutdown(context.Background())\n\n\tfmt.Println(logs.String())\n}\n```\n\nThe `TracerProvider created` event contains:\n\n```text\nhttp://user:pass@zipkin.internal:9411/api/v2/spans?token=secret\n```\n\nFor versions before 1.15.0, set `funcr.Options{Verbosity: 1}` instead.\n\n### Impact\n\nThis 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.\n\nThere 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.\n\n### Remediation\n\nUpgrade the affected OpenTelemetry Go modules to version 1.45.0 or later. The fix in [`3a1412d`](https://github.com/open-telemetry/opentelemetry-go/commit/3a1412d2b3bc4e4231fbeac2ed42117ae541bb38) stops recursively marshaling exporter and client configuration and records their types instead.\n\nIf an immediate upgrade is not possible:\n\n- keep OpenTelemetry internal logging below the Info verbosity described above;\n- do not embed credentials or tokens in exporter endpoint URLs; use authentication headers or another supported credential mechanism; and\n- restrict access to existing logs and rotate any credentials that may already have been recorded.",
  "severity" : [ {
    "type" : "CVSS_V4",
    "score" : "CVSS:4.0/AV:L/AC:L/AT:P/PR:L/UI:N/VC:L/VI:N/VA:N/SC:N/SI:N/SA:N"
  } ],
  "affected" : [ {
    "package" : {
      "ecosystem" : "Go",
      "name" : "go.opentelemetry.io/otel/sdk"
    },
    "ranges" : [ {
      "type" : "ECOSYSTEM",
      "events" : [ {
        "introduced" : "1.5.0"
      }, {
        "fixed" : "1.45.0"
      } ]
    } ],
    "database_specific" : {
      "last_known_affected_version_range" : "<= 1.44.0"
    }
  }, {
    "package" : {
      "ecosystem" : "Go",
      "name" : "go.opentelemetry.io/otel/exporters/otlp/otlptrace"
    },
    "ranges" : [ {
      "type" : "ECOSYSTEM",
      "events" : [ {
        "introduced" : "1.5.0"
      }, {
        "fixed" : "1.45.0"
      } ]
    } ],
    "database_specific" : {
      "last_known_affected_version_range" : "<= 1.44.0"
    }
  }, {
    "package" : {
      "ecosystem" : "Go",
      "name" : "go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc"
    },
    "ranges" : [ {
      "type" : "ECOSYSTEM",
      "events" : [ {
        "introduced" : "1.5.0"
      }, {
        "fixed" : "1.45.0"
      } ]
    } ],
    "database_specific" : {
      "last_known_affected_version_range" : "<= 1.44.0"
    }
  }, {
    "package" : {
      "ecosystem" : "Go",
      "name" : "go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp"
    },
    "ranges" : [ {
      "type" : "ECOSYSTEM",
      "events" : [ {
        "introduced" : "1.5.0"
      }, {
        "fixed" : "1.45.0"
      } ]
    } ],
    "database_specific" : {
      "last_known_affected_version_range" : "<= 1.44.0"
    }
  }, {
    "package" : {
      "ecosystem" : "Go",
      "name" : "go.opentelemetry.io/otel/exporters/zipkin"
    },
    "ranges" : [ {
      "type" : "ECOSYSTEM",
      "events" : [ {
        "introduced" : "1.5.0"
      }, {
        "fixed" : "1.45.0"
      } ]
    } ],
    "database_specific" : {
      "last_known_affected_version_range" : "<= 1.44.0"
    }
  } ],
  "references" : [ {
    "type" : "WEB",
    "url" : "https://github.com/open-telemetry/opentelemetry-go/security/advisories/GHSA-8wmf-6v46-5gfg"
  }, {
    "type" : "ADVISORY",
    "url" : "https://nvd.nist.gov/vuln/detail/CVE-2026-81870"
  }, {
    "type" : "WEB",
    "url" : "https://github.com/open-telemetry/opentelemetry-go/pull/8438"
  }, {
    "type" : "WEB",
    "url" : "https://github.com/open-telemetry/opentelemetry-go/commit/3a1412d2b3bc4e4231fbeac2ed42117ae541bb38"
  }, {
    "type" : "PACKAGE",
    "url" : "https://github.com/open-telemetry/opentelemetry-go"
  }, {
    "type" : "WEB",
    "url" : "https://github.com/open-telemetry/opentelemetry-go/releases/tag/exporters/zipkin/v1.45.0"
  }, {
    "type" : "WEB",
    "url" : "https://github.com/open-telemetry/opentelemetry-go/releases/tag/sdk/v1.45.0"
  } ],
  "database_specific" : {
    "cwe_ids" : [ "CWE-200", "CWE-532" ],
    "severity" : "LOW",
    "github_reviewed" : true,
    "github_reviewed_at" : "2026-09-17T20:31:06Z",
    "nvd_published_at" : "2026-09-16T20:17:32Z"
  }
}