Start Debugging

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.

< Назад