vlambda博客
学习文章列表

Tomcat WebSocket Dos漏洞复现(CVE-2020-13935 )复现

漏洞原因:

Apache Tomcat是美国阿帕奇(Apache)软件基金会的一款轻量级Web应用服务器。该程序实现了对Servlet和JavaServer Page(JSP)的支持。Apache Tomcat中的WebSocket存在安全漏洞,该漏洞源于程序没有正确验证payload的长度。攻击者可利用该漏洞造成拒绝服务(无限循环)。


一、搭建环境

        根据平台下在对应版本的tomcat,存在漏洞的版本如下

        # 10.0.0-M1 to 10.0.0-M6

        # 9.0.0.M1 to 9.0.36

        # 8.5.0 to 8.5.56

        # 8.0.1 to 8.0.53

        # 7.0.27 to 7.0.104

        解压后,运行startup.bat启动tomcat服务器


二、漏洞分析

          Important: WebSocket DoS CVE-2020-13935

The payload length in a WebSocket frame was not correctly validated. Invalid payload lengths could trigger an infinite loop. Multiple requests with invalid payload lengths could lead to a denial of service.


三、POC编写

通过漏洞描述可以知道,漏洞产生的原因为websocket的帧没有正确的验证,当帧的payload length字段无效时会导致死循环,当有多个这样的请求时就会出现拒绝服务

知道漏洞的原理,那我们如何去构造一个这样的websocket帧呢,这就需要来了解一下websocket协议

通过上图可以看到websocket帧的构造

每个字段代表的意义可以参考这里

https:#sookocheff.com/post/networking/how-do-websockets-work/

重点来看payload len相关字段,

协议中payload len占用7bits 通过后面的说明知道,当payload len为126(即0b1111110)时extended payload length为16bits,而当pyload len 为127(0b1111111)是 extended payload length 为 64bits

这一点在rfc文件也可以看到


Tomcat WebSocket Dos漏洞复现(CVE-2020-13935 )复现

协议中还说明最高有效位必须为0,所以这里就是漏洞的关键所在。

根据协议构造一个frame

Tomcat WebSocket Dos漏洞复现(CVE-2020-13935 )复现


四、漏洞攻击

exploit!!!

1、当msb≠1时

Tomcat WebSocket Dos漏洞复现(CVE-2020-13935 )复现


2、当msb=1时