重要信息:关于 Oracle RAC 环境下 Apache Tomcat 漏洞(CVE-2024-21733)的解决方案
作者 | JiekeXu来源 |公众号 JiekeXu DBA之路(ID: JiekeXu_IT)如需转载请联系授权 |(个人微信 ID:JiekeXu_DBA)大家好,我是JiekeXu,江湖人称“强哥”,荣获 Oracle ACE Pro 称号,墨天轮 MVP,墨天轮年度“墨力之星”,拥有 Oracle 11gOCP/OCM 认证,MySQL 5.7/8.0 OCP 认证以及 PCA...
作者 | JiekeXu
来源 |公众号 JiekeXu DBA之路(ID: JiekeXu_IT)
如需转载请联系授权 | (个人微信 ID:JiekeXu_DBA)
大家好,我是 JiekeXu,江湖人称“强哥”,荣获 Oracle ACE Pro 称号,墨天轮 MVP,墨天轮年度“墨力之星”,拥有 Oracle 11g OCP/OCM 认证,MySQL 5.7/8.0 OCP 认证以及 PCA、PCTA、OBCA、OGCA、KCP 等众多国产数据库认证证书,今天和大家一起来看看关于 Oracle RAC 环境下 Apache Tomcat 漏洞(CVE-2024-21733)的解决方案,欢迎点击最上方蓝字“JiekeXu DBA之路”关注我的微信公众号,然后点击右上方三个点“设为星标”顶,更多干货文章才能第一时间推送,谢谢!
前 言
Apache Tomcat® 软件是一个开源实现 Jakarta Servlet、Jakarta Pages、Jakarta Expression Language、Jakarta WebSocket、Jakarta Annotations 和 Jakarta Authentication 规范。这些规格是 Jakarta EE 平台的一部分。
Jakarta EE 平台是 Java EE 平台的演进。Tomcat 10 及以后的版本实现了作为 Jakarta EE 一部分开发的规范。Tomcat 9 和更早版本的实现规范是作为 Java EE 的一部分开发的。目前,Apache Tomcat 项目自豪地宣布发布版本 10.1.28,此版本属于 Jakarta EE 10 平台。
--download
https://tomcat.apache.org/index.html
--官方文档:
https://tomcat.apache.org/security-9.html
https://tomcat.apache.org/security-8.html
--漏洞报告:
https://hackerone.com/reports/2327341
https://lists.apache.org/thread/h9bjqdd0odj6lhs2o96qgowcc6hb0cfz
CVE-2024-21733
[CVE-2024-21733] 漏洞 Apache Tomcat - 信息泄露于 2024 年 1 月 19 日发布。
漏洞描述
当 Web 服务器未能正确处理 POST 请求的内容长度时,可能会导致客户端-服务器不同步(CSD)漏洞。攻击者可以利用这一漏洞强制受害者的浏览器与网站的连接失去同步,进而导致敏感数据在服务器和/或客户端连接中被窃取。可以通过构造特定请求,在异常页面中输出其他请求的 body 数据,修复版本中通过增加 finally 代码块,保证默认会重设缓冲区 position 和 limit 到一致的状态,从而造成信息泄露。
受影响的版本
Apache Tomcat 9.0.0-M11 到 9.0.43
Apache Tomcat 8.5.7 到 8.5.63
描述:未完成的 POST 请求触发了可能包含的错误响应,来自另一个用户的先前请求的数据。
缓解:受影响版本的用户应应用以下方法之一
缓解措施:
升级到 Apache Tomcat 9.0.44 或更高版本
升级到 Apache Tomcat 8.5.64 或更高版本
Oracle RAC 中遇到的 Tomcat 漏洞问题
在 Oracle RAC 12c R2 及以上的版本中,GI home 目录下使用了 Tomcat(grid 用户:$ORACLE_HOME/tomcat),RAC 自带的这个 tomcat 会碰到和标准的 tomcat 一样的漏洞。不过根据 GIRU 补丁自带的 tomcat RU 的版本,如果应用了 19.13 GIRU 以及更高 GIRU 自带的 TOMCAT RU 则就不受此问题影响了。因为 19.13 GIRU 的 Tomcat 版本是 8.5.69,不受影响。
JiekeXu1:/u01/app/19.0.0/grid/tomcat(+ASM1)$ tree -L 2
.
|-- conf
| |-- catalina.policy
| |-- catalina.properties
| |-- context.xml
| |-- logging.properties
| |-- server.xml
| `-- web.xml
`-- lib
|-- annotations-api.jar
|-- bootstrap.jar
|-- catalina.jar
|-- jaspic-api.jar
|-- memoryTrojan-agent-attach.jar
|-- memoryTrojan-agent-core.jar
|-- servlet-api.jar
|-- tomcat-api.jar
|-- tomcat-coyote.jar
|-- tomcat-jni.jar
|-- tomcat-juli.jar
|-- tomcat-util-scan.jar
`-- tomcat-util.jar
2 directories, 19 files
那么怎么查看 RAC GI Home 下的 Tomcat 的版本呢?
在 $ORACLE_HOME/tomcat 的 lib 目录下有个 catalina.jar,我们将这个文件下载到本地,使用解压工具打开,里面有个 MANIFEST.MF,打开之后 Implementation-Version: 8.5.37 这个就是版本号。如下图所示,这个 8.5.37 刚好是受影响的版本。
8.5.37 这个版本的 Tomcat 位于 grid 的 $ORACLE_HOME/ 的一个隐藏目录(.patch_storage)下 .patch_storage/33911149_Mar_1_2022_10_00_57/files/tomcat/lib。这个是在打补丁过程中自动备份的文件,可直接删除。
JiekeXu1:/u01/app/19.0.0/grid/.patch_storage/33911149_Mar_1_2022_10_00_57/files/tomcat/lib(+ASM1)$ ll
total 3192
-rw-r--r-- 1 grid oinstall 12349 Feb 9 2019 annotations-api.jar
-rw-r--r-- 1 grid oinstall 35060 Feb 9 2019 bootstrap.jar
-rw-r--r-- 1 grid oinstall 1653771 Feb 9 2019 catalina.jar
-rw-r--r-- 1 grid oinstall 26898 Feb 9 2019 jaspic-api.jar
-rw-r--r-- 1 grid oinstall 242873 Feb 9 2019 servlet-api.jar
-rw-r--r-- 1 grid oinstall 10657 Feb 9 2019 tomcat-api.jar
-rw-r--r-- 1 grid oinstall 822219 Feb 9 2019 tomcat-coyote.jar
-rw-r--r-- 1 grid oinstall 34742 Feb 9 2019 tomcat-jni.jar
-rw-r--r-- 1 grid oinstall 49333 Feb 9 2019 tomcat-juli.jar
-rw-r--r-- 1 grid oinstall 210920 Feb 9 2019 tomcat-util-scan.jar
-rw-r--r-- 1 grid oinstall 145748 Feb 9 2019 tomcat-util.jar
--解决办法
cd /u01/app/19.0.0/grid/.patch_storage/33911149_Mar_1_2022_10_00_57/files/tomcat/lib
rm -rf *
--或者直接删除 rm -rf .patch_storage 均可
GIRU 与 TOMCAT 版本对应关系
根据 Oracle 原厂 SR 的回复,在 Oracle 19.13 的 GIRU 版本中已经包含了 8.5.69 版本的 Tomcat,修复了 CVE-2024-21733 相关的漏洞,如果你的 RAC 数据库版本低于 19.13,则需要打 RU 补丁到 19.13 或更高版本的 RU补丁,注意单机 db 不受影响,只有低于 19.12 的 Grid 环境才会受影响。
19.24GIRU -TOMCAT 9.0.87
19.22GIRU -TOMCAT 8.5.96
19.21GIRU -TOMCAT 8.5.89
19.20GIRU -TOMCAT 8.5.89
19.19GIRU -TOMCAT 8.5.84
19.17GIRU -TOMCAT 8.5.82
19.16GIRU -TOMCAT 8.5.79
19.15GIRU -TOMCAT 8.5.75
19.14GIRU -TOMCAT 8.5.69
19.13GIRU -TOMCAT 8.5.69 <=== 在 19.13 这里以及更高版本修复了 CVE-2024-21733
19.12GIRU -TOMCAT 8.5.63
19.11GIRU -TOMCAT 8.5.60
19.10GIRU -TOMCAT 8.5.59
19.9GIRU -TOMCAT 8.5.57
19.8GIRU -TOMCAT 8.5.51
19.7GIRU -TOMCAT 8.5.50
19.6GIRU -TOMCAT 8.5.42
19.5GIRU -TOMCAT 8.5.37
19.4GIRU -TOMCAT 8.5.37
19.3GIRU -TOMCAT 8.5.37
解决方案
如果你的数据库 GI 版本等于大于 19.13,那么只需要删除 Grid 家目录下的隐藏文件夹 .patch_storage 下的 Tomcat 相关 jar 包,不影响 RAC 服务。
cd /u01/app/19.0.0/grid/.patch_storage/33911149_Mar_1_2022_10_00_57/files/tomcat/lib
rm -rf *
如果你的数据库 GI 版本小于 19.13 则需要打 GIRU 补丁,建议打最新或次新的 19.24/19.23 补丁以解决此问题,注意 RAC 打补丁需要协调停机窗口,滚动升级补丁。
打补丁教程可看这篇:Oracle 19c RAC RU15 补丁更新详细步骤
----# 表示 root 用户,$ 表示 Oracle 用户提示符,(ASM1)$ 表示 grid 用户
----# 打补丁简要步骤如下:
# cd /u01/app/19.0.0/grid/
# mv OPatch OPatch.bak19
(ASM1)$ unzip p6880880_122010_Linux-x86-64.zip
# cp -r OPatch /u01/app/19.0.0/grid/
# chown grid:oinstall -R /u01/app/19.0.0/grid/OPatch
$ opatch version
OPatch Version: 12.2.0.1.30
# /u01/app/19.0.0/grid/OPatch/opatchauto apply /u01/backup/33859214/33803476
如果你的数据库 GI 版本低于 19.13 且暂时无法打补丁,那么可暂时关闭 ora.qosmserver 服务。
--查看 qosmserver 状态
JiekeXu1:/home/grid(+ASM1)$ crsctl status res -t | grep -A2 qos
ora.qosmserver
1 ONLINE ONLINE JiekeXu1 STABLE
ora.scan1.vip
JiekeXu1:/home/grid(+ASM1)$ srvctl status qosmserver
QoS Management Server is enabled.
QoS Management Server is running on node JiekeXu1
-- 使用如下命令关闭 qosmserver
srvctl stop qosmserver
srvctl disable qosmserver
-- 再次査看 qosmserver 状态
srvctl status qosmserver
crsctl stat res -t
----======================
### 回退方案:
-- 启动 gosmserver
--grid 用户
srvctl enable gosmserver
srvctl start gosmserver
srvctl status qosmserver
Crsctl stat res -t
附:GI HOME 中的 Tomcat 的功能
GI Home 中的 Tomcat 用于部署以下网格基础架构 (GI) 功能:
Oracle 服务质量(QoS)管理 - GI 中的一项功能,旨在管理特定群集上的数据库工作负载。https://docs.oracle.com/en/database/oracle/oracle-database/19/atnms/oracle-database-qos-management.html#GUID-B1DF82C1-9B62-42A8-96F1-A5AC8C7DC44D
Oracle Fleet Patching and Provisioning (FPP) - GI 中的一项功能,用于实现 Oracle 软件配置修补和升级的标准化和自动化。该功能的前身是 Rapid Home Provisioning (RHP)。https://docs.oracle.com/en/database/oracle/oracle-database/19/sprhp/toc.htm
Oracle Memory Guard - Memory Guard 可自主收集 Oracle Real Application Clusters (Oracle RAC) 环境中每个节点的内存使用指标。
Memory Guard 自动监控集群节点,防止节点因内存不足而产生压力。Memory Guard 自动收集 Oracle RAC 环境中每个节点的内存使用指标。内存保护从群集运行状况监控器获取信息。如果 Memory Guard 检测到某个节点内存不足,则 Memory Guard 会执行以下操作:
防止在受影响的节点上创建新的数据库会话,在节点上以事务方式停止所有 crs 管理的服务,允许现有工作负载在节点上运行。
Memory Guard 作为一个守护进程实现,作为 MBean 运行在由集群就绪服务(CRS)管理的 J2EE 容器中。
Memory Guard 托管在 qosmserver 资源上,该资源在任何集群节点上运行,以实现高可用性。
下图为 Memory Guard 体系结构
集群运行状况监控器 CHM 向 Memory Guard 发送一个度量流,该流提供有关集群节点内存资源的实时信息。这些信息包括以下内容:
-
-
可用内存量
当前使用的内存量
-
获取内存资源信息后,memory Guard 会从 Oracle Clusterware 收集集群拓扑信息。Memory Guard 使用集群拓扑和内存指标来识别具有内存压力的数据库节点。当空闲内存低于某个阈值时,就认为内存有压力。
然后 Memory Guard 会以事务方式停止压力节点上由 Oracle Clusterware 管理的数据库服务。Memory Guard 在不影响已经运行的会话及其相关事务的情况下减轻了内存压力。完成后,这些进程使用的内存开始释放,并添加到节点上的可用内存池中。当 Memory Guard 检测到可用内存量超过阈值时,会重启受影响节点上的服务。
当服务在压力节点上停止时,侦听器将该服务的新连接重定向到为非单例数据库实例提供相同服务的其他节点。但是,对于策略管理的数据库,不会停止服务的最后一个实例以确保可用性。
注意:Memory Guard 可以启动或停止 Open 状态下的数据库服务。Memory Guard 不管理默认数据库服务,也不会在升级或降级数据库时采取行动。
Oracle TFA 跟踪文件分析器 - Oracle 跟踪文件分析器收集器和 Oracle 跟踪文件分析器可简化诊断数据的收集和问题的解决。
QoS 应用程序部署在 Tomcat 中,由 MBeans、REST 服务和 Servlet 组成。鉴于 QoS 是一个安全应用程序,随 GI 提供的 Tomcat 发行版经过了定制,定制的不是 Tomcat 代码本身,而是 Tomcat 在使用 Tomcat 功能方面的特性。这改进了容器的使用,使其更加可靠和安全。
以下是使用 GI 部署的 Tomcat 的增强功能列表:
为了尽量减少内存占用,我们只在 Tomcat 网络容器中使用以下 JAR 文件
annotations-api.jar
bootstrap.jar
catalina.jar
jaspic-api.jar
servlet-api.jar
tomcat-api.jar
tomcat-coyote.jar
tomcat-jni.jar
tomcat-juli.jar
tomcat-util.jar
tomcat-util-scan.jar监听器是通过配置附加到 TOMCAT 的,这些监听器可以例如,限制使用 JVM 属性:避免使用 JVM 附带的 RMI 连接器。强制使用甲骨文登录模块(Oracle Login Modules),这样我们就可以在OCR和甲骨文钱包(Oracle Wallets)中存储凭证。加载 ORACLE 分发的 TLS 证书启动我们制作的 JMXConnector,以便在启用 TLS 的情况下使用 ORACLE 证书进行 RMI 通信如果启用 TLS,使用 ORACLE 证书启动 HTTP 连接器。仅使用两个通信端口,一个用于 RMI,另一个用于 HTTP。
使用安全管理器限制对 Node 中 MBeans 和资源的访问,以避免安全漏洞。
使用 ora.qosmserver 资源(使用 Tomcat)的应用程序有两个:QoS 和 MPA。
QoS 使用端口 8888(RMI)和 8895(HTTP)。
Tomcat 显然有更多的功能,但我们并没有使用这些功能,因为它们必须经过定制才能使用 Oracle 基础架构,而且由于 QoS 和 FPP 的性质,有些功能并不是必需的。我们没有在 GI 中使用 Tomcat Distribution:
The JMX connector.
The AJP connector.
The Managment console.
ANT scripting
The shutdown service due it is very insecure.
Shell Scripts to start and shutdown the container.
Realms and Access Controls
JSPs
Clustering
APR native
Virtual Hosting
JNDI Resources
IMPORTANT: Patching of Tomcat within the GI home is handled via the Quarterly Grid Infrastructure Release Updates. Patching outside of GI Release Updates is NOT supported. 重要:在 GI home 内对 Tomcat 进行的修补是通过每季度的 Grid Infrastructure Release Updates 进行的。不支持在 GI 发布更新之外打补丁。言外之意就是这个 Tomcat 的补丁只会在每个季度的 RU 补丁包里更新,不会单独发布 oneoff 补丁修复,不能单独直接修改 Tomcat 。
参考文档
Tomcat in the Grid Infrastructure Home (Doc ID 2655066.1)
Apache Tomcat 8.5.x - Vulnerability EOL/Obsolete Software (Doc ID 3039452.1)
https://lists.apache.org/thread/h9bjqdd0odj6lhs2o96qgowcc6hb0cfz
https://hackerone.com/hacktivity/cve_discovery?id=CVE-2024-21733
https://docs.oracle.com/en/database/oracle/oracle-database/12.2/atnms/enabling-memory-guard-in-oracle-rac-environment.html#GUID-880E1DF8-8514-41AD-9AE7-0B84B8D5EFB1
全文完,希望可以帮到正在阅读的你,如果觉得有帮助,可以分享给你身边的朋友,同事,你关心谁就分享给谁,一起学习共同进步~~~
❤️ 欢迎关注我的公众号【JiekeXu DBA之路】,一起学习新知识!
分享几个数据库备份脚本
一文搞懂 Oracle 统计信息
我的 Oracle ACE 心路历程
MOP 系列|MOP 三种主流数据库索引简介
Oracle 主流版本不同架构下的静默安装指南
关机重启导致 ASM 磁盘丢失数据库无法启动
Oracle SQL 性能分析(SPA)原理与实战演练
Oracle 11g 升级到 19c 需要关注的几个问题
Windows 10 环境下 MySQL 8.0.33 安装指南
SQL 大全(四)|数据库迁移升级时常用 SQL 语句
OGG|使用 OGG19c 迁移 Oracle11g 到 19C(第二版)
Oracle 大数据量导出工具——sqluldr2 的安装与使用
从国产数据库调研报告中你都能了解哪些信息及我的总结建议
使用数据泵利用 rowid 分片导出导入 lob 大表及最佳实践
在归档模式下直接 rm dbf 数据文件并重启数据库还有救吗?
欢迎关注我的公众号【JiekeXu DBA之路】,一起学习新知识!
——————————————————————————
公众号:JiekeXu DBA之路
墨天轮:https://www.modb.pro/u/4347
CSDN :https://blog.csdn.net/JiekeXu
ITPUB:https://blog.itpub.net/69968215
腾讯云:https://cloud.tencent.com/developer/user/5645107
——————————————————————————
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)