CVE-2026-48090
Envoy vulnerability analysis and mitigation

Overview

CVE-2026-48090 is a use-after-free (UAF) vulnerability in Envoy Proxy's HTTP OAuth2 filter (envoy.filters.http.oauth2) that can cause worker crashes and undefined behavior when a downstream stream is torn down while an async token exchange is still in flight. It affects Envoy versions 1.37.0 through 1.37.4 and 1.38.0 through 1.38.2. The vulnerability was published on June 26, 2026, with fixes available in versions 1.37.5 and 1.38.3. It carries a CVSS v3.1 base score of 5.9 (Medium) (GitHub Advisory, Red Hat Bugzilla).

Technical details

The root cause is a lifetime management flaw (CWE-416: Use After Free) in the OAuth2 filter's async token exchange path. When a client initiates an OAuth authorization-code callback, OAuth2Filter calls OAuth2ClientImpl::asyncGetAccessToken, which issues an async HTTP request to the token endpoint and suspends filter iteration. If the downstream stream is destroyed before the token response arrives (e.g., via HTTP/2 RST_STREAM, client disconnect, or idle timeout), the StreamDecoderFilterCallbacks object is freed. However, OAuth2ClientImpl::onSuccess or onFailure still invokes parent_->onGetAccessTokenSuccess(...), which calls finishGetAccessTokenFlow() and ultimately dereferences the dangling decoder_callbacks_ pointer via a virtual call to encodeHeaders. The fix requires OAuth2Filter::onDestroy() to cancel the in-flight request and OAuth2ClientImpl::onSuccess/onFailure to check for a null parent_ before proceeding (GitHub Advisory).

Impact

The primary demonstrated impact is a Denial of Service (DoS) through Envoy worker process crashes caused by undefined behavior and use-after-free memory corruption. An unauthenticated remote attacker can trigger this condition by opening OAuth flows and resetting or closing streams during the token exchange leg, resulting in service unavailability for all traffic handled by the affected worker. Remote code execution is not asserted; however, the advisory notes that further impact beyond DoS is deployment- and allocator-dependent, meaning memory corruption primitives could theoretically be leveraged in specific environments (GitHub Advisory, Red Hat Bugzilla).

Exploitability

The GitHub Security Advisory includes detailed proof-of-concept reproduction steps (both a runtime configuration walkthrough and a deterministic ASAN unit test harness), classified by Feedly with high confidence as actionable exploit steps targeting a real system (GitHub Advisory). No evidence of in-the-wild exploitation has been observed, and the vulnerability is not listed in the CISA Known Exploited Vulnerabilities (KEV) catalog. The EPSS score is approximately 0.579%, reflecting low but non-negligible probability of exploitation. Exploitation requires high attack complexity due to the timing-dependent nature of the race between stream teardown and async token completion.

Exploitation steps

  1. Reconnaissance: Identify Envoy deployments running versions 1.37.0–1.37.4 or 1.38.0–1.38.2 with the envoy.filters.http.oauth2 filter enabled and an OAuth2 authorization-code flow configured.
  2. Configure slow token endpoint: Arrange for the token endpoint (IdP) to respond slowly — via a mock IdP, injected network latency, or a delay proxy — so the async token exchange remains in-flight for a controllable window.
  3. Initiate OAuth callback: Drive a real client through the OAuth authorization-code callback path (e.g., request /_oauth?code=<code>&state=<state> with valid CSRF/nonce cookies), causing OAuth2Filter to call asyncGetAccessToken and suspend filter iteration while awaiting the token response.
  4. Tear down the downstream stream: Before the token HTTP response completes, forcibly close the downstream connection using an HTTP/2 RST_STREAM frame, closing the browser tab, or triggering a short stream idle timeout. This destroys the StreamDecoderFilterCallbacks object.
  5. Trigger UAF: When the delayed token response eventually arrives, OAuth2ClientImpl::onSuccess invokes parent_->onGetAccessTokenSuccess(...), which calls finishGetAccessTokenFlow() and dereferences the now-freed decoder_callbacks_ pointer via a virtual encodeHeaders call.
  6. Observe impact: The Envoy worker process crashes (DoS) or produces ASAN/UBSan reports indicating heap-use-after-free or invalid-vptr on OAuth2Filter::finishGetAccessTokenFlow / encodeHeaders (GitHub Advisory).

