Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessInfluence traced span attribute content
-
DeliveryEmbed U+FFFD in over-limit strings
-
ExploitTruncation bypass retains oversized values
-
ExecutionRepeat across many spans
-
ImpactMemory 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. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – 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
Affected Packages
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
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
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.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
2DescriptionCVE.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
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.
What every action level means
SSVC AssessmentENISA
Priority Score
Denial of service against HTTP/2 server implementations allows remote unauthenticated attackers to exhaust server resour
The net/http package in Go through 1.6 does not attempt to address RFC 3875 section 4.1.18 namespace conflicts and there
Critical certificate validation bypass in Go crypto/tls during session resumption. If ClientCAs or RootCAs fields are mu
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
Casdoor through 4.4.0 exposes its instance-wide built-in JWT signing private key unmasked through the /api/get-certs and
Host header injection in Nezha 2.2.3's OAuth2 redirect endpoint (/api/v1/oauth2/{provider}) allows an unauthenticated re
Session cross-wiring in SUSE NeuVector before 5.6.1 allows an unauthenticated remote attacker to obtain another user's a
Unauthenticated path traversal in Uber Kraken through 0.1.29 allows remote attackers to read files outside the configure
The "go get" implementation in Go 1.9.4, when the -insecure command-line option is used, does not validate the import pa
Denial of service in Temporal Server allows an authenticated caller holding at least namespace read permission to crash
Account takeover in Klever-Go's KleverUpdateAccountPermission built-in (all versions prior to 1.7.20) allows an attacker
Maliciously crafted on-chain account names processed by Klever-Go prior to 1.7.20 are spliced into Elasticsearch _bulk r
EUVD-2026-81260
GHSA-p9f8-wvj8-2fg8
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB