IPBUF安全漏洞报告
English
CVE-2025-62504 CVSS 6.5 中危

CVE-2025-62504 Envoy Lua过滤器释放后使用漏洞导致拒绝服务

披露日期: 2025-10-16

漏洞信息

漏洞编号
CVE-2025-62504
漏洞类型
释放后使用(Use-After-Free)
CVSS评分
6.5 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Envoy Proxy

相关标签

Use-After-FreeEnvoyLua过滤器拒绝服务内存安全服务代理CVE-2025-62504GHSA-gcxr-6vrp-wff3

漏洞概述

CVE-2025-62504是Envoy开源边缘和服务代理中的一个释放后使用(Use-after-Free)漏洞,位于Lua过滤器组件中。该漏洞影响Envoy 1.36.2之前、1.35.6之前、1.34.10之前以及1.33.12之前的所有版本。当Lua脚本在响应阶段执行并重写响应体时,如果重写后的响应体大小超过了配置的per_connection_buffer_limit_bytes(默认值为1MB),Envoy会生成本地回复(local reply),其响应头会覆盖原始响应头,但此时原始响应体的内存引用并未被正确清理,从而留下悬空引用(dangling references),最终导致程序崩溃。该漏洞的攻击向量为网络攻击,需要低权限认证,无需用户交互,机密性影响低,完整性无影响,但可用性影响为高,可造成拒绝服务攻击。Envoy作为广泛使用的服务代理和边缘代理,此漏洞可能影响大量基于Envoy构建的微服务架构和API网关系统,攻击者可通过精心构造的Lua脚本或恶意流量触发该漏洞,导致服务不可用。官方已在1.36.2、1.35.6、1.34.10和1.33.12版本中修复了该问题,建议用户尽快升级。

技术细节

该漏洞的根本原因在于Envoy Lua过滤器在处理响应体重写时的内存管理缺陷。具体技术原理如下:

1. Envoy的Lua过滤器允许在HTTP请求/响应处理的不同阶段执行用户自定义的Lua脚本,包括响应阶段(response phase)。

2. 当Lua脚本在响应阶段调用body()或重写响应体的API时,如果重写后的响应体大小超过了per_connection_buffer_limit_bytes配置的限制(默认1MB),Envoy会触发本地回复机制。

3. 本地回复(local reply)会生成一组新的响应头来覆盖原始响应头,但此时原始响应体缓冲区中的内存引用并未被正确释放或更新,导致悬空指针的产生。

4. 当后续代码尝试访问这些悬空引用时,便触发了释放后使用(Use-after-Free)漏洞,导致程序崩溃。

5. 攻击者可以通过以下方式利用此漏洞:
- 在配置了Lua过滤器的Envoy代理上,发送能够触发Lua脚本执行的请求
- 确保Lua脚本在响应阶段重写响应体,且重写后的响应体超过缓冲区限制
- 对于HTTP/2连接,还需要考虑initial_stream_window_size参数的影响

6. 触发条件:需要Lua脚本在响应阶段重写响应体,且重写后大小超过per_connection_buffer_limit_bytes限制。

攻击链分析

STEP 1
步骤1:环境准备
部署受影响版本的Envoy代理(1.36.2之前、1.35.6之前、1.34.10之前或1.33.12之前),并配置Lua过滤器在响应阶段执行脚本。
STEP 2
步骤2:Lua脚本配置
配置Lua脚本,使其在响应阶段重写响应体,将响应体大小设置为超过per_connection_buffer_limit_bytes(默认1MB)的值。
STEP 3
步骤3:发送恶意请求
攻击者通过网络向配置了Lua过滤器的Envoy代理发送HTTP请求,触发Lua脚本在响应阶段执行。
STEP 4
步骤4:触发本地回复
当Lua脚本重写的响应体超过缓冲区限制时,Envoy生成本地回复,新的响应头覆盖原始响应头,但原始响应体的内存引用未被正确清理。
STEP 5
步骤5:触发崩溃
后续代码访问悬空引用时触发释放后使用漏洞,导致Envoy进程崩溃,造成拒绝服务。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
-- CVE-2025-62504 PoC: Envoy Lua Filter Use-After-Free -- This Lua script triggers the vulnerability when executed in the response phase -- by rewriting the response body to exceed per_connection_buffer_limit_bytes (default 1MB) -- Envoy Lua filter configuration example: -- filter_chains: -- - filters: -- - name: envoy.filters.network.http_connection_manager -- typed_config: -- http_filters: -- - name: envoy.filters.http.lua -- typed_config: -- inline_code: | -- function envoy_on_response(response_handle) -- -- Generate a response body larger than per_connection_buffer_limit_bytes (1MB default) -- local large_body = string.rep("A", 2 * 1024 * 1024) -- 2MB body -- response_handle:body():setBytes(large_body) -- end -- per_connection_buffer_limit_bytes: 1048576 # 1MB default -- The vulnerability is triggered when: -- 1. A request is sent to the Envoy proxy with the Lua filter configured -- 2. The Lua script executes in the response phase -- 3. The rewritten response body exceeds per_connection_buffer_limit_bytes -- 4. Envoy generates a local reply with overriding headers -- 5. Dangling references to the original response body cause a crash -- To exploit: -- curl -v http://envoy-proxy:8080/ -- This triggers the Lua script execution and causes a use-after-free crash

影响范围

Envoy < 1.33.12
Envoy 1.34.0 - 1.34.9
Envoy 1.35.0 - 1.35.5
Envoy 1.36.0 - 1.36.1

防御指南

临时缓解措施
在无法立即升级的情况下,可以通过增加per_connection_buffer_limit_bytes(对于HTTP/2还需增加initial_stream_window_size)或增加per_request_buffer_limit_bytes / request_body_buffer_limit来降低触发该漏洞的可能性。但这些措施仅能减少触发条件,无法从根本上修复内存安全问题,仍建议尽快升级到修复版本。

参考链接

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