CVE-2025-62504CVE-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限制。