Skip to main content

OpenTelemetry Go SDK EUVDEUVD-2026-81260

| CVE-2026-81869 MEDIUM
Improper Handling of Unicode Encoding (CWE-176)
2026-09-16 GitHub_M GHSA-p9f8-wvj8-2fg8
5.1
CVSS 4.0 · Vendor: GitHub_M
View

Attack ChainAIDerived

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

  1. Access
    Influence traced span attribute content
  2. Delivery
    Embed U+FFFD in over-limit strings
  3. Exploit
    Truncation bypass retains oversized values
  4. Execution
    Repeat across many spans
  5. Impact
    Memory growth weakens DoS protection

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Unicode normalization
Exploitation Conditions

Requires that (1) the instrumented Go application uses opentelemetry-go SDK trace between 1.10.0 and 1.33.0, (2) an AttributeValueLengthLimit is actually configured (the limit being bypassed), and (3) the attacker can influence content that the application records as a string or string-slice span attribute, specifically embedding the valid Unicode replacement character U+FFFD so the truncation path returns the original oversized value. Limiting factors: impact is confined to increased memory within the instrumented process (no code execution, data disclosure, or crash guarantee); meaningful denial-of-service requires sustained high-volume malicious input; and deployments not enforcing a length limit see no behavioral change. The vendor rates the vector as local (AV:L), which further constrains scoring, though real attribute content is frequently derived from remote input.

Impact

This is a low-to-moderate real-world risk, best characterized as a defense-in-depth/hardening weakness rather than a directly exploitable flaw. The vendor CVSS 4.0 vector (5.1, AV:L/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:L) correctly caps impact at low availability only - there is no confidentiality or integrity impact, and the sole effect is that oversized attribute values evade the configured AttributeValueLengthLimit, increasing per-span memory use. There is no EPSS score, no CISA KEV listing, and no public exploit code (only the fix PR, issue, and advisory), so exploitation status is 'no public exploit identified at time of analysis.' The most notable data tension is the attack vector: the vendor scored AV:L, yet the description says an attacker merely needs to 'control span attribute content,' which in most instrumented services is populated from network-facing input (HTTP headers, request parameters, user-supplied fields) - verify AV with the vendor, as AV:N (my assessment, ~5.3) is arguably more representative of real deployments. Either way the ceiling is a marginal memory-pressure amplification that only matters where a length limit was deliberately relied upon for DoS mitigation, so this is a patch-in-normal-cycle issue, not an emergency.

Exploit ScenarioDerived

An attacker who can influence data recorded as span attributes (e.g. a request field, header, or user-controlled string that the instrumented Go service traces) crafts values that exceed AttributeValueLengthLimit but embed the valid Unicode replacement character U+FFFD. Because the SDK's truncation path returns the original oversized value instead of trimming it, the process retains large attributes across many spans, gradually inflating memory use and weakening the DoS protection the limit was meant to provide. No public exploit code exists; this requires sustained high-volume malicious input to produce meaningful memory pressure.

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

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

Alert me

AnalysisAIv1 – Sep 16, 2026

Span attribute length limits can be bypassed in the OpenTelemetry-Go SDK trace package from 1.10.0 up to (but not including) 1.33.0, allowing an attacker who controls content recorded as a span attribute to retain string values far longer than the configured AttributeValueLengthLimit and thereby inflate per-span memory use inside the instrumented process. The root cause is a Unicode handling defect: the truncation helper misclassifies the valid replacement character U+FFFD as invalid UTF-8 and returns the original oversized value, and a fallback sanitization pass also leaves it unchanged. The impact is limited to a weakening of the SDK's built-in denial-of-service guard - there is no code execution, no confidentiality or integrity impact, and no public exploit code identified at time of analysis; the vendor scores it 5.1 (CVSS 4.0, AV:L, PR:N, VA:L) and our independent assessment is CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L.

RemediationAI

