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文件也可以看到
协议中还说明最高有效位必须为0,所以这里就是漏洞的关键所在。
根据协议构造一个frame
四、漏洞攻击
exploit!!!
1、当msb≠1时
2、当msb=1时