CVE-2025-61771CVE-2025-61771是Rack Web服务器接口中的一个高危拒绝服务漏洞。Rack是Ruby生态系统中广泛使用的模块化Web服务器接口,为Ruby Web应用提供统一的HTTP请求和响应处理抽象。该漏洞存在于Rack::Multipart::Parser组件中,影响所有处理multipart/form-data表单提交的Rack应用程序。
在2.2.19、3.1.17和3.2.2之前的版本中,Rack::Multipart::Parser在解析multipart表单数据时,会将所有非文件表单字段(即不包含filename属性的部分)完全存储在内存中,以Ruby String对象的形式保存。这意味着攻击者可以通过发送包含超大文本字段的multipart/form-data请求(数百兆字节甚至更大),使目标进程消耗等量的内存资源,从而触发内存溢出(OOM)条件,导致拒绝服务。
该漏洞的攻击门槛极低,无需任何认证或用户交互即可通过网络远程利用。攻击的影响程度与请求大小和并发量成正比,可能导致工作进程崩溃或严重的垃圾回收开销。由于Rack是Ruby Web应用框架(如Rails、Sinatra等)的基础组件,该漏洞的影响范围非常广泛,涵盖了几乎所有基于Ruby的Web应用程序。该漏洞的CVSS评分为7.5分,属于高危级别,主要影响系统的可用性。
Rack::Multipart::Parser是Rack框架中负责解析HTTP multipart/form-data请求的核心组件。在解析multipart请求时,它会区分文件字段(带有filename属性)和非文件字段(纯文本字段)。
漏洞的根本原因在于:对于非文件表单字段,解析器没有设置合理的大小限制,而是将整个字段内容完整地读入内存并存储为Ruby String对象。与文件字段不同,文件字段通常会被写入临时文件或流式处理,而非文件字段则被无条件地保留在内存中。
攻击利用方式如下:
1. 攻击者构造一个multipart/form-data类型的HTTP POST请求
2. 在请求体中包含一个不带filename属性的表单字段
3. 将该字段的值设置为超大文本数据(数百MB甚至数GB)
4. 发送该请求到目标Rack应用程序
5. Rack::Multipart::Parser会将整个字段内容加载到内存中
6. 当内存消耗超过系统限制时,进程触发OOM(Out of Memory)
7. 进程被操作系统终止,导致拒绝服务
如果攻击者同时发送多个此类并发请求,可以迅速耗尽服务器的所有可用内存资源,影响范围将更加严重。修复版本(2.2.19、3.1.17、3.2.2)引入了对非文件字段的合理大小限制(例如2 MiB),从根源上解决了这个问题。