CVE-2025-6176Scrapy是一款流行的Python开源网络爬虫框架,广泛应用于数据采集、搜索引擎构建、自动化测试等领域。该框架支持多种HTTP压缩格式以优化网络传输效率,其中包括brotli压缩算法。然而,Scrapy 2.13.2及之前版本在处理brotli压缩格式时存在严重的安全漏洞,攻击者可利用该漏洞发起拒绝服务攻击,导致目标系统崩溃。漏洞的根本原因在于Scrapy虽然针对传统的zip炸弹攻击(如zipbomb、gzipbomb)实现了防护机制,但未能针对brotli压缩格式的特殊压缩特性提供等效保护。brotli算法在处理零填充数据时能够达到极高的压缩比(理论上可超过1800:1),攻击者只需传输极小的恶意压缩数据即可触发大量的内存分配,最终耗尽服务器资源。研究表明,攻击者利用此漏洞可在少于80GB可用内存的系统上成功发起DoS攻击,这对于大多数云服务器和个人开发者环境而言都是极易达成的条件。由于Scrapy常用于自动化数据采集任务,该漏洞可能影响大量使用Scrapy进行生产环境数据抓取的组织和个人。
该漏洞属于解压炸弹攻击的brotli变种。在传统防护机制中,Scrapy通过限制解压后的数据大小与压缩数据大小的比率来防止zip炸弹攻击。然而,brotli算法采用先进的熵编码和字典压缩技术,对特定类型数据(特别是零填充数据)具有极高的压缩效率。当Scrapy接收到经过brotli压缩的恶意响应时,解压过程会分配大量内存用于存储解压后的数据。具体攻击流程如下:1) 攻击者搭建恶意HTTP服务器;2) 服务器返回经过精心构造的brotli压缩数据,该数据解压后体积可达到原始传输量的数百甚至数千倍;3) Scrapy客户端在不知情的情况下对数据进行解压;4) 解压过程消耗大量内存资源;5) 当内存消耗超过系统限制时,触发OutOfMemoryError或系统OOM Killer,导致进程崩溃。由于brotli压缩的高效性,攻击者只需上传几十KB的恶意数据即可触发数GB甚至数十GB的内存分配。Scrapy的brotli解压实现位于HTTP响应处理模块,当启用自动解压功能时,所有经过brotli压缩的响应都会被自动处理,从而触发漏洞。攻击者可以利用任何需要Scrapy抓取的合法场景(如RSS订阅、API调用等)作为攻击向量。