Vendor-released patch: upgrade go.opentelemetry.io/otel/sdk to sdk/v1.33.0 or later (release tag https://github.com/open-telemetry/opentelemetry-go/releases/tag/sdk/v1.33.0, commit e016a78c9f5b24a1c2beeaad47686c2f2213f49a, PR https://github.com/open-telemetry/opentelemetry-go/pull/5997, advisory https://github.com/open-telemetry/opentelemetry-go/security/advisories/GHSA-p9f8-wvj8-2fg8), update go.mod/go.sum accordingly, and rebuild and redeploy so the new truncation logic is in effect; bumping the pseudo-version alone without rebuilding leaves the old code linked in. Where an immediate upgrade is not possible, compensating controls are: sanitize attribute values at the call site by stripping or replacing U+FFFD (and other multi-byte runes) before calling SetAttributes, or pre-truncate with your own byte-length check - the trade-off is that this alters legitimate attribute data and must be applied consistently at every instrumentation point; alternatively enforce limits downstream by dropping or trimming oversized attributes in a SpanProcessor or exporter (for example, filtering in a custom processor before export), which reduces what reaches storage but does not remove the memory pressure already incurred while the span is live; raising or removing the limit is not a mitigation since the truncation path itself is the thing being bypassed, and simply lowering the limit does not help because the oversized value is returned intact. Finally, restrict or validate the sources that feed uncontrolled string attributes (e.g. cap user-supplied headers, log fields, or error strings that get attached to spans) so an external party cannot repeatedly push multi-kilobyte values, and monitor process memory/RSS for anomalous growth while patches roll out. Note that deployments that never configure an AttributeValueLengthLimit see no behavioral change and require no action beyond routine version hygiene.

Affected VersionsENISA

opentelemetry-go 1.10.0, < 1.33.0

Affected Packages

go go.opentelemetry.io/otel/sdk fix: 1.33.0
euvd opentelemetry_go_1_10_0 fix: 1.33.0

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 2 packages in go, euvd

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

Technical ContextAI · show details

The affected component is go.opentelemetry.io/otel/sdk/trace, the tracing SDK implementing span limits for OpenTelemetry in Go (CWE-176, Improper Handling of Unicode Encoding). When a span attribute exceeds the configured AttributeValueLengthLimit, span.go routes the value through helper functions that are supposed to trim it at a valid UTF-8 rune boundary. The legacy safeTruncateValidUTF8 loop iterated with utf8.DecodeRuneInString and treated any return equal to utf8.RuneError as evidence of invalid encoding, returning the caller's original input untouched. This is wrong: DecodeRuneInString returns RuneError for a genuinely malformed byte (with size 1) but also returns it for a legitimately encoded U+FFFD replacement character (the three-byte sequence EF BF BD, returned with size 3). Because the check ignored the returned size, a perfectly valid U+FFFD in the attribute value caused the function to signal failure and pass the whole oversized string through. The secondary path applied strings.ToValidUTF8(input, "") before retrying, but that function deliberately preserves an already-valid U+FFFD, so the retried truncation failed identically and the oversized value survived. The fix in PR 5997 replaces these helpers with a single truncate function that distinguishes invalid encodings via size == 1, drops only genuinely malformed bytes, counts runes against the limit, and returns a size-bounded string; related unit tests were adjusted (a euro-sign case that previously truncated to an empty string now correctly retains "€"). Note that this corrects both the U+FFFD bypass and an adjacent over-truncation of valid multi-byte characters.

Know when Go 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.1 MEDIUM
CVSS:4.0/AV:L/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N
vuln.today AI 5.3 MEDIUM

Span attribute content is commonly sourced from remote/user input so AV:N; only availability (memory-pressure) impact and it is marginal, hence 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

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Local
Attack Complexity
Low
Attack Requirements
None
Privileges Required
None
User Interaction
None
Vulnerable system: Confidentiality
None
Vulnerable system: Integrity
None
Vulnerable system: Availability
Low
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

Lifecycle Timeline

2
Patch available
Sep 16, 2026 - 22:04 EUVD
CVE Published
Sep 16, 2026 - 20:41 cve.org
MEDIUM 5.1

DescriptionCVE.org

OpenTelemetry-Go is the Go implementation of OpenTelemetry. From version 1.10.0 until 1.33.0, the sdk/trace/span.go attribute truncation path can fail to enforce AttributeValueLengthLimit for string and string-slice attributes containing the valid Unicode replacement character U+FFFD. safeTruncateValidUTF8 treats the valid replacement rune as invalid UTF-8 and returns the original input, while strings.ToValidUTF8 leaves that valid rune unchanged, so a second safeTruncate attempt can also return the oversized value. An attacker who controls span attribute content can retain values longer than the configured limit, increasing per-span memory use and weakening denial-of-service protection in the instrumented process. This issue is fixed in version 1.33.0.

Threat Intelligence Overview

EPSS Score
0.1%
Top 97% exploitable
Prevalence
High
OpenTelemetry-Go is a widely-deployed cloud-native observability instrumentation SDK
Threat Intel
1
1 source
Exploit
POC
Public exploit code exists
Data Quality
6 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment GHSA GitHub

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 Yes
EPSS 0.1%
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
Defer
Exploitation
Poc
System Exposure· derived
Small
Automatable
No
Human Impact· derived
Medium
Technical Impact
Partial

Priority Score

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

More in Go

View all
CVE-2023-44487 HIGH POC
7.5 Oct 10

Denial of service against HTTP/2 server implementations allows remote unauthenticated attackers to exhaust server resour

CVE-2016-5386 HIGH
8.1 Jul 19

The net/http package in Go through 1.6 does not attempt to address RFC 3875 section 4.1.18 namespace conflicts and there

CVE-2025-68121 CRITICAL POC
10.0 Feb 05

Critical certificate validation bypass in Go crypto/tls during session resumption. If ClientCAs or RootCAs fields are mu

CVE-2019-14809 CRITICAL POC
9.8 Aug 13

net/url in Go before 1.11.13 and 1.12.x before 1.12.8 mishandles malformed hosts in URLs, leading to an authorization by

CVE-2026-90942 CRITICAL POC
9.3 Sep 14

Casdoor through 4.4.0 exposes its instance-wide built-in JWT signing private key unmasked through the /api/get-certs and

CVE-2026-101090 CRITICAL POC
9.3 Sep 27

Host header injection in Nezha 2.2.3's OAuth2 redirect endpoint (/api/v1/oauth2/{provider}) allows an unauthenticated re

CVE-2026-78428 HIGH POC
8.8 Sep 17

Session cross-wiring in SUSE NeuVector before 5.6.1 allows an unauthenticated remote attacker to obtain another user's a

CVE-2026-92791 HIGH POC
8.7 Sep 16

Unauthenticated path traversal in Uber Kraken through 0.1.29 allows remote attackers to read files outside the configure

CVE-2018-7187 HIGH POC
8.8 Feb 16

The "go get" implementation in Go 1.9.4, when the -insecure command-line option is used, does not validate the import pa

CVE-2026-16651 HIGH POC
8.7 Sep 21

Denial of service in Temporal Server allows an authenticated caller holding at least namespace read permission to crash

CVE-2026-82405 HIGH POC
8.7 Sep 23

Account takeover in Klever-Go's KleverUpdateAccountPermission built-in (all versions prior to 1.7.20) allows an attacker

CVE-2026-82409 HIGH POC
8.4 Sep 23

Maliciously crafted on-chain account names processed by Klever-Go prior to 1.7.20 are spliced into Elasticsearch _bulk r

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