Aspire 13.2.4 закрывает CVE-2026-40894: DoS через заголовок baggage в OpenTelemetry .NET
Aspire 13.2.4 поднимает зависимости OpenTelemetry для устранения CVE-2026-40894, усиления выделений в Gen0 при разборе пропагаторов baggage, B3 и Jaeger. Обновите OpenTelemetry.Api и OpenTelemetry.Extensions.Propagators до 1.15.3, даже если вы не используете Aspire.
Aspire 13.2.4 вышел 24 апреля с одной важной строкой: “Bumped OpenTelemetry dependencies to address CVE-2026-40894.” Сам бюллетень, зарегистрированный против open-telemetry/opentelemetry-dotnet, и есть более интересная половина истории. Это усиление выделений в Gen0 в коде разбора пропагаторов, и оно присутствует в OpenTelemetry.Api и OpenTelemetry.Extensions.Propagators начиная с 0.5.0-beta.2 и во всех релизах до 1.15.3. Если вы на свежей линии Aspire 13.2, патч приходит вместе с обновлением. Если вы используете чистый ASP.NET Core с ручной настройкой OpenTelemetry, обновлять пакеты придётся самостоятельно.
Как строка из запятых превращается в шторм Gen0
Уязвимые пути кода живут в парсерах W3C-заголовка baggage и устаревших заголовков b3 и uber-trace-id (Jaeger). Все три разбивают строку по разделителям до проверки длины, поэтому выделение масштабируется линейно с количеством символов-разделителей, а не с объёмом реальных данных. Один входящий запрос вида
GET /orders/42 HTTP/1.1
Host: api.example.com
baggage: ,,,,,,,,,,,,,,,,,,,,,,,,,,,,, [...5000 commas...]
заставляет фреймворк материализовать тысячи пустых объектов string в Gen0 ещё до того, как хоть один из них будет проверен. Удалённого исполнения кода и влияния на целостность нет, отсюда средний балл CVSS 5.3, но устойчивый поток подделанных запросов нагрузит сборку мусора и заблокирует сервер. Классификация CWE — CWE-789: Memory Allocation with Excessive Size Value, а исправление в 1.15.3 ограничивает парсер до разбиения по разделителям.
Куда это бьёт в типичном приложении .NET
Любой код, который вызывает AddOpenTelemetry().WithTracing() и принимает пропагатор из входящего HTTP, попадает в область уязвимости. Сюда входят AppHost’ы Aspire по умолчанию, стандартная настройка через OpenTelemetry.Extensions.Hosting и новые значения по умолчанию Microsoft.Extensions.Telemetry, которые включают baggage по умолчанию:
builder.Services.AddOpenTelemetry()
.WithTracing(tracing => tracing
.AddAspNetCoreInstrumentation()
.AddSource("OrderService")
.AddOtlpExporter());
// Aspire 13.2 ServiceDefaults wire the same propagators in by default.
// builder.AddServiceDefaults() pulls in baggage + W3C tracecontext.
Вызов AddAspNetCoreInstrumentation регистрирует цепочку TextMapPropagator, которая срабатывает на каждый входящий запрос. Никакого opt-in для достижимости бага не нужно: парсеры запускаются безусловно, как только в запросе оказывается соответствующий заголовок.
Минимально необходимый патч
Для пользователей Aspire — aspire stop на запущенном AppHost и зафиксируйте пакет на 13.2.4:
dotnet workload update
dotnet add package Aspire.AppHost --version 13.2.4
dotnet add package Aspire.ServiceDefaults --version 13.2.4
Для проектов, ссылающихся на OpenTelemetry напрямую, релевантные строки таковы:
<PackageReference Include="OpenTelemetry.Api" Version="1.15.3" />
<PackageReference Include="OpenTelemetry.Extensions.Propagators" Version="1.15.3" />
<PackageReference Include="OpenTelemetry.Extensions.Hosting" Version="1.15.3" />
Транзитивные ссылки тоже учитываются. Запустите dotnet list package --include-transitive --vulnerable после обновления, чтобы убедиться, что ни одна из косвенных зависимостей всё ещё не подтягивает OpenTelemetry.Api до 1.15.3. Если вы работаете за WAF, бюллетень рекомендует ограничить заголовки baggage, b3 и uber-trace-id 1024 символами как дополнительный слой защиты, но настоящее исправление — это поднятие версии пакета.
То, что Aspire выпускает патч в ту же неделю под upstream-CVE OpenTelemetry, — полезный сигнал: пин SDK в Aspire.ServiceDefaults уже нельзя игнорировать до следующей минорной версии. Относитесь к патч-релизам 13.2.x так же, как к servicing-обновлениям ASP.NET Core.