Indicators of compromise

  • Logs: Envoy worker crash logs or core dumps referencing OAuth2Filter::finishGetAccessTokenFlow, onGetAccessTokenSuccess, or encodeHeaders in stack traces; AddressSanitizer output indicating heap-use-after-free or invalid-vptr in OAuth2 filter source files (filter.cc, oauth_client.cc).
  • Process: Unexpected Envoy worker process restarts or crashes, particularly on instances handling OAuth2-protected routes; elevated worker restart frequency correlating with OAuth callback traffic.
  • Network: High volume of HTTP/2 RST_STREAM frames from clients targeting OAuth callback endpoints (e.g., /_oauth); connections to the token endpoint that are initiated but never completed from the client side; unusual patterns of OAuth callback requests followed immediately by connection resets (GitHub Advisory).

Mitigation and workarounds

Upgrade Envoy to version 1.37.5 or 1.38.3 (or later), which implement OAuth2Filter::onDestroy() to cancel in-flight async token requests on stream teardown and add null-checks in OAuth2ClientImpl::onSuccess/onFailure to prevent late callbacks from accessing freed objects. If immediate patching is not possible, consider implementing network-level rate limiting on OAuth callback endpoints, reducing stream idle timeouts to minimize the window for the race condition, or temporarily disabling the envoy.filters.http.oauth2 filter if OAuth2 is not strictly required. Deployments using slow or high-latency token endpoints are at elevated risk and should prioritize patching (GitHub Advisory, Red Hat Bugzilla).

Community reactions

Red Hat tracked the vulnerability via their security response process (Bugzilla bug 2493650) with medium severity, and the OpenSUSE security announce list also referenced the issue in the context of package updates. The Istio project published a related release announcement (1.28.9) that references this CVE, reflecting downstream impact on service mesh deployments that embed Envoy. No significant public researcher commentary or social media discussion beyond standard CVE aggregator coverage has been observed (Red Hat Bugzilla).

Additional resources


SourceThis report was generated using AI

Related Envoy vulnerabilities:

CVE ID

Severity

Score

Technologies

Component name

CISA KEV exploit

Has fix

Published date

CVE-2026-47220HIGH7.5
  • Envoy logoEnvoy
  • cpe:2.3:a:envoyproxy:envoy
NoYesJun 26, 2026
CVE-2026-48743HIGH7.5
  • Envoy logoEnvoy
  • cpe:2.3:a:envoyproxy:envoy
NoYesJun 26, 2026
CVE-2026-48706HIGH7.5
  • Envoy logoEnvoy
  • envoy
NoYesJun 26, 2026
CVE-2026-48090MEDIUM5.9
  • Envoy logoEnvoy
  • envoy
NoYesJun 26, 2026
CVE-2026-47205MEDIUM5.9
  • Envoy logoEnvoy
  • cpe:2.3:a:envoyproxy:envoy
NoYesJun 26, 2026

Free Vulnerability Assessment

Benchmark your Cloud Security Posture

Evaluate your cloud security practices across 9 security domains to benchmark your risk level and identify gaps in your defenses.

Request assessment

Get a personalized demo

Ready to see Wiz in action?

"Best User Experience I have ever seen, provides full visibility to cloud workloads."
David EstlickCISO
"Wiz provides a single pane of glass to see what is going on in our cloud environments."
Adam FletcherChief Security Officer
"We know that if Wiz identifies something as critical, it actually is."
Greg PoniatowskiHead of Threat and Vulnerability Management