/

CVE-2026-73546

Severity:

HIGH RISK

(7.4)

Stored XSS (CWE-79) in Envoy Admin Stats HTML Endpoint

CVE-2026-73546

Analyzed

Vulnerability type

Category:

Stored Cross-Site Scripting

CWE:

CWE-79

Impact:

Privileged script execution in the Envoy admin interface

Severity:

HIGH RISK

(7.4)

CVSS version:

3.1

Catch this CVE while code is being written

Detect vulnerable code directly in pull requests, so CVEs are fixed before merge.

Summary

Envoy's HTML-formatted admin statistics endpoint can render attacker-influenced statistic names without HTML encoding. If a data-plane component stores attacker-controlled path text in dynamic statistic names and an operator views the stats page in a browser, the script may execute with the admin interface's origin and issue privileged same-origin requests.

Affected context

The issue affects Envoy deployments where the HTML statistics endpoint is browser-accessible and an enabled data-plane feature, such as grpc_stats with statistics for all methods enabled, persists attacker-influenced path segments in dynamic statistic names. Risk depends on an operator viewing the generated HTML page in a browser with access to the admin interface.

Exploit preconditions

  • Attack surface: The Envoy /stats?format=html admin endpoint
  • Required access: Ability to influence request path segments that are incorporated into dynamic statistic names
  • Trigger point: An operator loads the HTML-formatted statistics page
  • Required configuration: A compatible component must persist attacker-influenced text in statistic names
  • Why exploitation is possible: Statistic names are emitted without HTML encoding, allowing stored markup or script content to be interpreted by the operator's browser

Why this happens

The vulnerability results from context-incomplete output encoding in the HTML statistics renderer. Although statistic values are sanitized, statistic names are inserted into generated HTML without escaping characters that have meaning in an HTML or script context. This maps to CWE-79: Improper Neutralization of Input During Web Page Generation, because attacker-influenced data can cross a trust boundary and become executable browser content.

Potential impact

  • An attacker may execute script in the origin of the Envoy admin interface
  • The script could issue privileged same-origin requests available to the viewing operator
  • Administrative information may be exposed or modified
  • An attacker could potentially alter runtime configuration if the interface permits such actions
  • Operator sessions or accessible admin data could be abused

General mitigation guidance

Mitigation generally focuses on applying context-appropriate output encoding to every attacker-influenced field rendered into HTML, including statistic names.

Common defensive patterns include:

  • HTML-encode statistic names and other dynamic content at the rendering boundary
  • Prefer structured or non-HTML statistics views for operational workflows where practical
  • Restrict browser access to administrative interfaces through network policy, authentication, and administrative segmentation
  • Disable unnecessary dynamic statistics features that persist untrusted request data
  • Apply least privilege to administrative identities and limit actions available through the admin interface
  • Treat data-plane request metadata as untrusted until it is safely encoded for its output context

How teams detect issues like this

Organizations can look for this issue through:

  • Static analysis rules identifying dynamic values inserted into HTML without context-aware encoding
  • Code review checks covering every field emitted by HTML renderers, not only visible statistic values
  • Tests that place HTML-sensitive characters in statistic names and verify they remain inert in rendered output
  • Monitoring and policy enforcement that restricts exposure of administrative endpoints to trusted management networks
  • Runtime review of unusual statistic names, unexpected markup, or administrative requests originating from operator browser sessions

Automated security testing and code-review tools may help identify missing output encoding when configured for server-side HTML generation.

Sources

SourceLink
github.comgithub.com/envoyproxy/envoy/commit/11d34660ca0322eb125d045a564d9d87f016397f
github.comgithub.com/envoyproxy/envoy/commit/884d30c56b835d5801733ae1dc38c94a08de23e8
github.comgithub.com/envoyproxy/envoy/commit/9484e17c34353662f9bfd30c74f61fa8c9ee7b83
github.comgithub.com/envoyproxy/envoy/commit/ab63a0e52b5a28472f2ff865b6464ae4004f7593
github.comgithub.com/envoyproxy/envoy/releases/tag/v1.36.10
github.comgithub.com/envoyproxy/envoy/releases/tag/v1.37.6
github.comgithub.com/envoyproxy/envoy/releases/tag/v1.38.4
github.comgithub.com/envoyproxy/envoy/releases/tag/v1.39.1
github.comgithub.com/envoyproxy/envoy/security/advisories/GHSA-pv9h-4fxf-7vrg

Frequently asked

questions

It can be exploitable through a data-plane request when the resulting path text is stored in a dynamic statistic name and an operator later views the HTML statistics page. The admin interface must also be reachable from the operator's browser.

Not necessarily. The key attacker capability is influencing data that an enabled statistics component persists in a statistic name. However, exploitation requires an operator to access the affected HTML admin page.

Encode every dynamic statistic name for the HTML context at the point where it is rendered, while maintaining strict access controls around the admin interface.

Treat all request-derived metadata as untrusted, use context-aware output encoding, test HTML renderers with adversarial characters, and avoid exposing administrative endpoints to ordinary data-plane users.

Find out what's already
exploitable in your codebase.