Skip to main content
CVE Vulnerability Database
Vulnerability Database/CVE-2026-47205

CVE-2026-47205: Envoyproxy Envoy Use-After-Free Vulnerability

CVE-2026-47205 is a use-after-free flaw in Envoyproxy Envoy's ext_authz HTTP filter that causes crashes during concurrent authorization overrides and rapid client disconnects. This article covers technical details, affected versions, impact, and mitigation strategies.

Published:

CVE-2026-47205 Overview

CVE-2026-47205 is a Use-After-Free (UAF) vulnerability in Envoy, the open source edge and service proxy used in cloud-native applications. The flaw resides in the ext_authz HTTP filter when it processes per-route authorization overrides concurrently with rapid downstream client disconnects. An attacker can trigger a segmentation fault by rapidly establishing and tearing down streams against a protected endpoint, crashing the Envoy process. The vulnerability affects Envoy versions from 1.36.0 up to 1.36.9, 1.37.5, and 1.38.3, and is tracked under [CWE-416]. Fixes are available in Envoy 1.36.9, 1.37.5, and 1.38.3.

Critical Impact

Remote unauthenticated attackers can crash Envoy proxy instances by triggering a use-after-free in the ext_authz filter, resulting in denial of service for all traffic routed through the affected proxy.

Affected Products

  • Envoy 1.36.0 through 1.36.8
  • Envoy 1.37.0 through 1.37.4
  • Envoy 1.38.0 through 1.38.2

Discovery Timeline

  • 2026-06-26 - CVE-2026-47205 published to NVD
  • 2026-06-29 - Last updated in NVD database

Technical Details for CVE-2026-47205

Vulnerability Analysis

The vulnerability affects Envoy's External Authorization (ext_authz) HTTP filter. During standard request lifecycles, Envoy instantiates the filter with a foundational authorization client object referenced by client_. When a matched route dictates a dynamic per-route HTTP or gRPC authorization service override, the filter generates a localized client to service that route.

In the vulnerable implementation, this transient client overwrites the default client_ unique pointer via client_ = std::move(per_route_client). This move operation destructs the original client while asynchronous authorization requests may still be in flight against it.

When a downstream client rapidly establishes and tears down a stream, such as repeatedly refreshing a protected WebSocket endpoint, Envoy invokes ConnectionManagerImpl::doDeferredStreamDestroy() followed by ActiveStream::onResetStream(). The filter's onDestroy() then attempts to cancel dispatched asynchronous checks via client_->cancel(). Because the earlier move destructed the original client during initiateCall, a memory lifecycle misalignment occurs in the async client manager.

Root Cause

The root cause is unsafe ownership transfer of the authorization client pointer during request processing. The stream teardown path fails to reliably track and cancel dynamically bound asynchronous authorization tasks. A late asynchronous callback from the network then dereferences a destroyed ActiveStream validation span, producing the use-after-free condition [CWE-416].

Attack Vector

The attack vector is network-based and does not require authentication or user interaction. An attacker sends requests to a route configured with a per-route ext_authz override, then rapidly resets or closes the connection before the authorization check completes. Repeating this pattern induces the race between asynchronous authorization callbacks and stream destruction, ultimately crashing the Envoy process and denying service to all traffic passing through the proxy.

No public proof-of-concept exploit is available. See the GitHub Security Advisory GHSA-mvh9-767w-x47j for full technical details.

Detection Methods for CVE-2026-47205

Indicators of Compromise

  • Unexpected Envoy process segmentation faults or core dumps referencing the ext_authz filter or async client manager frames.
  • Sudden termination and restart cycles of Envoy pods or sidecars under normal traffic conditions.
  • Bursts of short-lived downstream connections targeting routes configured with ext_authz per-route overrides.

Detection Strategies

  • Monitor Envoy admin /stats for spikes in server.hot_restart_epoch, worker restarts, or abrupt drops in downstream_cx_active.
  • Correlate ext_authz filter metrics such as ext_authz.denied, ext_authz.error, and ext_authz.disabled with client reset counters like downstream_rq_rx_reset.
  • Alert on repeated rapid WebSocket upgrade attempts followed by immediate resets against authorization-protected routes.

Monitoring Recommendations

  • Enable core dump collection on Envoy hosts and inspect stack traces for ext_authz::Filter::onDestroy and initiateCall frames.
  • Ship Envoy access and admin logs into a central analytics platform and baseline expected reset rates per route.
  • Track pod restart counts and OOM/segfault events in Kubernetes for Envoy sidecars in service mesh deployments.

How to Mitigate CVE-2026-47205

Immediate Actions Required

  • Upgrade Envoy to a fixed release: 1.36.9, 1.37.5, or 1.38.3, matching your current minor version line.
  • Inventory all Envoy deployments including standalone proxies, Istio and other service mesh sidecars, and API gateways derived from Envoy.
  • If patching is delayed, review routes that configure per-route ext_authz overrides and restrict exposure to trusted clients.

Patch Information

The Envoy maintainers fixed the use-after-free in versions 1.36.9, 1.37.5, and 1.38.3 by correcting the lifecycle handling of the per-route authorization client so that in-flight asynchronous checks are safely tracked and cancelled during stream destruction. Full details are published in the Envoy GitHub Security Advisory GHSA-mvh9-767w-x47j.

Workarounds

  • Remove per-route HTTP or gRPC ext_authz overrides where possible and rely on a single global ext_authz configuration until patching is complete.
  • Terminate WebSocket and long-lived upgrades at a front proxy that is already patched, limiting rapid reset patterns reaching vulnerable Envoy instances.
  • Apply rate limiting on connection resets and repeated stream terminations against authorization-protected routes.
bash
# Verify Envoy version and upgrade to a fixed release
envoy --version

# Example: pin a fixed image tag in Kubernetes deployments
kubectl set image deployment/envoy envoy=envoyproxy/envoy:v1.38.3
kubectl rollout status deployment/envoy

Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

Default Legacy - Prefooter | Experience the World’s Most Advanced Cybersecurity Platform

Experience the Most Advanced Cybersecurity Platform

See how the world’s most intelligent, autonomous cybersecurity platform can protect your organization today and into the future.