CVE-2025-61770CVE-2025-61770是Rack Web服务器接口中的一个高危拒绝服务漏洞。Rack作为Ruby生态系统中广泛使用的模块化Web服务器接口,被大量Ruby Web框架(如Rails、Sinatra等)所依赖。该漏洞存在于Rack::Multipart::Parser组件中,该组件负责解析HTTP multipart/form-data请求。
在2.2.19、3.1.17和3.2.2之前的版本中,Rack::Multipart::Parser会将multipart请求中第一个边界标识符之前的所有字节(即preamble/前置数据)无限制地缓存在内存中,而没有设置任何大小上限。攻击者可以通过发送包含超长preamble数据的multipart请求,使服务器消耗大量内存资源。由于现代Web服务器通常配置了较大的请求体大小限制,并且支持高并发连接,这种攻击的影响会被显著放大,可能导致进程因内存耗尽(OOM)而被终止,引发worker进程崩溃或因垃圾回收导致的严重性能下降。
该漏洞的CVSS评分为7.5分,属于高危级别。虽然不需要认证和用户交互即可利用,但其影响仅限于可用性(Availability),不涉及机密性或完整性的破坏。远程攻击者可以通过简单的HTTP请求即可触发该漏洞,对Web服务的稳定性构成严重威胁。
该漏洞的根本原因在于Rack::Multipart::Parser在处理multipart/form-data请求时,对preamble数据(即第一个boundary分隔符之前的字节)的处理缺乏内存限制机制。
在HTTP multipart请求的标准格式中,preamble是可选的,通常用于放置注释或元数据。RFC 2046规范允许在第一个boundary之前存在任意长度的preamble数据。然而,Rack在解析此类请求时,会将整个preamble内容加载到内存缓冲区中,而没有实施任何大小检查或流式处理。
攻击利用方式相对简单:攻击者构造一个multipart/form-data请求,在第一个boundary标识符之前填充大量任意字节数据(可以是注释或随机数据),然后正常包含有效的表单字段。当Rack::Multipart::Parser处理该请求时,它会将整个preamble读取并存储在内存中,直到遇到第一个boundary才开始处理实际的表单数据。
利用的关键点包括:1)无需认证(PR:N),任何能够发送HTTP请求的远程用户均可利用;2)无需用户交互(UI:N),完全自动化;3)攻击复杂度低(AC:L),仅需发送一个精心构造的HTTP请求;4)影响会随着允许的请求体大小和并发连接数线性放大,单个请求即可消耗数百MB甚至GB级别的内存。
修复方案是在Rack::Multipart::Parser中引入preamble大小限制(例如16 KiB),或者完全丢弃preamble数据。修复版本2.2.19、3.1.17和3.2.2实施了这一保护机制。