出品
开源中国
作者
局长
PortSwigger网站近日报道了Node.js存在两个HTTP请求夹带(HTTPrequestsmuggling,简称HRS)攻击漏洞,并指出其中一个漏洞似乎使用了新的HRS技术。
HTTP请求夹带技术是由一个或多个用户同时对目标网站服务器发起大量请求,通过构造特殊结构请求,干扰网站服务器对请求的处理(主要是干扰HTTP请求序列),从而实现攻击目标。
据介绍,这些漏洞由MattiasGrenfeldt和AstaOlofsson在瑞典KTH皇家理工学院计算机科学学士学位论文研究中发现。Grenfeldt称,刚开始他们在六个开源Web服务器和六个开源代理中寻找HTTP请求夹带漏洞。Node.js就是其中被调查的项目之一,但他们当时没有发现任何问题。经过一段时间后,在报告项目中发现的其他问题时,他们偶然发现了Node.js的这两个漏洞。
漏洞之一CVE--使用了常见的HRS技术,它通过利用HTTP请求中header允许存在空格的特性,从而进行HTTP请求夹带攻击。因为HTTP解析器接受在header名称之后和冒号之前带有空格的请求。
Grenfeldt解释道,这种HRS技术十分常见,在这种情况下,Node.js会将‘Content-Length:5’解释为‘Content-Length:5’,如果与忽略此类header且未经修改地转发它们的代理结合使用,则有可能会被用于HRS攻击。
而另一个漏洞CVE--似乎使用了新的HRS技术,其通过结合代理中的错误行终止和Node.js中块扩展的错误解析,从而进行HTTP请求夹带攻击。
Grenfeldt和Olofsson发现易受攻击的代理往往会查找单个换行符(LF)来终止包含块大小的行,但没有像往常一样检查LF之前是否有回车。
“就在此行终止之前是很少使用的块扩展功能的地方。在块扩展中,开发者可以在块大小之后指定额外的参数,例如‘a=b’。然而,很少在系统中实现对此的解析,而许多情况会允许该区域中的任何字节“,Grenfeldt继续解释道。
最后,Grenfeldt和Olofsson于6月19日至20日反馈了这些问题,Node.js于10月12日发布了修复程序。