一项新的研究确定了四种针对HTTP请求走私攻击的新变种,它们可以针对各种商用Web服务器和HTTP代理服务器。
在今天的黑帽安全会议上,SafeBreach的安全研究副总裁Amit Klein展示了这一发现,他说,这些攻击突出表明,web服务器和HTTP代理服务器容易受到HTTP请求走私攻击的影响,据记录首次发现至今已有15年的历史。
什么是HTTP请求走私?
HTTP请求走私(或HTTP异步)是一种用于干扰网站处理、从一个或多个用户接收的HTTP请求序列的方式的技术。
当前端服务器(负载平衡器或代理)和后端服务器以不同的方式处理HTTP请求的边界时,通常会出现与HTTP请求走私有关的漏洞,从而使不良行为者发送优先于下一个合法用户请求歧义请求。
不同步的请求可被利用来劫持凭据,向用户注入响应;甚至从受害者的请求中窃取数据,将信息泄露给攻击者控制的服务器。
这项技术是由Watchfire的一组研究人员于2005 年首次证明的,这些研究人员包括Klein,Chaim Linhart,Ronen Heled和Steve Orrin。
但是在过去的十几年中,在攻击面也随之进行了扩展,例如:将请求拼接成其他请求,获得对内部API的最大权限访问;污染Web缓存;破坏流行应用程序的登录页面。
什么是新的?
Klein公开的新变体涉及使用各种代理服务器组合,包括在Web服务器模式下的Aprelium的Abyss,Microsoft IIS,Apache和Tomcat,以及在HTTP代理模式下的Nginx,Squid,HAProxy,Caddy和Traefik。
所有四个新变体的列表如下,最后添加包括一个由研究人员在实验中成功利用的旧变体。
变体1:“标头SP / CR垃圾邮件:……”
变式2 –“等待”
变体3 – HTTP / 1.2绕过类似于mod_security的防御
变式4 –一个简单的解决方案
变式5 –“ CR标头”
例如,在处理包含两个Content-Length标头字段的HTTP请求时,发现Abyss接受第二个标头为有效,而Squid使用第一个Content-Length标头,从而导致两个服务器以不同的方式解释请求并实现请求走私。
在Abyss收到长度小于指定的Content-Length值的主体的HTTP请求的情况下,它将等待30秒以完成该请求,但不会忽略该请求的其余主体。
Klein发现,这也导致Squid与Abyss之间存在差异,后者会将HTTP请求的部分解释为第二个请求。
攻击的第三种形式使用HTTP / 1.2来规避OWASP ModSecurity中定义的WAF防御用于防止HTTP请求走私攻击的核心规则集(CRS)会生成触发该行为的恶意有效负载。
最后,克莱因(Klein)发现使用“ Content-Type:text / plain”标头字段足以绕过CRS中指定的级别检查,并产生HTTP请求走私漏洞。
有哪些可能的防御措施?
在将发现披露给Aprelium,Squid和OWASP CRS之后,问题已在Abyss X1 v2.14,Squid版本4.12和5.0.3和CRS v3.3.0中修复。
呼吁规范来自代理服务器的出站HTTP请求,Klein强调了对开源、应用要求硬核的Web应用程序防火墙解决方案的需求,该解决方案能够处理HTTP请求走私攻击。
Klein指出:“ ModSecurity(与CRS结合使用)确实是一个开源项目,但是就通用性而言,Mod Security具有多个缺点。” “它不能提供针对HTTP请求走私的全面保护,并且仅可用于Apache,IIS和nginx。”
为此,Klein发布了一个基于C++的库,通过严格遵守HTTP标头格式和请求行格式来确保所有传入的HTTP请求是完全合规且明确的。可以从GitHub访问它。