Start Debugging

Aspire 13.2.4 corrige CVE-2026-40894: DoS via header baggage no OpenTelemetry .NET

Aspire 13.2.4 traz uma atualização do OpenTelemetry para CVE-2026-40894, uma amplificação de alocações em Gen0 nos parsers dos propagadores baggage, B3 e Jaeger. Atualize OpenTelemetry.Api e OpenTelemetry.Extensions.Propagators para 1.15.3 mesmo que você não use Aspire.

O Aspire 13.2.4 foi lançado em 24 de abril com uma única linha que importa: “Bumped OpenTelemetry dependencies to address CVE-2026-40894.” O próprio advisory, registrado contra open-telemetry/opentelemetry-dotnet, é a metade mais interessante da história. É uma amplificação de alocações em Gen0 no código de parsing dos propagadores, e aparece em OpenTelemetry.Api e OpenTelemetry.Extensions.Propagators da versão 0.5.0-beta.2 até qualquer release anterior a 1.15.3. Se você está em uma linha recente do Aspire 13.2, o patch chega ao atualizar. Se você usa ASP.NET Core puro com fiação manual do OpenTelemetry, precisa subir os pacotes você mesmo.

Como uma string de vírgulas vira uma tempestade de Gen0

Os caminhos de código vulneráveis vivem nos parsers do header W3C baggage e dos headers legados b3 e uber-trace-id (Jaeger). Os três fazem split por delimitadores antes de validar o tamanho, então a alocação escala linearmente com o número de caracteres separadores, e não com a quantidade de dados reais. Uma única requisição de entrada como

GET /orders/42 HTTP/1.1
Host: api.example.com
baggage: ,,,,,,,,,,,,,,,,,,,,,,,,,,,,, [...5000 commas...]

faz o framework materializar milhares de objetos string vazios em Gen0 antes que qualquer um seja inspecionado. Não há execução remota de código nem impacto na integridade, daí a pontuação CVSS média de 5.3, mas um gotejar constante de requisições maliciosas vai prender o GC e travar o servidor. A classificação CWE é CWE-789: Memory Allocation with Excessive Size Value, e a correção na 1.15.3 limita o parser antes do split por delimitadores.

Onde isso bate em uma aplicação .NET típica

Qualquer código que chama AddOpenTelemetry().WithTracing() e aceita um propagador a partir de HTTP de entrada está no escopo. Isso inclui os AppHosts padrão do Aspire, a fiação padrão do OpenTelemetry.Extensions.Hosting e os novos defaults do Microsoft.Extensions.Telemetry que ativam baggage por padrão:

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.

A chamada a AddAspNetCoreInstrumentation registra uma cadeia de TextMapPropagator que executa em cada requisição de entrada. Nenhum opt-in é necessário para o bug ser atingível; os parsers rodam incondicionalmente assim que um header correspondente aparece.

O patch mínimo viável

Para usuários do Aspire, aspire stop no AppHost em execução e fixe o pacote em 13.2.4:

dotnet workload update
dotnet add package Aspire.AppHost --version 13.2.4
dotnet add package Aspire.ServiceDefaults --version 13.2.4

Para projetos que referenciam OpenTelemetry diretamente, as linhas relevantes são:

<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" />

Referências transitivas contam. Rode dotnet list package --include-transitive --vulnerable depois da atualização para confirmar que nenhuma das suas dependências indiretas ainda traz um OpenTelemetry.Api anterior a 1.15.3. Se você opera atrás de um WAF, o advisory sugere limitar os headers baggage, b3 e uber-trace-id a 1024 caracteres como camada de defesa em profundidade, mas a correção de verdade é o bump do pacote.

O Aspire lançar um patch na mesma semana de um CVE upstream do OpenTelemetry é um sinal útil: o pin do SDK em Aspire.ServiceDefaults deixou de ser algo que você pode ignorar até a próxima versão menor. Trate as versões 13.2.x como você trata as atualizações de servicing do ASP.NET Core.

< Voltar