2020-02-24 15:26:13
来源:深信服科技
深信服安全团队及时响应并发布解决方案,提醒使用Apache Tomcat服务器的用户修复漏洞,防范攻击。
漏洞名称:Apache Tomcat文件包含漏洞CVE-2020-1938
威胁等级:高危
影响范围:Apache Software Foundation Tomcat 6.*、7.0.0 - 7.0.99、8.0.0 - 8.5.50、9.0.0 - 9.0.30
漏洞类型:文件包含
利用难度:简单
一
漏洞分析
1. Apache Tomcat组件介绍
Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现,Tomcat 5支持最新的Servlet 2.4 和JSP 2.0 规范。
Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户较少的场合下普遍使用,是开发和调试JSP 程序的首选之一。
2. 漏洞描述
Apache Tomcat 使用的AJP协议通信过程中存在文件包含漏洞(CVE-2020-1938),攻击者可以通过AJP协议设计缺陷构造属性值,实现漏洞的利用,成功利用这些漏洞可获得敏感文件信息,甚至可以进行远程代码执行漏洞的利用。
3. 漏洞分析
以Tomcat7.0.72版本作为漏洞环境进行分析,首先观察Tomcat服务器处理AJP协议的代码,跟踪org.apache.coyote.ajp.AjpProcessor类,发现Tomcat在接收AJP请求之后会调用这个类处理消息,在经过协议识别,header处理之后,会调用prepareRequest()方法对AJP请求进行预处理。
prepareRequest()方法在AbstractAjpProcessor类中定义,此方法会预先对request请求进行一些头部字段、属性值的设定。如下图:
在设定的过程中,prepareRequest会将AJP消息里面的内容设置为request对象中的Attribute属性。如下图:
由于这种特性,可以控制request对象的三个Attribute属性:
javax.servlet.include.request_uri
javax.servlet.include.path_info
javax.servlet.include.servlet_path
至此,漏洞的准备工作已经完成了,接下来就是利用这三个属性进行漏洞的利用。
Tomcat在处理请求的的时候,如果url未在web.xml中做映射时,通常会使用默认的DefaultServlet进行处理,在处理的过程中则会用到上面可控的三个属性读取文件。DefaultServlet对于常用方法的请求中,都会使用serveResource方法来获取资源文件,再通过getRelativePath方法获取资源文件的路径。
再使用上述三个可控属性读取文件,这个时候就可以通过构造三个属性值,读取敏感文件信息。
如果使用JspServlet处理请求时,同样也会用到这三个可控属性获取资源文件,结合文件上传,包含含有jsp代码的木马文件则会触发远程代码执行漏洞。
4. 漏洞复现
搭建Tomcat 7.0.72漏洞环境,通过AJP协议向Tomcat服务器发送构造好的数据,成功获取到了Tomcat webapp路径下的敏感文件信息。效果如下:
RCE利用方式
通过包含上传到Tomcat服务器的图片马,可以触发远程代码执行漏洞。效果如下:
二
影响范围
目前受影响的Apache Tomcat版本:
Apache Software Foundation Tomcat 6.*
Apache Software Foundation Tomcat 7.0.0 - 7.0.99
Apache Software Foundation Tomcat 8.0.0 - 8.5.50
Apache Software Foundation Tomcat 9.0.0 - 9.0.30
三
解决方案
1. 修复建议
Apache Tomcat官方发布的最新版本(Apache Software Foundation Tomcat 7.0.100;Apache Software Foundation Tomcat 8.0.51;Apache Software Foundation Tomcat 9.0.31)已经修复了此漏洞,请受影响的用户下载最新版本防御此漏洞。
下载链接:https://tomcat.apache.org/
2. 临时解决方案
如果相关用户暂时无法进行版本升级,可根据自身情况采用下列防护措施。
若不需要使用Tomcat AJP协议,可直接关闭AJP Connector,或将其监听地址改为仅监听本机localhost。
具体操作:
(1)编辑
(2)将此行注释掉:
(3)保存后需重新启动Tomcat,规则方可生效。
若需使用Tomcat AJP协议,可根据使用版本配置协议属性设置认证凭证。
使用Tomcat 7和Tomcat 9的用户可为AJP Connector配置secret来设置AJP协议的认证凭证。例如(注意必须将YOUR_TOMCAT_AJP_SECRET更改为一个安全性高、无法被轻易猜解的值):
使用Tomcat 8的用户可为AJP Connector配置requiredSecret来设置AJP协议的认证凭证。例如(注意必须将YOUR_TOMCAT_AJP_SECRET更改为一个安全性高、无法被轻易猜解的值):
3. 深信服解决方案
【深信服安全云眼】
在漏洞爆发之初,已完成检测更新,对所有用户网站探测,保障用户安全。不清楚自身业务是否存在漏洞的用户,可注册信服云眼账号,获取30天免费安全体验。
注册地址:http://saas.sangfor.com.cn
【深信服云镜】
在漏洞爆发第一时间即完成检测能力的发布,部署了云镜的用户可以通过升级来快速检测网络中是否受该高危风险影响,避免被攻击者利用。离线使用云镜的用户需要下载离线更新包来获得漏洞检测能力,连接云端升级的用户可自动获得漏洞检测能力。 不清楚自身业务是否存在漏洞的用户,可部署深信服云镜,及时发现存在的风险。
【深信服下一代防火墙】
可轻松防御此漏洞,建议部署深信服下一代防火墙的用户更新至最新的安全防护规则,可轻松抵御此高危风险。
【深信服云盾】
已第一时间从云端自动更新防护规则,云盾用户无需操作,即可轻松、快速防御此高危风险。
【深信服安全感知平台】
可检测利用该漏洞的攻击,实时告警,并可联动深信服下一代防火墙等产品实现对攻击者IP的封堵。
【深信服安全运营服务】
深信服云端安全专家提供7*24小时持续的安全运营服务。在漏洞爆发之初,云端安全专家即对用户的网络环境进行漏洞扫描,保障第一时间检查用户的主机是否存在此漏洞。对存在漏洞的用户,检查并更新防护设备的策略,确保用户防护设备可以防御此漏洞风险。