CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



CVE-2026-29181

CVE-2026-29181: Remote Denial of Service via Baggage Header Amplification in OpenTelemetry-Go

Amit Schendel
Amit Schendel
Senior Security Researcher

Apr 7, 2026·6 min read·110 visits

Executive Summary (TL;DR)

A flaw in OpenTelemetry-Go's baggage propagator allows attackers to bypass per-header length limits by sending multiple fragmented headers, causing linear memory allocation growth and eventual application Denial of Service.

OpenTelemetry-Go versions 1.36.0 through 1.40.0 are vulnerable to a resource exhaustion flaw in the W3C Baggage propagation mechanism. Unauthenticated remote attackers can trigger excessive memory and CPU consumption by sending requests with fragmented HTTP baggage headers, resulting in a Denial of Service condition.

Vulnerability Overview

OpenTelemetry-Go versions 1.36.0 through 1.40.0 contain a resource exhaustion vulnerability within the W3C Baggage propagation mechanism. The flaw, designated CVE-2026-29181, allows unauthenticated remote attackers to trigger a Denial of Service (DoS) condition via crafted HTTP requests. The vulnerability resides specifically within the go.opentelemetry.io/otel/baggage and go.opentelemetry.io/otel/propagation packages.

The baggage propagator is responsible for parsing and extracting distributed tracing context from incoming HTTP request headers. W3C Baggage specifications permit multiple baggage headers, treating them as semantically equivalent to a single concatenated header. The Go implementation parses these headers to reconstruct the context state for downstream telemetry propagation.

The implementation correctly enforces limits on individual headers but fails to bound the aggregate processing cost across multiple headers. This discrepancy enables a CPU and memory amplification attack. Attackers can intentionally fragment payloads across hundreds of headers to force excessive allocations, leading to degraded service performance or out-of-memory (OOM) crashes.

Root Cause Analysis

The vulnerability is classified under CWE-770 (Allocation of Resources Without Limits or Throttling). During request processing, the extractMultiBaggage function in propagation/baggage.go iterates over all instances of the baggage header provided within the TextMapCarrier. For each extracted header string, the function invokes baggage.Parse(bStr) to deserialize the key-value members.

The parsing routine includes a safety constraint restricting individual baggage header values to a maximum of 8192 bytes. However, this check evaluates each string in isolation. The state machine allocates memory and processes text structures for every parsed header, subsequently aggregating the parsed members into a shared slice without tracking the cumulative byte size or member count across the entire request.

Because the maximum total header size is governed only by the underlying HTTP server implementation—typically 1MB in the standard Go net/http package—an attacker can supply hundreds of 8191-byte headers. The baggage.Parse function processes each header sequentially. The CPU cycles consumed and memory allocated scale linearly with the number of headers, bypassing the intended design limits of the W3C specification.

Code Analysis

Prior to version 1.41.0, the extractMultiBaggage loop invoked baggage.Parse blindly on every header string. The parsed structures were appended to a running list of members. The lack of an early exit condition meant the server was forced to parse the entirety of the attacker's payload before constructing the final Baggage object.

The developers modified the core parsing logic in commit aa1894e09e3fe66860c7885cb40f98901b35277f to track both the aggregate member count and the cumulative byte size across all header instances. A global budget limits the total extracted members to 64, aligning strictly with W3C recommendations. The extraction loop now breaks immediately when the 8192-byte or 64-member limit is reached.

// Vulnerable implementation concept
for _, bStr := range headers {
    b, _ := baggage.Parse(bStr)
    members = append(members, b.Members()...)
}
 
// Patched implementation concept
var totalBytes int
for _, bStr := range headers {
    if totalBytes >= 8192 || len(members) >= 64 {
        break // Early exit prevents amplification
    }
    b, _ := baggage.Parse(bStr)
    members = append(members, b.Members()...)
    totalBytes += len(bStr)
}

The patch introduces partial returns, ensuring that valid members parsed before hitting the limit are retained. This implementation safely truncates oversized payloads without failing open or causing a hard operational fault.

Exploitation Methodology

Exploitation requires the attacker to identify an internet-facing service that utilizes OpenTelemetry-Go for distributed tracing. The attacker constructs a malicious HTTP request containing a high volume of baggage headers. Each individual header is padded to closely approach the 8192-byte limit, ensuring it passes the initial length validation checks within baggage.Parse.

The attacker transmits this request to the target server over standard HTTP or HTTPS. The Go net/http server accepts the request as long as the total header size remains under the default 1MB threshold. The application then passes the TextMapCarrier to the OpenTelemetry propagator, triggering the vulnerable extractMultiBaggage function.

Proof-of-concept testing demonstrates substantial resource amplification. Processing a baseline request with a single header allocates approximately 133 kilobytes across 480 memory allocations. When subjected to an attack payload containing 80 headers spread across 40 requests, memory allocations spike to over 10.3 megabytes and 16,165 total allocations. This translates to a measurable increase in p95 latency from 0ms to 7ms under modest load.

Impact Assessment

The primary impact is an application-layer Denial of Service. By continuously sending crafted requests, an attacker forces the Go runtime garbage collector into continuous operation, drastically increasing CPU consumption. Concurrently, the unconstrained allocations apply severe memory pressure to the application heap.

Prolonged exploitation leads to resource starvation for legitimate traffic. In memory-constrained environments such as Kubernetes containers or serverless functions, the operating system's Out-Of-Memory (OOM) killer will terminate the process. This requires orchestration systems to restart the service, causing persistent disruption to availability.

