OpenTelemetry .NET CVE-2026-42191
HIGHAttack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessObtain local account on shared host
-
DeliveryLocate predictable %TEMP%/traces blob directory
-
ExploitWrite crafted *.blob files
-
ExecutionExporter loads blobs on 60s retry cycle
-
ImpactForged telemetry forwarded under application identity
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V5 - File Handling Temp file permissions
|
| Exploitation Conditions | Exploitation requires all of: (1) the application sets OTEL_DOTNET_EXPERIMENTAL_OTLP_RETRY=disk; (2) OTEL_DOTNET_EXPERIMENTAL_OTLP_DISK_RETRY_DIRECTORY_PATH is NOT set, forcing the exporter to resolve storage to Path.GetTempPath() and create fixed traces/metrics/logs subdirectories; and (3) the attacker holds a separate local account with read/write access to that shared temp root (/tmp on Linux, %TEMP% on a multi-user Windows install). Limiting factors that reduce realistic risk: the feature is experimental and off by default, the insecure path only occurs when the directory variable is omitted, the attacker must already have local access on the same host, and the temp directory must actually be shared/accessible across users - single-tenant hosts or properly ACL'd temp directories are not exposed. The only complete fix per the vendor is upgrading to 1.15.3, which removes the fallback and throws if the directory variable is unset; interim mitigations are avoiding disk retry in shared environments, configuring a dedicated least-privilege directory, not sharing it across tenants, and monitoring for unexpected *.blob files or retry backlog growth. |
| Impact | Signals are consistent and point to a real-but-conditional local issue rather than an internet-facing emergency. The CVSS 3.1 vector (AV:L/AC:L/PR:L/UI:N, C:H/I:H/A:H, score 7.8 HIGH) describes a local, low-privilege attack with high impact across confidentiality, integrity and availability - matching CWE-379 (temp file in a directory with insecure permissions). EPSS is 0.01% (2nd percentile), which is expected for a local-only flaw gated behind a non-default experimental configuration, and there is no CISA KEV listing, so there is no evidence of active or widespread exploitation. The vuln.today decision label is 'this_week', indicating prompt but non-emergency patching. These signals do not conflict: a high CVSS driven by full CIA impact coexists with very low real-world exploitation probability because the attack requires an attacker-controlled local account on a multi-user host AND a victim that enabled the experimental disk-retry feature without setting a dedicated directory. The main uncertainty is the real-world footprint of that specific misconfiguration; the vulnerability class and impact are confirmed, but how many deployments actually run the experimental disk retry with the default temp path is unknown from the provided data. Treat as a priority for the narrow set of multi-tenant/shared .NET hosts using this feature; lower priority elsewhere. |
| Exploit ScenarioDerived | On a shared multi-user host, a target .NET application runs with OTEL_DOTNET_EXPERIMENTAL_OTLP_RETRY=disk but no explicit retry directory, so the exporter falls back to the world-accessible temp root and creates predictable subdirectories (/tmp/traces, /tmp/metrics, /tmp/logs or the %TEMP% equivalents). A separate local user drops crafted *.blob files into one of those directories, and on the next ~60-second retry cycle the exporter loads and forwards them to the configured OTLP endpoint under the application's identity (integrity); the same user can also read blobs the app wrote after transient failures to recover serialized telemetry (confidentiality), or flood the directory with oversized blobs to exhaust CPU/IO/disk (availability). No public exploit identified at time of analysis; the only referenced code is the vendor patch (PR #7106). |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv3 – Oct 26, 2026
The OpenTelemetry .NET OTLP exporter's experimental disk-retry feature can be abused by an authenticated local attacker when OTEL_DOTNET_EXPERIMENTAL_OTLP_RETRY=disk is set without OTEL_DOTNET_EXPERIMENTAL_OTLP_DISK_RETRY_DIRECTORY_PATH, causing retry blobs to be written to and read from fixed traces, metrics and logs subdirectories under the shared system temp root. An attacker holding a separate local account with read/write access to that temp directory can inject crafted *.blob files that the exporter later forwards to the configured OTLP endpoint under the application's identity and credentials, read the application's own serialized telemetry blobs, or flood the retry loop with oversized files to degrade performance and consume disk. The affected NuGet package is OpenTelemetry.Exporter.OpenTelemetryProtocol from 1.8.0 through 1.15.2 and is fixed in 1.15.3; the feature is experimental and off by default, exposure only arises when the directory variable is omitted, and no public exploit code was identified at time of analysis (EPSS 0.01%, no KEV entry), so risk is real but conditional on shared-temp multi-user hosts.
Earlier versions of this analysis (2)
The OTLP exporter for .NET (OpenTelemetry.Exporter.OpenTelemetryProtocol, versions 1.8.0 through 1.15.2) stores retry blobs in predictable signal-named subdirectories under the shared system temp directory whenever disk retry is enabled without an explicit retry directory, allowing an authenticated local attacker who can read or write that temp root to inject crafted *.blob files that the exporter later forwards to the OTLP endpoint under the application's identity, to read telemetry blobs written after export failures, and to exhaust disk or retry-loop resources. Exploitation requires the experimental OTEL_DOTNET_EXPERIMENTAL_OTLP_RETRY=disk setting, an unset OTEL_DOTNET_EXPERIMENTAL_OTLP_DISK_RETRY_DIRECTORY_PATH, and a multi-user host with a world-accessible temp directory (/tmp or %TEMP%), so the affected configuration is uncommon; there is no remote path. No public exploit has been identified at time of analysis and EPSS is 0.01% (percentile 2), and a vendor fix is available in 1.15.3.
OpenTelemetry.Exporter.OpenTelemetryProtocol versions 1.8.0 through 1.15.2 allow local attackers to inject malicious telemetry data, disclose stored telemetry payloads, or exhaust system resources by exploiting an insecure default disk retry directory that falls back to the shared system temporary path when the required directory configuration is not explicitly set. On multi-user systems, this enables attackers with read or write access to the temp directory to craft blob files that the exporter will forward to the OTLP endpoint under the application's identity, or to read exported telemetry data between transient export failures.
RemediationAI
Upgrade OpenTelemetry.Exporter.OpenTelemetryProtocol to 1.15.3, the vendor-released patched version referenced in GHSA-4625-4j76-fww9 (https://github.com/open-telemetry/opentelemetry-dotnet/security/advisories/GHSA-4625-4j76-fww9) via PR https://github.com/open-telemetry/opentelemetry-dotnet/pull/7106 and commit 78dffdc5ebdf3dc090fdb94e3f1a32d3d1e26dfd. The vendor describes this as the only complete fix and notes it is a breaking change: disk retry now requires OTEL_DOTNET_EXPERIMENTAL_OTLP_DISK_RETRY_DIRECTORY_PATH and throws NotSupportedException when it is missing, so any deployment relying on the temp fallback will fail to start until the variable is set - for Windows the prior behaviour can be reproduced by pointing the variable at the value of TMP, TEMP or USERPROFILE, and on Linux/macOS at TMPDIR or literally /tmp/. If upgrading immediately is not possible, the vendor's interim measures are to avoid enabling disk retry in shared environments at all (losing retry persistence across export failures), to configure a dedicated directory with strict ACLs and ownership under least privilege (which requires the same OTEL_DOTNET_EXPERIMENTAL_OTLP_DISK_RETRY_DIRECTORY_PATH setting that the patch makes mandatory), to ensure that directory is never shared across tenants or users, and to monitor for unexpected *.blob files or abnormal retry backlog growth.
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in nuget
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
The flaw is CWE-379 (creation of a temporary file in a directory with insecure permissions), rooted in the .NET System.IO.Path.GetTempPath() API, which resolves to /tmp on Linux/macOS and %TEMP% on Windows - locations commonly readable or writable by other local accounts on multi-user systems. In OpenTelemetry.Exporter.OpenTelemetryProtocol, ExperimentalOptions previously fell back to this shared root whenever OTEL_DOTNET_EXPERIMENTAL_OTLP_RETRY=disk was configured without an explicit OTEL_DOTNET_EXPERIMENTAL_OTLP_DISK_RETRY_DIRECTORY_PATH, and OtlpExporterPersistentStorageTransmissionHandler then persisted and reloaded Protobuf-encoded *.blob files in predictable, signal-named subdirectories (traces, metrics, logs). Because the retry loop rescans those directories on a default 60-second interval, any file present there is treated as pending telemetry and transmitted to the configured OTLP endpoint using the host application's transport credentials, while files written by the application after a transient export failure remain readable by any account that can reach the same path. The trigger is a race-free, predictable-path condition rather than a memory-safety issue; the CVSS vector (AV:L/PR:L) reflects that a local, authenticated account on the same host is required and that confidentiality, integrity and availability impacts are all high once the preconditions hold.
Know when .NET 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
AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Local co-tenant with their own low-privilege account (AV:L/PR:L) exploits a world-accessible temp dir without victim interaction (AC:L/UI:N), gaining full read/inject/exhaust capability (C:H/I:H/A:H).
Primary rating from NVD.
CVSS VectorNVD
Lifecycle Timeline
6DescriptionNVD
Summary
The OTLP disk retry feature in OpenTelemetry.Exporter.OpenTelemetryProtocol silently fell back to Path.GetTempPath() when OTEL_DOTNET_EXPERIMENTAL_OTLP_RETRY=disk was set but OTEL_DOTNET_EXPERIMENTAL_OTLP_DISK_RETRY_DIRECTORY_PATH was not configured.
The exporter stored and loaded *.blob files under fixed, signal-named subdirectories (traces, metrics, logs) beneath that shared temporary root path.
On multi-user systems where the temporary directory is accessible to other local accounts, this exposed three attack surfaces:
- Blob injection (integrity): an attacker could write crafted
*.blobfiles into the predictable path; the exporter picks them up on the next retry cycle and forwards them to the configured OTLP endpoint under the application's identity. - Telemetry disclosure (confidentiality): an attacker reads
*.blobfiles written by the application between export failures, recovering encoded telemetry payloads (spans, metric data points, log records). - Resource exhaustion (availability): an attacker deposits numerous or oversized blob files, degrading retry-loop performance or consuming disk space.
Details
Preconditions
OTEL_DOTNET_EXPERIMENTAL_OTLP_RETRYis set todisk.OTEL_DOTNET_EXPERIMENTAL_OTLP_DISK_RETRY_DIRECTORY_PATHis not set, causing the exporter to resolve the blob storage root using theSystem.IO.Path.GetTempPath()API.- A local attacker has read or write access to the process' temporary directory (e.g.,
/tmpon Linux, or%TEMP%on a multi-user Windows installation).
Exploit path
- A target application starts with
OTEL_DOTNET_EXPERIMENTAL_OTLP_RETRY=diskand no explicit blob directory. The exporter resolves the storage root toPath.GetTempPath(), producing paths such as%TEMP%\traces,%TEMP%\metrics, and%TEMP%\logs(or/tmp/tracesetc. on Linux). - Injection scenario: before or during the application's retry window, an attacker writes crafted
*.blobfiles into one of those signal subdirectories. On the next retry interval (by default every 60 seconds),OtlpExporterPersistentStorageTransmissionHandlerscans the directory, loads the attacker-supplied blobs, and forwards them to the configured OTLP endpoint using the application's identity and transport credentials. - Disclosure scenario: the attacker reads
*.blobfiles that the application wrote after a transient export failure, recovering the full serialized telemetry payloads (spans, metric data points, or log records in Protobuf encoding). - DoS scenario: the attacker deposits a large number of oversized blob files in the temporary subdirectories, causing the retry loop to consume excess CPU/IO processing them, potentially exhausting available disk space.
Mitigations
If an immediate upgrade to a patched version is not possible:
- Avoid enabling disk retry in shared environments.
- Configure a dedicated directory with strict ACL/ownership and least privilege.
- Ensure the directory is not shared across tenants/users.
- Monitor for unexpected
*.blobfiles or abnormal retry backlog growth.
Resources
Executive ViewAI
A high-severity flaw in the OpenTelemetry .NET OTLP exporter (CVE-2026-42191) allows a local attacker on a shared system to tamper with telemetry data and potentially inject falsified records into your observability pipeline, undermining the integrity of logs, metrics, and traces that leadership and security teams rely on. Exposure is limited to environments that have opted into an experimental disk-retry feature and left it misconfigured, so the affected population is narrow but includes teams running detailed telemetry collection. Because compromised telemetry can mask attacker activity and corrupt audit evidence, the issue merits prompt remediation wherever the feature is enabled.
Vendor-released patch: 1.15.3
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
Attack Technique
Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.
Affected Products (CPE)NVD
Remote code execution affects Windows desktop applications built on the Microsoft.WindowsDesktop.App.Runtime (WPF) compo
Changjetong T+ (through 16.x) has .NET deserialization RCE in an AjaxPro endpoint. Attacker-controlled JSON triggers des
SQL injection (CWE-89) in Marten, the .NET transactional document DB and event store for PostgreSQL, affects versions 7.
Argument injection in the CliInvoke .NET process-wrapping library (and its former identity, AlastairLundy.CliInvoke) all
SD.NET RIM versions before 4.7.3c contain a SQL injection vulnerability that allows attackers to inject malicious SQL st
PowerDocu versions prior to 2.4.0 allow arbitrary .NET object instantiation and code execution through unsafe deserializ
Weak authentication in ASP.NET Core & Visual Studio allows an unauthorized attacker to elevate privileges over a net
NanaZip versions 5.0.1252.0 through 6.0.1629.0 contain an out-of-bounds heap read in the .NET Single File bundle parser
Out-of-bounds memory read in NanaZip versions 5.0.1252.0 through 6.0.1637.x allows local authenticated attackers to disc
DotNetNuke 9.5 contains a persistent cross-site scripting vulnerability that allows normal users to upload malicious XML
Asp.Net-Core-Inventory-Order-Management-System versions up to 9.20250118. contains a security vulnerability (CVSS 6.3).
Remote code execution in the ActiveMQ NMS AMQP .NET client affects all releases up to and including 2.3.0 when the clien
GHSA-4625-4j76-fww9
NVD
CVE.org
EPSS
VulDB
Exploit-DB