Skip to main content

OpenTelemetry Python EUVDEUVD-2026-108216

| CVE-2026-114603 MEDIUM
Uncontrolled Resource Consumption (CWE-400)
2026-10-22 GitHub_M GHSA-xcq7-p3pf-p88h
5.3
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Send request with oversized tracestate header
  2. Delivery
    Pass permissive HTTP header-size limit
  3. Exploit
    Trigger quadratic regex backtracking in TraceState.from_header
  4. Execution
    Occupy worker / block asyncio event loop
  5. Impact
    Deny service to concurrent requests

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A06:2025 - Insecure Design
ASVS 5.0
V2 - Validation and Business Logic Resource consumption limits
MITRE ATT&CK

1 technique across 1 tactic: Impact

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

Exploitation requires a service using the default W3C Trace Context propagator (OTEL_PROPAGATORS defaults to tracecontext,baggage) with server instrumentation that calls propagate.extract(), such as opentelemetry-instrumentation-asgi, running opentelemetry-api <= 1.45.0. The decisive limiting factor is the fronting HTTP server/parser's header-size handling: the attack only lands where headers larger than roughly 16-30 KB are accepted. Per the advisory's testing, gunicorn rejects headers >= 8190 bytes (431) and uvicorn --http h11 rejects above 16 KiB (400), both of which neutralize the attack, whereas waitress (up to ~256 KiB) and the default uvicorn[standard] httptools parser (accepted 300 KB to 20 MB) let it through. Impact is worst on asyncio servers, where blocking the event loop stalls all concurrent connections. No authentication or user interaction is required.

Impact

This is a genuine but moderate-priority availability issue, not a false-positive high-CVSS artifact - the signals are internally consistent. The CVSS 3.1 vector (AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L, 5.3 Medium) correctly reflects a remote, unauthenticated, low-complexity flaw with availability-only impact and no confidentiality or integrity effect; the advisory explicitly states it does not expose or modify telemetry and does not allow code execution, so the 'RCE' input tag is contradicted by the primary evidence. The vuln.today decision label is 'this_month' (not act_now/emergency), aligning with a Medium severity rather than drop-everything urgency. No CISA KEV listing and no EPSS score were supplied, so there is no evidence of active exploitation - exploitation status is 'no public exploit identified' in KEV terms, but a complete, measured proof-of-concept IS included in the GHSA advisory, so the issue is fully reproducible. One nuance worth flagging: the CVSS base score uses A:L (partial availability), yet the advisory shows a single ~100 KB request can stall an entire asyncio event loop for 6-12 seconds and that repeating it keeps the service unavailable, which operationally trends toward higher availability impact than A:L implies - verify against your own deployment's concurrency model. Real-world risk is materially gated by HTTP-layer header-size limits (see exploitation_conditions), which prevents this from being a universally trivial DoS despite PR:N/AC:L.

Exploit ScenarioDerived

An unauthenticated attacker sends a single HTTP request carrying a valid traceparent and a malicious tracestate header consisting of a valid member followed by a long run (~100 KB) of spaces or tabs with no trailing comma. A server using the default W3C Trace Context propagator parses it via TraceContextTextMapPropagator.extract, triggering O(N²) regex backtracking that consumes 6-12 seconds of CPU on one request and, under an asyncio server such as uvicorn with httptools, blocks every other connection for that duration. A functional proof-of-concept demonstrating both the quadratic cost and the server stall is published in the GHSA advisory.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.5% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Oct 22, 2026

Denial of service in OpenTelemetry Python (opentelemetry-api through 1.45.0) lets a single unauthenticated request carrying an oversized W3C tracestate header burn roughly 6-12 seconds of CPU, and on asyncio servers stall every other connection on the event loop for that duration. The flaw is a quadratic-time regex split in TraceState.from_header that is reached automatically through the default tracecontext propagator, so any service instrumented with something like opentelemetry-instrumentation-asgi is affected without special configuration; exploitation is gated by the fronting HTTP parser's header-size limit, with gunicorn and uvicorn's h11 parser rejecting the header while waitress and uvicorn's default httptools parser accept it. A working proof-of-concept with measured timings is included in the upstream advisory (public PoC reference), but no confirmed active exploitation (CISA KEV) is indicated in the supplied intelligence, and the assessed CVSS of 5.3 reflects availability-only impact (C:N/I:N/A:L).

RemediationAI