The vulnerability scores a 7.5 (High) on the CVSS v3.1 scale. The vector CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H reflects the network attack vector and the lack of authentication requirements. The flaw exclusively affects the availability of the system, maintaining the confidentiality and integrity of the underlying data.

Remediation and Mitigation

Organizations must upgrade the go.opentelemetry.io/otel/baggage and go.opentelemetry.io/otel/propagation packages to version 1.41.0. This release contains the updated parsing logic and strict global limit enforcement. Developers should verify dependency graphs to ensure transitive dependencies are also updated to the patched version.

If immediate patching is not feasible, operators should implement mitigations at the edge network layer. Web Application Firewalls (WAF) or ingress controllers can be configured to drop requests containing more than a predefined number of baggage headers. Alternatively, reverse proxies can enforce strict limits on the total byte size of HTTP headers per request.

Rate limiting and connection shedding provide secondary defense mechanisms against DoS conditions. Implementing strict memory bounds and automated restart policies at the container orchestration layer ensures the service recovers rapidly if an OOM event occurs. These operational controls reduce the systemic impact of resource exhaustion vulnerabilities.

Official Patches

OpenTelemetryOfficial Security Advisory
OpenTelemetryRelease Notes v1.41.0

Fix Analysis (1)

Technical Appendix

CVSS Score
7.5/ 10
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H

Affected Systems

OpenTelemetry-Gogo.opentelemetry.io/otel/baggagego.opentelemetry.io/otel/propagation

Affected Versions Detail

Product
Affected Versions
Fixed Version
OpenTelemetry-Go
OpenTelemetry
>= 1.36.0, <= 1.40.01.41.0
AttributeDetail
Vulnerability TypeResource Exhaustion / DoS
CWE IDCWE-770
CVSS Score7.5 (High)
Attack VectorNetwork
Privileges RequiredNone
Exploit MaturityProof of Concept

MITRE ATT&CK Mapping

T1499Endpoint Denial of Service
Impact
CWE-770
Allocation of Resources Without Limits or Throttling

Allocation of Resources Without Limits or Throttling

Vulnerability Timeline

Vulnerability identified and reported internally.
2026-02-04
Fix commit aa1894e authored and merged.
2026-02-28
Public advisory (GHSA-mh2q-q3fh-2475) and CVE-2026-29181 published.
2026-04-07
Official release of v1.41.0 containing the fix.
2026-04-07

References & Sources

  • [1]GHSA-mh2q-q3fh-2475 Advisory
  • [2]Fix Commit aa1894e
  • [3]Pull Request 7880
  • [4]NVD Entry CVE-2026-29181

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•5 minutes ago•CVE-2026-106443
8.8

CVE-2026-106443: Remote Code Execution in WeasyPrint via Unvalidated Pillow EPS Processing

A critical remote code execution vulnerability was identified in WeasyPrint prior to version 70.0. When compiling HTML containing a malicious Encapsulated PostScript (EPS) graphic on a host with Ghostscript installed, Pillow invokes Ghostscript to process the image, executing arbitrary PostScript commands.

Amit Schendel
Amit Schendel
0 views•8 min read
•about 1 hour ago•CVE-2026-106489
6.5

CVE-2026-106489: Authorization Bypass via Path Traversal in Spotify Backstage TechDocs Backend

An authorization bypass vulnerability in the Spotify Backstage TechDocs backend plugin allows authenticated attackers with access to at least one valid TechDocs site to read arbitrary static documentation from other entities. This occurs due to un-sanitized relative subpaths passing directly to external storage drivers.

Alon Barad
Alon Barad
3 views•7 min read
•about 2 hours ago•CVE-2026-106502
5.3

CVE-2026-106502: Sensitive Information Exposure in Backstage Scaffolder Backend

The @backstage/plugin-scaffolder-backend package prior to version 4.1.0 is vulnerable to sensitive information exposure in Scaffolder task failure events. Under specific template and failure conditions, an authenticated user can retrieve backend-managed credentials, such as VCS access tokens and API keys, from affected task execution events and stored database logs. This vulnerability has been remediated in version 4.1.0 of the package and is bundled with the Backstage platform release v1.54.6.

Amit Schendel
Amit Schendel
4 views•6 min read
•about 3 hours ago•CVE-2026-61436
8.6

CVE-2026-61436: Missing Webhook Signature Verification in PraisonAI AgentMail Endpoint

A critical security flaw exists in PraisonAI before version 4.6.78 when operating in AgentMail webhook mode. The application processes incoming POST requests without checking for cryptographic signatures, allowing unauthenticated attackers to forge emails, spoof identities, and force AI agents to execute unauthorized operations.

Amit Schendel
Amit Schendel
4 views•7 min read
•about 4 hours ago•CVE-2026-62179
6.5

CVE-2026-62179: Missing Authorization in praisonai-platform Dependency Deletion Route

A missing authorization vulnerability (CWE-862) exists in praisonai-platform versions prior to 0.1.9, allowing low-privileged workspace members to delete planning dependencies on issues owned by administrators by routing the deletion request through an attacker-owned issue.

Amit Schendel
Amit Schendel
3 views•6 min read
•about 5 hours ago•CVE-2026-46438
6.5

CVE-2026-46438: Broken Object Level Authorization in wger Workout Log Endpoint

CVE-2026-46438 is a critical Broken Object Level Authorization (BOLA) / Insecure Direct Object Reference (IDOR) vulnerability identified in the wger fitness manager prior to version 2.6. An authenticated attacker can exploit a missing authorization check on the slot_entry API parameter to inject unauthorized workout logs into another user's training schedule. This results in the corruption of the target user's automated progressive-overload calculations.

Amit Schendel
Amit Schendel
7 views•5 min read