Advisory Database
  • Advisories
  • Dependency Scanning
  1. golang
  2. ›
  3. github.com/envoyproxy/envoy
  4. ›
  5. CVE-2026-26311

CVE-2026-26311: Envoy: HTTP - filter chain execution on reset streams causing UAF crash

March 10, 2026

Note: This vulnerability was originally reported to the Google OSS VRP (Issue ID: 477542544). The Google Security Team requested that I coordinate directly with the Envoy maintainers for triage and remediation. I am submitting this report here to facilitate that process.

Technical Details I have identified a logic vulnerability in Envoy’s HTTP connection manager (FilterManager) that allows for Zombie Stream Filter Execution. This issue creates a “Use-After-Free” (UAF) or state-corruption window where filter callbacks are invoked on an HTTP stream that has already been logically reset and cleaned up.

Mechanism: The vulnerability resides in source/common/http/filter_manager.cc within the FilterManager::decodeData method.

When an HTTP/2 stream encounters a reset condition (e.g., StreamIdleTimeout, OverloadManager limits, or a local reset triggered by a filter), Envoy calls onResetStream. This method:

  1. Sets the internal state state_.saw_downstream_reset_ = true.
  2. Invokes onDestroy() on all filters in the chain (allowing them to release resources/pointers).
  3. Schedules the ActiveStream object for deferred deletion (cleanup happens later in the event loop).

The Flaw: The ActiveStream object remains valid in memory during the deferred deletion window. If a DATA frame arrives on this stream immediately after the reset (e.g., in the same packet processing cycle), the HTTP/2 codec invokes ActiveStream::decodeData, which cascades to FilterManager::decodeData.

FilterManager::decodeData fails to check the saw_downstream_reset_ flag. It iterates over the decoder_filters_ list and invokes decodeData() on filters that have already received onDestroy().

Root Cause Code Location: File: source/common/http/filter_manager.cc Function: FilterManager::decodeData

void FilterManager::decodeData(...) {
if (stopDecoderFilterChain()) { return; }

// Vulnerability: Missing check for state_.saw_downstream_reset_
// Execution proceeds into the loop even if the stream is logically dead.

auto trailers_added_entry = decoder_filters_.end();
for (; entry != decoder_filters_.end(); entry++) {
// ... calls (*entry)->handle_->decodeData(data) on destroyed filters ...
}
}

Suggested Fix: Add an explicit state check at the beginning of FilterManager::decodeData.

// Prevent execution on streams that have been reset but not yet destroyed.
if (state_.saw_downstream_reset_) {
return;
}

References

  • github.com/advisories/GHSA-84xm-r438-86px
  • github.com/envoyproxy/envoy
  • github.com/envoyproxy/envoy/security/advisories/GHSA-84xm-r438-86px
  • nvd.nist.gov/vuln/detail/CVE-2026-26311

Code Behaviors & Features

Detect and mitigate CVE-2026-26311 with GitLab Dependency Scanning

Secure your software supply chain by verifying that all open source dependencies used in your projects contain no disclosed vulnerabilities. Learn more about Dependency Scanning →

Affected versions

All versions up to 1.34.12, all versions starting from 1.35.0 up to 1.35.8, all versions starting from 1.36.0 up to 1.36.4, version 1.37.0

Solution

Unfortunately, there is no solution available yet.

Impact 5.9 MEDIUM

CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H

Learn more about CVSS

Weakness

  • CWE-416: Use After Free

Source file

go/github.com/envoyproxy/envoy/CVE-2026-26311.yml

Spotted a mistake? Edit the file on GitLab.

  • Site Repo
  • About GitLab
  • Terms
  • Privacy Statement
  • Contact

Page generated Wed, 25 Mar 2026 00:18:06 +0000.