当前位置:首页 > 娱乐

apache tomcat 信息泄露漏洞

2017年9月,信息泄露Apache官方修了一个Tomcat的漏洞漏洞,编号CVE-2017-12615。信息泄露问题出在put请求上。漏洞默认配置里,信息泄露Tomcat的漏洞web.xml把readonly设成了false,意味着允许通过PUT方法上传文件。信息泄露攻击者能往服务器上写JSP文件,漏洞然后访问它,信息泄露直接执行任意代码。漏洞这个洞当时影响Tomcat 7.0.0到7.0.79。信息泄露修复方式很简单,漏洞把readonly改成true就行。信息泄露但很多人没改。漏洞

这不是信息泄露Tomcat第一次出信息泄露的事。更早的CVE-2016-8735,问题在JMX监控上。如果开了JMX且没做认证,远程就能拿到服务器上的敏感信息。JMX这东西本来是为运维方便设计的,结果成了后门。很多公司内网跑着Tomcat,JMX端口开着,防火墙也没拦,等于把钥匙插在门上。

Tomcat的信息泄露漏洞有个共同点:默认配置太宽松。它是个Servlet容器,设计目标是开箱即用,所以很多危险功能默认开着。比如manager和host-manager这两个Web应用,默认就部署在webapps目录下。manager能部署、卸载、启停应用,权限极大。默认的用户配置文件tomcat-users.xml里,注释掉了所有角色和用户,但很多人图省事,直接加上manager-gui角色,密码设成tomcat或者admin。扫描器一抓一个准。

我见过一个真实案例。某公司的测试环境Tomcat 8.5,manager应用没删,用户配置里有个tomcat/123456。攻击者用这个账号登录manager,上传了一个WAR包,里面是WebShell。从扫描到拿下服务器,不到十分钟。事后查日志,发现manager的访问日志里全是404扫描记录,但没人看。

还有个更隐蔽的。Tomcat的examples应用会暴露Servlet和JSP示例,里面有些示例代码能读取系统属性。默认情况下examples是部署的。访问/examples/servlets/servlet/RequestParamExample,提交特定参数,能回显服务器环境变量。有人觉得这不算漏洞,但环境变量里可能有数据库密码、API密钥。信息泄露就是这样,单看一个点不重要,拼起来就是完整攻击链。

怎么防?别指望默认配置。装完Tomcat第一件事:删掉webapps下所有默认应用,只留ROOT或者你自己的应用。manager和host-manager如果不用,直接删。要用的话,改tomcat-users.xml,强密码,限制访问IP,最好加个反向代理做认证。server.xml里关掉不必要的Connector,比如AJP。AJP那个洞CVE-2020-1938更狠,直接读文件。Tomcat 9.0.31之前默认开AJP,端口8009。Ghostcat漏洞就是利用它读web.xml或者上传JSP。修复方法是注释掉AJP Connector,或者加secret。

版本更新也重要。Tomcat 7已经停止维护了,但还有人在用。Tomcat 8.5也快了。新版本修了很多信息泄露问题,比如CVE-2021-25122,错误页面会回显请求头,可能泄露内部IP。升级能解决大部分已知问题,但配置不对,新版本照样出事。

日志得看。Tomcat的localhost_access_log里,PUT请求、异常路径、manager登录失败,都是信号。很多人只盯着应用日志,忘了容器日志。攻击者写JSP之前,肯定先试探。那些试探请求就在访问日志里躺着。

最后说个细节。Tomcat的error page默认会显示异常堆栈,包括类名、行号、甚至SQL语句。生产环境一定要在web.xml里配error-page,指向自定义页面。或者用server.xml的ErrorReportValve,设showReport为false。这不算漏洞,但泄露的信息足够攻击者画出你的应用架构图。

信息泄露不是单一漏洞,是配置、版本、运维习惯的综合结果。Tomcat本身不差,差的是拿默认配置上生产的人。

分享到: