0x01 简介
Java 是目前 Web 开发中最主流的编程语言,而 Tomcat 是当前最流行的 Java 中间件服务器之一,从初版发布到现在已经有二十多年历史,在世界范围内广泛使用。
Ghostcat(幽灵猫) 是由长亭科技安全研究员发现的存在于 Tomcat 中的安全漏洞,由于 Tomcat AJP 协议设计上存在缺陷,攻击者通过 Tomcat AJP Connector 可以读取或包含 Tomcat 上所有 webapp 目录下的任意文件,例如可以读取 webapp 配置文件或源代码。此外在目标应用有文件上传功能的情况下,配合文件包含的利用还可以达到远程代码执行的危害。
0x02 影响版本
Apache Tomcat = 6 7 <= Apache Tomcat <7.0.100 8 <= Apache Tomcat <8.5.51 9 <= Apache Tomcat <9.0.31
0x03 漏洞复现
exp:
https://github.com/YDHCUI/CNVD-2020-10487-Tomcat-Ajp-lfi
效果:
python CNVD-2020-10487-Tomcat-Ajp-lfi.py 127.0.0.1 -p 8009 -f /WEB-INF/web.xml
0x04 修复建议
临时禁用AJP协议端口,在conf/server.xm l配置文件中注释掉
<Connector port=”8009″ protocol=”AJP/1.3″redirectPort=”8443″ />
配置ajp配置中的secretRequired跟secret属性来限制认证
官方下载最新版下载地址:
https://tomcat.apache.org/download-70.cgi
https://tomcat.apache.org/download-80.cgi
https://tomcat.apache.org/download-90.cgi
https://github.com/apache/tomcat/releases
其他防护措施
如果相关用户暂时无法进行版本升级,可根据自身情况采用下列防护措施。
一、若不需要使用Tomcat AJP协议,可直接关闭AJP Connector,或将其监听地址改为仅监听本机localhost。
具体操作:
(1)编辑 <CATALINA_BASE>/conf/server.xml,找到如下行
(<CATALINA_BASE> 为 Tomcat 的工作目录):
<Connector port=”8009″protocol=”AJP/1.3″ redirectPort=”8443″ />
(2)将此行注释掉(也可删掉该行):
<!–<Connectorport=”8009″ protocol=”AJP/1.3″redirectPort=”8443″ />–>
(3)保存后需重新启动Tomcat,规则方可生效。
二、若需使用Tomcat AJP协议,可根据使用版本配置协议属性设置认证凭证。
使用Tomcat 7和Tomcat 9的用户可为AJP Connector配置secret来设置AJP协议的认证凭证。例如(注意必须将YOUR_TOMCAT_AJP_SECRET更改为一个安全性高、无法被轻易猜解的值):
<Connector port=”8009″protocol=”AJP/1.3″ redirectPort=”8443″address=”YOUR_TOMCAT_IP_ADDRESS” secret=”YOUR_TOMCAT_AJP_SECRET”/>
使用Tomcat 8的用户可为AJP Connector配置requiredSecret来设置AJP协议的认证凭证。例如(注意必须将YOUR_TOMCAT_AJP_SECRET更改为一个安全性高、无法被轻易猜解的值):
<Connector port=”8009″protocol=”AJP/1.3″ redirectPort=”8443″address=”YOUR_TOMCAT_IP_ADDRESS”requiredSecret=”YOUR_TOMCAT_AJP_SECRET” />
具体漏洞原理请参考:
https://www.cnblogs.com/dyanbk/p/13334860.html
https://www.secrss.com/articles/17267