Vendor-released patch: upgrade opentelemetry-api to 1.45.1 (release notes at https://github.com/open-telemetry/opentelemetry-python/releases/tag/v1.45.1, fix in PR https://github.com/open-telemetry/opentelemetry-python/pull/5749 and commit d5224bf4ffdf2aee1b592ad238dcc32ca957f26b), which replaces the quadratic regex split with a linear split-and-strip, removes the delimiter pattern, and discards tracestate headers whose combined length exceeds 8192 characters while preserving traceparent extraction. Because the fix discards rather than parses oversized tracestate values, deployments that legitimately forward unusually large tracestate lists will lose that vendor state after upgrading - acceptable given the W3C list limit of 512 characters. Where upgrading is delayed, the effective compensating control is a hard header-size limit in front of the Python worker: front with gunicorn, whose 8190-byte cap returns 431, or run uvicorn with --http h11, which rejects headers above 16 KiB with 400, both of which prevent the malformed header from ever reaching from_header. Do not rely on the default uvicorn[standard] httptools parser, which accepted headers up to 20 MB in the advisory's tests, and review any waitress deployment (accepts up to ~256 KiB) or gateway/custom carrier that passes large headers through; tighten those limits at the proxy layer, with the trade-off that unrelated legitimate headers such as large cookies or authorization tokens must fit under the new cap. The advisory also notes that under a synchronous worker the cost is one busy worker, while under asyncio the whole event loop is blocked, so process-per-request WSGI deployments degrade more gracefully than asyncio ones during the pre-patch window.

Affected VersionsENISA

opentelemetry-python < 1.45.1

Affected Packages

pypi opentelemetry-api fix: 1.45.1
euvd opentelemetry_python fix: 1.45.1

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 2 packages in pypi, euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

W3C Trace Context defines two propagation headers: traceparent, which carries the trace/span IDs, and tracestate, a comma-separated list of vendor key/value pairs that a service should forward unchanged. In opentelemetry-api, TraceContextTextMapPropagator.extract() reads the inbound tracestate header from the carrier and passes it to TraceState.from_header() in opentelemetry/trace/span.py, which split the string with the compiled pattern r"[ \t]*,[ \t]*". That pattern begins with an unbounded optional-whitespace run; at every offset inside a long run of spaces or tabs the engine consumes the remainder of the run, fails to find a comma, backtracks, and advances one character, producing O(N²) work (CWE-400 resource consumption, classified upstream also as CWE-1333 inefficient regular-expression complexity). The 32-member tracestate key cap is only enforced later in TraceState.__init__, after the split has already completed, and there is no pre-parse length check - unlike the sibling baggage propagator, which rejects headers above its _MAX_HEADER_LENGTH of 8192 bytes before any regex runs. The advisory reports the cost quadrupling each time the input doubles (about 0.06 s at 10,000 characters, 1 s at 40,000, 4 s at 80,000, 9 s at 100,000, with tab characters roughly 1.6× slower), and the trigger is entirely attacker-controlled header content rather than a timing or race condition. The same pattern is present from v1.0.0 (introduced in March 2021) through v1.45.0; the fix replaces the regex split with plain str.split(",") plus strip(" \t") and adds an 8192-character combined-length guard that discards the tracestate while still honoring traceparent.

Know when Opentelemetry Python gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (GitHub_M) PRIMARY 5.3 MEDIUM
AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L
vuln.today AI 5.3 MEDIUM

Remote unauthenticated single request with no interaction (AV:N/AC:L/PR:N/UI:N); availability-only, partial per-request impact gated by server header limits, so A:L and C/I:N.

3.1 AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L
4.0 AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N
Red Hat 5.3 MEDIUM

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
Unchanged
Confidentiality
None
Integrity
None
Availability
Low

Lifecycle Timeline

1
Patch available
Oct 22, 2026 - 16:02 EUVD

DescriptionCVE.org

OpenTelemetry Python provides the Python API and SDK for OpenTelemetry. Prior to 1.45.1, the opentelemetry-api function TraceState.from_header in opentelemetry/trace/span.py, reached through TraceContextTextMapPropagator.extract, parses inbound W3C tracestate headers with an unbounded optional-whitespace regular expression. A malformed header containing a long run of spaces or tabs without a following comma causes quadratic backtracking before the member-count limit is applied. Services using the default W3C Trace Context propagator can therefore spend excessive CPU time on one unauthenticated request when the HTTP server, parser, gateway, or custom carrier accepts a sufficiently large header. The processing can occupy a synchronous worker or delay unrelated requests on the same asynchronous event loop. The impact is limited to availability and does not expose or modify telemetry data or allow code execution. This issue is fixed in version 1.45.1.

Blast Radius

ecosystem impact
† from your stack dependencies † transitive graph · vuln.today resolves 4-path depth
  • 62,839 pypi packages depend on opentelemetry-api (2,255 direct, 60,900 indirect)

Ecosystem-wide dependent count for version 1.45.1.

Threat Intelligence Overview

EPSS Score
0.5%
Top 59% exploitable
Prevalence
Medium
popular Python observability SDK, common but not universally deployed
Threat Intel
1
1 source
Social Media
1
Sightings
Data Quality
4 sources
Confidence: Medium

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC No
EPSS 0.5%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
Yes
Human Impact· derived
Medium

Priority Score

26
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +26
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.

Vendor StatusVendor

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy