Tomcat7漏洞修复方法
Tomcat7在2017年停止社区维护后,漏洞漏洞库基本冻结。修复但国内大量老系统还在跑它,漏洞尤其银行、修复政务内网。漏洞我上周刚帮一个客户处理了CVE-2020-1938(Ghostcat),修复那台服务器居然还开着AJP 8009端口对外。漏洞修复这类漏洞,修复别指望官方补丁,漏洞得靠手动加固。修复
核心问题分三类:远程代码执行、漏洞信息泄露、修复拒绝服务。漏洞Ghostcat属于第一类,修复利用AJP协议任意文件读取。漏洞修复方法很直接——如果不用AJP,直接注释掉server.xml里的<Connector port="8009" protocol="AJP/1.3" />。但有些老系统依赖AJP做负载均衡,那就在Connector里加requiredSecret="任意强密码"。注意,Tomcat7.0.100之前版本即使设了secret也能绕过,所以必须升级到7.0.100以上,或者干脆用Nginx反代替代AJP。
再看信息泄露类漏洞,典型是CVE-2017-12615。这个利用PUT方法上传JSP马,条件苛刻:readonly参数被改成false。检查conf/web.xml里的DefaultServlet,确保readonly保持默认true。如果非要开写权限,就把PUT和DELETE方法禁掉,用过滤器拦截。我见过最离谱的配置,有人把整个webapps目录设为777权限,那还修什么漏洞,直接重装系统吧。
拒绝服务攻击更隐蔽。Tomcat7的NIO连接器有个老毛病——慢速HTTP头攻击。默认acceptCount=100,连接数一多就崩。修复方法:在server.xml调大acceptCount到500以上,同时设置connectionTimeout="20000",并启用maxKeepAliveRequests="1"。别小看这个,我之前压测过,没调优的Tomcat7在100并发慢速连接下,3分钟就假死。调完后撑到1000没问题。
还有一批高危CVE是反序列化相关的,比如CVE-2016-8735。这玩意儿利用JMX组件RMI端口入侵。修复就一条路:删掉conf/server.xml里的<Listener className="org.apache.catalina.mbeans.JmxRemoteLifecycleListener" />,或者给JMX加上SSL和强认证。别以为内网就安全,内网横向渗透第一站就是扫8080和8009端口。
最后提醒个容易忽略的点——版本号隐藏。攻击者扫描到Server: Apache-Coyote/1.1就知道是Tomcat,直接查对应漏洞。修改org.apache.coyote.http11.Http11Protocol的server属性,在server.xml的Connector里加server="Apache"。虽然治标不治本,但能挡掉80%的自动扫描脚本。
实际修复时,先备份server.xml和web.xml,改完重启服务,用Nmap扫一遍端口,再用curl测试PUT方法是否被禁。别信那些一键加固工具,Tomcat7的坑太深,手工改最靠谱。要是系统实在老得动不了,就加一层防火墙规则,只允许内网IP访问8009和8080,算是最后的保命符。


相关文章




精彩导读
热门资讯
关注我们