【漏洞预警】Apache Tomcat Session 反序列化代码执行漏洞修复方案

漏洞描述

Apache Tomcat是由Apache软件基金会属下Jakarta项目开发的Servlet容器。攻击者可能可以构造恶意请求,造成反序列化代码执行漏洞。成功利用该漏洞需要同时满足下列四个条件:

  1. 攻击者能够控制服务器上文件的内容和名称;
  2. 服务器PersistenceManager配置中使用了FileStore;
  3. 服务器PersistenceManager配置中设置了sessionAttributeValueClassNameFilter为NULL,或者使用了其他较为宽松的过滤器,允许攻击者提供反序列化数据对象;
  4. 攻击者知道使用的FileStore存储位置到可控文件的相对文件路径。

整体利用条件较为苛刻,实际危害相对较低,为彻底防止漏洞潜在风险,阿里云应急响应中心提醒Apache Tomcat用户尽快采取安全措施阻止漏洞攻击。

影响版本

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

安全建议

  1. 升级Apache Tomcat至安全版本
  2. 禁止使用Session持久化功能FileStore

操作步骤

这里以Linux下升级tomcat 10.0.0-M5为例,其他版本类似;

下载你要升级的Tomcat 10.0.0-M5版本:

wget https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-10/v10.0.0-M5/bin/apache-tomcat-10.0.0-M5.tar.gz

备份旧的tomcat(这部分非必须,根据自己情况而定)

  • 停止tomcat: ./shutdown.sh
  • 备份旧的tomcat。先在该目录下创建一个文件并命名为:mkdir tomcat-backup
  • 复制旧的 tomcat到刚刚创建的tomcat目录下:cp -Rf /home/tomcat-x/* /home/tomcat-backup/ (cp -Rf /原路径/* /目的路径/)

开始安装新版本

  • 解压新的tomcat:tar -zxvf apache-tomcat-10.0.0-M5.tar.gz(在原tomcat目录解压)
  • 删除原来的tomcat-x:rm -rf tomcat-x
  • 重命名为:mv apache-tomcat-10.0.0-M5 tomcat (注意:此时tomcat就是新的了)
  • 把旧的server.xml移动到新的server.xml。
    先删除新的server.xml:rm -rf server.xml
    移动:mv /home/tomcat-x/conf/server.xml - /home/tomcat/conf/
  • 把旧的webapps移动到新的webapps下。
    先删除新的webapps文件:rm -rf webapps
    移动:mv /home/tomcat-x/webapps /home/tomcat

注意 修改了旧tomcat的某个文件,一定要复制或移动到新的服务器下,至此升级tomcat完成;
你可以去启动tomcat服务器:sh ./startup.sh (注意:由于tomcat服务器是由Java编写而成,所以运行服务器前,检查是否安装Java运行环境,建议使用java8+ 此处省略…)
关闭服务器命令:sh ./shutdown.sh

禁止使用Session持久化功能FileStore

取消Tomcat Session持久化功能

打开tomcat目录>conf>context.xml,这是所有web应用共享的配置信息。
找到下面的一段话

<!-- Uncomment this to disable session persistence across Tomcat restarts -->
<!--
<Manager pathname="" />
-->

注释翻译过来就是“取消注释以禁用session持久化当tomcat重启的时候”,所以只要将注释取消,那么tomcat重启的时候就不会进行持久化了。如需要session共享可以使用 Spring Session+Redis实现Session共享;

猜你喜欢

转载自blog.csdn.net/xia296/article/details/106249137