日常常见应用组件升级记录

一、前言

因近期安全扫描,发现java后端应用涉及多个引用组件版本过低,涉及潜在漏洞利用风险,特记录相关处理升级处理过程,以备后续确认;

二、升级处理过程

2.1、Java类应用内置Spring Boot版本升级

Spring Boot是一款基于Spring框架的快速开发框架,它提供了一系列的开箱即用的功能和组件,但升级过程中可能会有一些特定于项目的配置或依赖项也需要进行对应的适配调整。版本升级前,在本地/测试环境中进行充分的测试和验证,确保没有引入新的兼容性问题或其他不可预见的错误;

目标:将 Spring Boot 升级到 2.5.15、2.6.15、2.7.12、3.0.7 及以上版本;否则涉及Spring Boot 拒绝服务漏洞(CVE-2023-20883);参考过程如下:

主要过程如下:

1、确定当前的Spring Boot版本:可以在项目的pom.xml文件中查看当前使用的Spring Boot版本号。有的里面使用环境变量引用,可直接看依赖BOOT-INF/lib/spring-boot-2.7.9.jar 包

2、查看官方文档:访问Spring Boot的官方文档网站(https://docs.spring.io/spring-boot/docs/)和版本发布,对比需要升级的目标版本,查看最新的发布版本和更新的内容。

3、更新pom.xml文件/依赖的spring-boot包:将pom.xml文件中的Spring Boot版本号改为最新的/需要的版本号。可以通过在Maven仓库中搜索最新的Spring Boot版本号,然后将其替换掉pom.xml文件中原有的版本号。

4、解决依赖冲突:升级Spring Boot版本可能会导致一些依赖冲突的问题。可以使用Maven的dependencyManagement元素来解决这些问题。在pom.xml文件中添加dependencyManagement元素,并将冲突的依赖项的版本号设置为所需的版本号。

5、运行测试用例:在升级完成后,运行项目的测试用例,确保升级后的版本没有引入新的bug或问题后,运行mvn package命令打出jar包,即发新的包进行部署

6、部署和运行:在升级完成后,重新构建项目并将其部署到服务器上进行测试和生产环境的运行。

在这里插入图片描述
在这里插入图片描述
另外可参考:spring boot中spring框架的版本升级;

2.2、Java类应用内置 MyBatis 组件升级

MyBatis是美阿帕奇(Apache)软件基金会的一款优秀的持久层框架。 MyBatis存在远程代码执行漏洞,该漏洞源于错误处理对象流的反序列化。攻击者可利用漏洞将对象反序列化后存储至redis服务器中。

目标:对现场后台应用组件 MyBatis 升级到 3.5.6 及以上版本;下载地址:https://github.com/mybatis/mybatis-3/releases,现场:BOOT-INF/lib/mybatis-3.4.6.jar,否则涉及MyBatis远程代码执行漏洞(CVE-2020-26945);升级过程同上,修改版本,调试无报错后重新发包,部署替换,升级到最新版Mybatis 3.5.15;

2.3、Apache Commons FileUpload 组件升级

Apache Commons FileUpload 包可以提供强大的、高性能的、文件上传能力。 Apache Commons FileUpload 存在安全漏洞,由于1.5 版本之前的Commons FileUpload对处理的请求部分的数量没有限制,攻击者有可能通过恶意上传或一系列上传触发 DoS。低于1.5版本的涉及Apache Commons FileUpload 拒绝服务漏洞(CVE-2023-24998);

目标:将 Commons FileUpload 升级到 1.5 及以上版本,下载地址;现场版本:BOOT-INF/lib/commons-fileupload-1.2.2.jar,该组件依赖java版本,现场Java版本 “1.8.0_391”,FileUpload组件还依赖于commons IO组件,现场版本:BOOT-INF/lib/commons-io-2.5.jar。

注:在Spring Boot开发的Web应用程序中,处理文件上传在早期的Spring Boot版本中,通常使用
commons-fileupload库来处理文件上传。然而,随着时间的推移,commons-fileupload库已经过时,不再推荐
使用,Spring Boot社区推荐使用commons-fileupload2-jakarta库来代替旧的commons-
fileupload库。

1、首先,确定当前使用的 Apache Commons FileUpload 版本。可以在项目的依赖管理文件(如 Maven 或 Gradle)中查看相关信息。

2、打开官方网站 https://commons.apache.org/proper/commons-fileupload/index.html,并导航到 “Download” 页面。根据需求选择最新的版本号,点击对应的下载链接获取 JAR 包。也可以通过 Maven 或 Gradle 等构建工具来添加依赖。

3、将下载得到的 JAR 包复制到项目的类路径下,或者将其添加为 Maven 或 Gradle 项目的依赖。

4、更新项目中所有引用了 Apache Commons FileUpload 的地方,确保正确调用新版本提供的 API。

5、运行测试,确认项目能够成功编译、部署和运行,调试修改现有代码以适配新版本。重新运行测试,确保没有因升级而引入任何错误或 bug。

6、将 Apache Commons FileUpload 升级到最新版本后重新发包,部署到生产后确认。

2.4、Apache Commons Collections 组件

Apache Commons Collections是一个扩展了Java标准库里的Collection结构的第三方基础库,它提供了很多强有力的数据结构类型并且实现了各种集合工具类。作为Apache开源项目的重要组件,Commons Collections被广泛应用于各种Java应用的开发。 Apache Commons Collections库实现了一个TransformedMap类,该类是对Java标准数据结构Map接口的一个扩展。该类可以在一个元素被加入到集合内时,自动对该元素进行特定的修饰变换,具体的变换逻辑由Transformer类定义,Transformer在TransformedMap实例化时作为参数传入。而Apache Commons Collections已经内置了一些常用的Transformer,如InvokerTransformer类。研究人员发现InvokerTransformer类可以通过调用Java的反射机制来调用任意函数,从而导致任意代码执行。 Apache Commons Collections在3.2.2版本中做了一定的安全处理,对InvokerTransformer、InstantiateTransformer等不安全的Java类的序列化支持增加了开关,开关默认为关闭状态。 如果没有开启不安全类的序列化开关,漏洞利用时则会抛出异常。 Commons Collections4中也存在内置的可能被攻击的类,存在被反序列化利用的风险。

目标:将 Apache Commons Collections 升级到 3.2.2、4.1 及以上版本,版本可参考下载地址,否则涉及Apache Commons Collections 反序列化漏洞;现场版本:BOOT-INF/lib/commons-collections-3.2.jar;需升级到最新的3.3.3版本,它依赖Java 1.3及以上,现场Java版本为:1.8.0_391。

jar -tf ./dialup-service.jar |grep "commons-collections"  #输出如下
BOOT-INF/lib/commons-collections-3.2.jar
BOOT-INF/lib/commons-collections4-4.1.jar#下载最新版本的 commons-collections。,将最新版本的 commons-collections 复制到我们的项目中的 BOOT-INF/lib 目录下#更新项目中的依赖关系,编辑pom.xml 文件中,将 commons-collections 的版本号更新为最新版本#重新编译和运行项目,直到无报错后,重新发包,部署替换,完成升级

2.5、Flink引用hadoop

Apache Hadoop是美国阿帕奇(Apache)基金会的一套开源的分布式系统基础架构。该产品能够对大量数据进行分布式处理,并具有高可靠性、高扩展性、高容错性等特点。 Apache Hadoop YARN CapacityScheduler 中的 ZKConfigurationStore 由于没有验证从 ZooKeeper 获得的数据就进行反序列化处理,使得有权访问 ZooKeeper 的攻击者通过特制数据以 YARN 用户身份运行任意命令。

目标:将 Hadoop 升级到 2.10.2、3.2.4、3.3.4 及以上版本,版本选择参考下载地址;现场版本:hadoop-3.3.2(官方建议升级到 3.3.6)、flink-1.15.1;低于此版本的涉及Apache Hadoop YARN 远程代码执行漏洞(CVE-2021-25642)。

2.6、XXL-JOB应用

XXL-JOB是一个轻量级分布式任务调度平台。默认情况下XXL-JOB的API接口没有配置认证,在API接口未授权访问的情况下,攻击者通过向API发送精心构造的请求,可以造成远程命令执行。下载地址:https://gitee.com/xuxueli0323/xxl-job

目的:默认不配置认证确公网暴露的情况下,涉及XXL-JOB API 接口未授权访问远程命令执行漏洞,因此我们需增加授权验证,配置 xxl.job.accessToken 防止未授权访问漏洞。

#调度中心配置文件地址
/xxl-job/xxl-job-admin/src/main/resources/application.properties
### 调度中心通讯TOKEN [选填]:非空时启用;
xxl.job.accessToken=Weq34r2
#相关文件说明
xxl-job-admin:调度中心
xxl-job-core:公共依赖
xxl-job-executor-samples:执行器Sample示例(选择合适的版本执行器,可直接使用,也可以参考其并将现有项目改造成执行器)
xxl-job-executor-sample-springboot:Springboot版本,通过Springboot管理执行器,推荐这种方式;
xxl-job-executor-sample-frameless:无框架版本;#执行器 AccessToken 配置:xxl-job-executor-sample-springboot
xxl:job:accessToken: Weq34r2admin:addresses: http://127.0.0.1:8080/xxl-job-admin

或直接页面配置,打开http://localhost:80807/xxl-job-admin/:
在这里插入图片描述

2.7、Java应用内置tomcat组件

Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。 Tomcat存在输入验证错误漏洞,该漏洞源于存在不正确的输入验证漏洞,可能会导致将单个请求视为多个请求,从而在反向代理后面出现请求走私。

目标:将 Tomcat 升级到 11.0.0-M11、10.1.16、9.0.83(官方最新9.0.85)、8.5.96 及以上版本,版本参考官网;低于9.0.80版本的涉及Tomcat 输入验证错误漏洞(CVE-2023-46589)、Tomcat 输入验证错误漏洞(CVE-2023-45648)、Tomcat 开放重定向漏洞(CVE-2023-41080),低于9.0.71版涉及Tomcat 拒绝服务漏洞(CVE-2023-24998)、低于9.0.72版涉及Tomcat 安全漏洞(CVE-2023-28708)、Tomcat Session 反序列化代码执行漏洞(CVE-2021-25329);对低于8.5.68、9.0.48、10.0.7 的Tomcat 涉及请求走私漏洞(CVE-2021-33037)、低于9.0.40涉及Tomcat 本地权限提升漏洞(CVE-2022-23181)、Tomcat 拒绝服务漏洞(CVE-2022-29885)、Tomcat 信息泄露漏洞(CVE-2021-24122)。

jar -tf dialup-controller.jar|grep "tomcat"  #版本检查
BOOT-INF/lib/tomcat-embed-core-9.0.76.jar
BOOT-INF/lib/tomcat-embed-el-9.0.76.jar
BOOT-INF/lib/tomcat-embed-websocket-9.0.76.jar
#下载最新版本的 Tomcat Embed Core JAR 文件
wget http://archive.apache.org/dist/tomcat/tomcat-9/v9.0.85/bin/embed/apache-tomcat-9.0.85-embed.tar.gz
#替换现有的现有的 tomcat-embed-core-9.0.76.jar 文件
mv tomcat-embed-core-9.0.76.jar tomcat-embed-core-9.0.76.jar.bak
mv tomcat-embed-core-9.0.85.jar tomcat-embed-core-9.0.76.jar#重新编译发布我们的java应用
mvn clean install
java -jar target/dialup-controller.jar
#部署替代环境现有应用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/636577.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

代码随想录算法训练营第十天|232 用栈实现队列、225 用队列实现栈

栈与队列 栈(stack):先进后出;队列(queue):先进先出栈和队列是STL里面的两个数据结构栈不能遍历元素,提供pop和push等接口,时间复杂度都为O(1)在SGI STL中,如…

python爬虫案例分享

当然,我可以分享一个基本的Python爬虫示例。这个示例将使用Python的requests库来抓取网页内容,然后使用BeautifulSoup库来解析和提取信息。我们将构建一个简单的爬虫来从一个示例网站抓取标题。 Python爬虫示例 目标 提取某网站的标题。 需要的库 r…

bug笔记:解决 HTTP Error 500.30 - ASP.NET Core app failed to start

总结下后端部署windos iis环境net6版本,500.30问题报错的一种解决方案: 一、问题描述 二、解决方案 检查下是否安装了net6对应的环境,是否已经安装 然后在事件管理器>Windows日志>应用程序,里面查看详细异常记录 在iis下面…

使用golang对接微软Azure AI翻译

文章目录 一、官方地址二、准备工作三、代码示例 一、官方地址 https://learn.microsoft.com/zh-CN/azure/ai-services/translator/translator-text-apis?tabsgo 二、准备工作 创建服务 创建服务连接地址:https://portal.azure.com/#create/Microsoft.CognitiveS…

RabbitMQ与SpringAMQP

MQ,中文是消息队列(MessageQueue),字面来看就是存放消息的队列。也就是事件驱动架构中的Broker。(经纪人!) 1.RabbitMQ介绍 微服务间通讯有同步和异步两种方式 同步(通信&#xff0…

ruoyi-cloud—若依微服务打包部署

1. 前端端口修改 2. 后端端口修改 (1)修改ruoyi-gateway服务中的bootstrap.yml的port端口 (2)修改ruoyi-ui中的vue.confing.js的target中的端口 3. 后端部署 (1) 在本地电脑上代码界面上打包后端 在ruoyi项目的bin目录下执行pa…

探索 ChatGPT 中文版:开启自然语言处理新纪元

ChatGPT 中文版是一款由 OpenAI 推出的自然语言处理模型,它在中文语境下展现出了出色的文本生成和对话交互能力。作为程序员,我们对这一领域的创新和发展充满期待。 ChatGPT 中文版不仅能够回答各种技术问题,还能够生成代码示例,…

回溯法:N皇后问题

问题背景 八皇后问题是十九世纪著名的数学家高斯于1850年提出的。 • 问题是:在88的棋盘上摆放八个皇后, 使其不能互相攻击, 即任意两个皇后都不能处于同一行、 同一列或同一斜线上。 • n皇后问题:即在n n的棋盘上摆放n个皇后…

看完这篇我就不信还有人不懂卷积神经网络!

看完这篇我就不信还有人不懂卷积神经网络! 前言 在深度学习大🔥的当下,我知道介绍卷积神经网络的文章已经在全网泛滥,但我还是想要写出一点和别人不一样的东西,尽管要讲的知识翻来覆去还是那么一些,但我想…

Redis原理篇(SkipList)

一.概述 本质是双端链表,只不过在正向遍历时可以不一个一个遍历,而是可以跳着遍历。 怎么实现的呢,下面是SkipList源码 二.源码 1. zskiplist 意义:跳表 zskiplist里面有头指针和尾指针,节点数量,最大…

【信号与系统】(1)连续和离散表示

在信号处理和数学中,连续和离散是两种基本的表示方法,用于描述信号、函数或数据集。 对连续信号 f(t)进行等间隔采样得到 连续表示(Continuous Representation) 连续表示通常用于描述在一个连续范围内变化的信号或函数。在连续…

Java学习(二十一)--JDBC/数据库连接池

为什么需要 传统JDBC数据库连接,使用DriverManager来获取; 每次向数据库建立连接时都要将Connection加载到内存中,再验证IP地址、用户名和密码(0.05s~1s)时间。 需要数据库连接时候,就向数据库要求一个&#xf…

JS-WebAPIS(四)

日期对象(常用) • 实例化 在代码中发现了 new 关键字时,一般将这个操作称为实例化创建一个时间对象并获取时间 获得当前时间 获得指定时间 • 时间对象方法 使用场景:因为日期对象返回的数据我们不能直接使用,所以…

学习心得:二分查找

二分查找 基础:查找元素是否出现 #include <stdio.h> int main() {int a[10]{0,1,1,3,4,5,6,7,8,9},int x;scanf("%d",&x);int l0,r9,count0;while(l<r){int m(lr)/2;if(a[m]x){countm;break;}if(a[m]>x){rm-1;}if(a[m]<x)lm1;}printf("%d…

Elasticsearch 查询语句概述

目录 1. Match Query 2. Term Query 3. Terms Query 4. Range Query 5. Bool Query 6. Wildcard Query 7. Fuzzy Query 8. Prefix Query 9. Aggregation Query Elasticsearch 是一个基于 Lucene 的搜索引擎&#xff0c;提供了丰富的查询DSL&#xff08;Domain Specifi…

【2023我的编程之旅】七次不同的计算机二级考试经历分享

目录 我报考过的科目 第一次报考MS Office 第二次报考Web语言&#xff0c;C语言&#xff0c;C语言 第三次报考C语言&#xff0c;C语言&#xff0c;Java语言 分享一些备考二级的方法 一些需要注意的细节 结语 2023年的CSDN征文活动已经进入了尾声&#xff0c;在这最后我…

Excel·VBA合并工作簿2

其他合并工作簿的方法&#xff0c;见之前的文章《ExcelVBA合并工作簿》 目录 8&#xff0c;合并文件夹下所有工作簿中所有工作表&#xff0c;按表头汇总举例 8&#xff0c;合并文件夹下所有工作簿中所有工作表&#xff0c;按表头汇总 与之前的文章《ExcelVBA合并工作簿&#x…

006.Oracle事务处理

我 的 个 人 主 页&#xff1a;&#x1f449;&#x1f449; 失心疯的个人主页 &#x1f448;&#x1f448; 入 门 教 程 推 荐 &#xff1a;&#x1f449;&#x1f449; Python零基础入门教程合集 &#x1f448;&#x1f448; 虚 拟 环 境 搭 建 &#xff1a;&#x1f449;&…

vue2 点击按钮下载文件保存到本地(后台返回的zip压缩流)

// import ./mock/index.js; // 该项目所有请求使用mockjs模拟 去掉mock页面url下载 console.log(res, res)//token 是使页面不用去登录了if (res.file) {window.location.href Vue.prototype.$config.VUE_APP_BASE_IDSWAPI Vue.prototype.$config.VUE_APP_IDSW /service/mode…

【Linux上创建一个LVM卷组,将多个物理卷添加到卷组中使用】

Linux上创建一个LVM卷组&#xff0c;将多个物理卷添加到卷组中使用 目录1.列出当前系统中所有的块设备信息&#xff0c;包括磁盘、分区、逻辑卷等2.对磁盘进行分区操作3.创建了一个名为 vg_data 的卷组4.将物理卷添加到已经存在的卷组5.在卷组中创建一个逻辑卷6.查看已创建的 L…