CVE-2025-67725CVE-2025-67725是Tornado Web框架中的一个拒绝服务(DoS)漏洞。Tornado是一个流行的Python Web框架和异步网络库,广泛应用于构建高性能Web应用和实时服务。该漏洞存在于HTTPHeaders.add方法中,当处理重复的HTTP头部字段时,程序使用字符串拼接方式累积值。由于Python字符串的不可变性特性,每次拼接操作都会创建新的字符串对象并复制整个内容,导致时间复杂度达到O(n²)。攻击者只需发送单个恶意构造的HTTP请求,通过重复添加相同名称的头部字段(如大量重复的Cookie头部),即可阻塞服务器的响应事件循环,使服务器无法处理其他合法请求,造成拒绝服务。CVSS评分7.5分,属于高危漏洞。
漏洞根源在于Tornado的HTTPHeaders.add方法实现。当HTTP请求中包含多个相同名称的头部字段时(如多个Cookie头部),该方法使用字符串拼接的方式将所有值累积到单个头部中。具体实现可能类似:result = ''; for value in values: result = result + ', ' + value。这种实现在Python中存在问题,因为字符串是不可变对象,每次执行result = result + ...都会创建新的字符串对象并复制已有内容。当有n个相同名称的头部时,总复制次数为1+2+3+...+n = n(n+1)/2,时间复杂度为O(n²)。攻击者可以构造包含数千个重复头部的HTTP请求,例如发送10000个Cookie头部,每个值约100字节,总数据量约1MB,但服务器需要执行的字符复制操作次数约为5000万次,耗时可达数十秒,严重占用事件循环线程,导致服务器无响应。修复方案是使用列表存储值,最后通过join方法一次性拼接,将时间复杂度降为O(n)。