一、漏洞描述
Apache Tomcat软件是Jakarta Servlet、 Jakarta Server Pages、 Jakarta Expression Language、 Jakarta WebSocket、 Jakarta Annotations和 Jakarta Authentication 规范的开源实现 。Apache Tomcat实现了对Servlet和JavaServer Page(JSP)的支持,并提供了作为Web服务器的一些特有功能,如Tomcat管理和控制平台、安全域管理和Tomcat阀等。Tomcat 服务器作为一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。2023 年 3 月 22日安全机构发布 Apache Tomcat 存在安全漏洞,该漏洞源于用户代理能通过不安全的通道传输会话 cookie导致信息泄露,相关分析这是由于在请求https的时候可重定向到http连接,这个过程会导致会话劫持风险,造成Cookie或Session不安全传输,攻击者可利用该漏洞可在未授权的情况下泄漏 Cookie 或 Session,最终造成服务器敏感性信息泄露。
基本信息:漏洞类型敏感信息泄露
CVE编码:CVE-2023-28708
cvss评分:4
威胁等级:中危
公布时间:2023-03-22 00:00:00
影响范围:现场版本为 tomcat 9.0.46
11.0.0-M1 ≤ Apache Tomcat ≤ 11.0.0-M2
10.1.0-M1 ≤ Apache Tomcat ≤ 10.1.5
9.0.0-M1 ≤ Apache Tomcat ≤ 9.0.71
8.5.0 ≤ Apache Tomcat ≤ 8.5.85
二、漏洞处理
1)版本确认
#Windows 执行:
catalina version
#linux
sh ./bin/version.sh
2)官方修复建议
当前官方已发布最新版本,建议受影响的用户及时更新升级到最新版本。各个版本链接如下:
Apache Tomcat 11系列: https://tomcat.apache.org/download-11.cgi
Apache Tomcat 10系列: https://tomcat.apache.org/download-10.cgi
Apache Tomcat 9系列: https://tomcat.apache.org/download-90.cgi
Apache Tomcat 8系列: https://tomcat.apache.org/download-80.cgi
因现场使用tomcat 9.0.46,升级到最新版即:9.0.76,考虑到厂商环境,暂升级到9.0.75版;
另可参考官方的修复commit:
3)升级
wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.76/bin/apache-tomcat-9.0.76.tar.gz
wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.76/bin/apache-tomcat-9.0.75.tar.gz
tar -xzf apache-tomcat-9.0.75.tar.gz
#备份
cp -r /tomcat9/bin/ /tomcat9/bin_bak
cp -r /tomcat9/lib/ /tomcat9/lib_bak
#停止老版本tomcat
sh /tomcat9/bin/shutdown.sh
#替换
mv apache-tomcat-9.0.75 apache-tomcat-9
mv /tomcat9/bin /tomcat9/bin_old
mv /tomcat9/lib /tomcat9/lib_old
cp ./apache-tomcat-9/bin /tomcat9/
cp ./apache-tomcat-9/lib /tomcat9/
#开启热加载和热部署
vim ./tomcat9/conf/server.xml #Host标签中加上一个配置
<Context docBase="xxx" path="/xxx" reloadable="true"/> #reloadable="true"
……
<Context docBase="xxx" path="/xxx" autoDeploy="true"/> #autoDeploy="true",开启热部署
#.启动新版本tomcat
sh /tomcat9/bin/startup.sh
#验证
sh /tomcat9/bin/version.sh
三、附录
1)热加载 vs 热部署
热加载: 热加载的实现的方式在Web容器中启动一个后台线程,定期检测相关文件的变化,如果有变化就重新加载类,这个过程不会清空Session。过程中,服务器会监听 class 文件改变,包括web-inf/class,wen-inf/lib,web-inf/web.xml等文件,若发生更改,则局部进行加载,不清空session ,不释放内存。开发中用的多,但是要考虑内存溢出的情况。Tomcat默认情况下是不开启热加载的。
热部署: 热部署是在Web应用后台线程定期检测,发现有变化就会重新加载整个Web应用,这种方式会彻底会清空Session。这种方式整个项目就相当于从新部署,包括从新打个.war 文件。 会清空session ,释放内存。Tomcat在启动的时候会将其目录下webapp中war包解压后然后封装为一个Context供外部访问。那么热部署就是在程序运行时,如果我们修改了War包中的东西。那么Tomcat就会删除之前的War包解压的文件夹,重新解压新的War包。项目打包的时候用的多。热部署更多的是在生产环境中使用,就是适用于频繁的部署并且启动耗时长的应用、无法停止服务的应用等。开发环境可直接在Eclipse的Server里面直接配置publishing。
更多参看:https://blog.csdn.net/qq_24313635/article/details/114281148