2020年5月20日,Apache Tomcat官方发布安全公告,披露了一个通过集群同步session导致远程代码执行的漏洞。当tomcat服务器使用了自带session同步功能时,不安全的配置(没有使用EncryptInterceptor)导致存在反序列化漏洞,通过精心构造的数据包,可以对使用了tomcat自带session同步功能的服务器进行攻击。攻击者利用该漏洞可实现远程代码执行,获取服务器管理员权限。
漏洞名称:Apache Tomcat 反序列化远程代码执行漏洞
威胁等级:高危
漏洞类型:远程代码执行
利用难度:简单
Apache Tomcat组件介绍
Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,是开发和调试JSP 程序的首选。
漏洞分析
代码分析:
Tomcat服务器在org.apache.catalina.tribes.transport.nio.NioReplicationTask.run()方法中读取数据。
在drainChannel()方法中将ClusterData封装成ChannelMessage类型,在后续的运行过程中,依次调用messageDataReceived()方法。
最终进入到GroupChannel.messageReceived()方法中
并在messageReceived()方法调用XByteBuffer.deserialize()方法,进行反序列化操作,执行传入的序列化数据中的恶意命令。
综上,漏洞利用流程结束。
漏洞复现
搭建Tomcat 8.0.50+JDK7u21漏洞环境,配置session同步功能,配置方法如下:
在conf/server.xml配置文件中添加如下配置,
1. <Server> 2. ... 3. 4. <Service> 5. ... 6. 7. <Engine> 8. ... 9. 10. <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" 11. channelSendOptions="6"> 12. 13. <Manager className="org.apache.catalina.ha.session.BackupManager" 14. expireSessionsOnShutdown="false" 15. notifyListenersOnReplication="true" 16. mapSendOptions="6"/> 17. 18. 19. <Channel className="org.apache.catalina.tribes.group.GroupChannel"> 20. <Membership className="org.apache.catalina.tribes.membership.McastService" 21. address="228.0.0.4" 22. port="45564" 23. frequency="500" 24. dropTime="3000"/> 25. <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver" 26. address="123.123.123.123" 27. port="5000" 28. selectorTimeout="100" 29. maxThreads="6"/> 30. 31. <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter"> 32. <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/> 33. Sender> 34. Channel> 35. 36. <Valve className="org.apache.catalina.ha.tcp.ReplicationValve" 37. filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/> 38. 39. <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer" 40. tempDir="/tmp/war-temp/" 41. deployDir="/tmp/war-deploy/" 42. watchDir="/tmp/war-listen/" 43. watchEnabled="false"/> 44. 45. <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/> 46. Cluster> 47. Engine> 48. Service> 49. Server>
使用JDK7u21的java运行环境,启动Tomcat。通过攻击脚本向服务器传输恶意序列化数据,漏洞利用效果如下:
影响范围
目前受影响的Apache Tomcat版本:
Apache Software Foundation Tomcat 7.x < 7.0.104
Apache Software Foundation Tomcat 8.x < 8.5.55
Apache Software Foundation Tomcat 9.x < 9.0.35
Apache Software Foundation Tomcat 10.x
解决方案
1 修复建议
官方发布的最新版本:
Apache Software Foundation Tomcat 7.0.104;
Apache Software Foundation Tomcat 8.5.55;
Apache Software Foundation Tomcat 9.0.35;
Apache Software Foundation Tomcat 10.0.0-M5
已经修复了此漏洞,请受影响的用户下载最新版本防御此漏洞。
下载链接:https://tomcat.apache.org/
2 临时解决方案
用户可以为sessionAttributeValueClassNameFilter 配置PersistenceManager,以确保仅对应用程序提供的属性进行序列化和反序列化。
3 深信服解决方案
【深信服安全云眼】在漏洞爆发之初,已完成检测更新,对所有用户网站探测,保障用户安全。不清楚自身业务是否存在漏洞的用户,可注册信服云眼账号,获取30天免费安全体验。
注册地址:http://saas.sangfor.com.cn
【深信服云镜】在漏洞爆发第一时间即完成检测能力的发布,部署了云镜的用户可以通过升级来快速检测网络中是否受该高危风险影响,避免被攻击者利用。离线使用云镜的用户需要下载离线更新包来获得漏洞检测能力,可以连接云端升级的用户可自动获得漏洞检测能力。
【深信服下一代防火墙】可轻松防御此漏洞, 建议部署深信服下一代防火墙的用户更新至最新的安全防护规则,可轻松抵御此高危风险。
【深信服云盾】已第一时间从云端自动更新防护规则,云盾用户无需操作,即可轻松、快速防御此高危风险。
【深信服安全感知平台】可检测利用该漏洞的攻击,实时告警,并可联动【深信服下一代防火墙等产品】实现对攻击者ip的封堵。
【深信服安全运营服务】深信服云端安全专家提供7*24小时持续的安全运营服务。在漏洞爆发之初,云端安全专家即对客户的网络环境进行漏洞扫描,保障第一时间检查客户的主机是否存在此漏洞。对存在漏洞的用户,检查并更新了客户防护设备的策略,确保客户防护设备可以防御此漏洞风险。
时间轴
2020/5/20
Apache Tomcat官方发布安全公告,披露了一个通过集群同步session导致远程代码执行的漏洞。
2020/5/21
深信服千里目安全实验室成功复现此漏洞并发布漏洞分析文章。
参考链接
[1].https://seclists.org/oss-sec/2020/q2/136
[2].https://github.com/threedr3am/tomcat-cluster-session-sync-exp
点击阅读原文,及时关注深信服智安全Wiki平台,查询漏洞的解决方案(需登录)~