Skip to main content
Vulnerability Database/CVE-2026-47256

CVE-2026-47256: OpenTelemetry Sentry Exporter Path Traversal

CVE-2026-47256 is a path traversal vulnerability in OpenTelemetry Sentry exporter that allows attackers to access unauthorized API endpoints using manipulated project slugs. This article covers technical details, affected versions, and mitigation.

Updated:

CVE-2026-47256 Overview

CVE-2026-47256 affects the OpenTelemetry Collector Contrib Sentry exporter prior to version 0.154.0. The exporter reads a remote OTLP sender-controlled service.name resource attribute and passes the raw project slug into a Sentry API URL without validating it against projectSlugRegexp. An attacker who controls telemetry can inject special characters or path segments that redirect the authenticated request. The Collector attaches its operator-configured bearer token, which can then reach token-authorized administrative, organization, member, or key endpoints within the configured Sentry organization. Sentry token middleware prevents cross-organization access, limiting blast radius. The issue is categorized as path traversal [CWE-22].

Critical Impact

A remote sender can steer authenticated Sentry API requests to administrative endpoints inside the configured organization and redirect subsequently exported telemetry.

Affected Products

  • OpenTelemetry Collector Contrib Sentry exporter versions prior to 0.154.0
  • Deployments using exporter/sentryexporter with an operator-configured Sentry auth_token
  • Collectors ingesting OTLP data from untrusted or multi-tenant sources

Discovery Timeline

  • 2026-09-14 - CVE-2026-47256 published to NVD
  • 2026-09-14 - Last updated in NVD database

Technical Details for CVE-2026-47256

Vulnerability Analysis

The Sentry exporter builds Sentry API URLs by interpolating a service.name value received from remote OTLP senders. In exporter/sentryexporter/sentry_exporter.go, extractProjectSlug and getOrCreateProjectEndpoint read the attribute and pass the raw project slug to GetOTLPEndpoints and GetProjectKeys in exporter/sentryexporter/sentry_client.go. The slug is embedded directly into the API URL. Because validateRoutingConfig in exporter/sentryexporter/config.go never enforces projectSlugRegexp at runtime, special characters can convert the expected path suffix into query data. Slash and dot segments can also traverse paths when the Sentry deployment normalizes them.

Root Cause

The root cause is missing input validation on an untrusted resource attribute before URL construction. The projectSlugRegexp pattern exists in the codebase but is not applied to sender-controlled values at runtime. Standard URL escaping such as url.PathEscape was also missing from the slug interpolation call sites.

Attack Vector

An attacker who can send OTLP telemetry to the Collector sets a crafted service.name resource attribute. When the Sentry exporter processes the batch, it constructs an API URL that traverses to a different endpoint under the configured Sentry organization. The Collector's operator-configured bearer token is attached to the outbound request, granting the crafted URL the exporter's authorization scope. Successful requests can reach token-authorized administrative, organization, member, or key endpoints, and an attacker-controlled project slug can redirect subsequently exported telemetry.

go
// Patch in exporter/sentryexporter/config.go - enforces projectSlugRegexp on OrgSlug
	if cfg.OrgSlug == "" {
		return errors.New("'org_slug' is required")
	}
	if !projectSlugRegexp.MatchString(cfg.OrgSlug) {
		return fmt.Errorf("'org_slug' %q must match %q", cfg.OrgSlug, projectSlugRegexp.String())
	}
	if cfg.AuthToken == "" {
		return errors.New("'auth_token' is required")
	}

Source: GitHub Commit 3113638

go
// Patch in exporter/sentryexporter/sentry_client.go - applies url.PathEscape to orgSlug
func (c *sentryClient) GetAllProjects(ctx context.Context, orgSlug string) ([]projectInfo, error) {
	baseURL := fmt.Sprintf("%s/api/0/organizations/%s/projects/", c.baseURL, url.PathEscape(orgSlug))
	cursor := ""
	var projects []projectInfo

Source: GitHub Commit 3113638

Detection Methods for CVE-2026-47256

Indicators of Compromise

  • Outbound requests from the Collector to Sentry API paths outside /api/0/projects/{org}/{project}/ such as /api/0/organizations/, /members/, or /keys/.
  • OTLP payloads containing service.name values with /, .., ?, #, or URL-encoded equivalents.
  • Unexpected changes to Sentry project keys, DSNs, or organization membership coinciding with telemetry ingestion.

Detection Strategies

  • Parse egress HTTP logs from the Collector and alert on Sentry API paths that do not match the expected project-scoped route template.
  • Inspect OTLP ingest for service.name resource attributes that fail a strict slug regex such as ^[a-zA-Z0-9_.-]+$.
  • Correlate Sentry audit log events (member changes, key rotations) with Collector request timestamps.

Monitoring Recommendations

  • Enable Sentry organization audit logging and forward events to your SIEM for correlation with Collector activity.
  • Monitor deployed opentelemetry-collector-contrib versions across the fleet and alert on any release below 0.154.0 that loads the sentryexporter.
  • Track anomalous URL structures in outbound telemetry-exporter traffic using existing network detection tooling.

How to Mitigate CVE-2026-47256

Immediate Actions Required

  • Upgrade opentelemetry-collector-contrib to version 0.154.0 or later on all Collectors that load the Sentry exporter.
  • Rotate the Sentry auth_token configured in any affected Collector, since it may have been used against unintended endpoints.
  • Review Sentry audit logs for unexpected administrative, membership, or key-related API calls originating from Collector source addresses.

Patch Information

The fix is included in OpenTelemetry Collector Contrib v0.154.0. The patch enforces projectSlugRegexp in validateRoutingConfig and applies url.PathEscape to slug values before URL interpolation. See the GHSA-4jvg-4jfx-fmhc advisory and the upstream commit for details.

Workarounds

  • Restrict OTLP ingestion to trusted, authenticated senders using mTLS or network segmentation until patching completes.
  • Apply a Collector processor that drops or sanitizes service.name attributes not matching ^[a-zA-Z0-9_.-]+$.
  • Scope the Sentry auth_token to the minimum permissions required for telemetry ingestion and remove organization-administrative rights.
bash
# Example transform processor rule to drop unsafe service.name values
processors:
  transform/sanitize:
    error_mode: ignore
    trace_statements:
      - context: resource
        statements:
          - delete_key(attributes, "service.name") where not IsMatch(attributes["service.name"], "^[a-zA-Z0-9_.-]+$")

Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

Experience the Most Advanced Cybersecurity Platform

See how the world’s most intelligent, autonomous cybersecurity platform can protect your organization today and into the future.