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

一、前言

因近期安全扫描,发现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: Weq34r2
    admin:
      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
#部署替代环境现有应用

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

python实现图片式PDF转可搜索word文档[OCR](已打包exe文件)

目录 1、介绍 1.1、痛点 1.2、程序介绍 2、安装方式 2.1、🔺必要环节 2.2、脚本安装 2.2.1、不太推荐的方式 2.2.2、节约内存的方式 2.3、⭐完整版安装 3、使用 3.1、最终文件目录 3.2、主程序 3.2.1、绝对路径 3.2.2、是否为书籍 3.2.3、⭐截取区域 …

SpringCloudConfig+SpringCloudBus+Actuator+Git实现Eureka关键配置属性热更新(全程不重启服务)

文章目录 前言1.痛点2.解决方案3.具体实现3.1搭建热配置服务3.2编写配置文件3.3搭建版本控制仓库3.4Eureka-Client引入以下依赖3.5Eureka-Client微服务编写以下配置bootstrap.yml提前加载3.6分别编写测试Controller3.7测试效果3.8下线场景压测 4.SpringCloudBus优化 前言 在上…

【Kafka】Kafka介绍、架构和概念

目录 Kafka介绍Kafka优势Kafka应用场景Kafka基本架构和概念ProducerConsumer/Consumer GroupBrokerZooKeeperTopicPartitionReplicasOffsetsegment Kafka介绍 Kafka是是一个优秀的分布式消息中间件,关于常用的消息中间件对比可参考文章:消息中间件概述。…

Linux用户空间和内核空间所有15种内存分配方法

在Linux操作系统中,内存管理是一个关键的系统功能。用户空间和内核空间分别使用不同的函数来申请内存。以下是用户空间和内核空间内存申请函数的详细列表: Linux用户空间内存申请函数 1. malloc() 函数: void* malloc(size_t size); 用于…

Android OpenGL EGL使用——自定义相机

如果要使用OpenGl来自定义相机,EGL还是需要了解下的。 可能大多数开发者使用过OpengGL但是不知道EGL是什么?EGL的作用是什么?这其实一点都不奇怪,因为Android中的GlSurfaceView已经将EGL环境都给配置好了,你一直在使用…

100天精通Python(实用脚本篇)——第113天:基于Tesseract-OCR实现OCR图片文字识别实战

文章目录 专栏导读1. OCR技术介绍2. 模块介绍3. 模块安装4. 代码实战4.1 英文图片测试4.2 数字图片测试4.3 中文图片识别 书籍分享 专栏导读 🔥🔥本文已收录于《100天精通Python从入门到就业》:本专栏专门针对零基础和需要进阶提升的同学所准…

Flowable 生成流程图

/*** 生成流程图** param processId 任务ID*/ RequestMapping("/diagram/{processId}") public void genProcessDiagram(HttpServletResponse response,PathVariable("processId") String processId) {InputStream inputStream flowTaskService.diagram(p…

redis优化系列(六)

本期分享redis内存过期策略:过期key的处理 Redis之所以性能强,最主要的原因就是基于内存存储。然而单节点的Redis其内存大小不宜过大,会影响持久化或主从同步性能。 可以通过修改配置文件来设置Redis的最大内存: maxmemory 1gb …

[翻译] Vulkan-Sample-MSAA (Multisample anti-aliasing)

原文 Aliasing是以低于原始信号采样率的采样率进行采样导致的。在图形学中,这个过程可以描述为:基于一个会产生artifacts的分辨率去计算像素值,从而在模型边缘产生锯齿。多重采样抗锯齿(Multisample anti-aliasing,MS…

vivado 接口、端口映射

接口 重要&#xff01;接口只能在“fpga”类型的&#xff1c;component&#xff1e;中定义。接口部分提供了<component>上所有可用物理接口的列表。<interfaces>部分包含嵌套在其中的一个或多个<interface>标记。一个接口是通过使用<port_map>标记由多…

[pytorch入门] 3. torchvision中的transforms

torchvision中的transforms 是transforms.py工具箱&#xff0c;含有totensor、resize等工具 用于将特定格式的图片转换为想要的图片的结果&#xff0c;即用于图片变换 用法 在transforms中选择一个类创建对象&#xff0c;使用这个对象选择相应方法进行处理 能够选择的类 列…

股东出资透明度提升:企业股东出资信息API的应用

前言 在当今商业环境中&#xff0c;股东出资信息的透明度对于投资者、监管机构以及企业自身的健康发展至关重要。随着企业信息公开化的推进&#xff0c;企业股东出资信息API应运而生&#xff0c;为各方提供了一个便捷、高效的信息获取渠道。本文将探讨企业股东出资信息API如何…

【动态规划】【广度优先搜索】【状态压缩】847 访问所有节点的最短路径

作者推荐 视频算法专题 本文涉及知识点 动态规划汇总 广度优先搜索 状态压缩 LeetCode847 访问所有节点的最短路径 存在一个由 n 个节点组成的无向连通图&#xff0c;图中的节点按从 0 到 n - 1 编号。 给你一个数组 graph 表示这个图。其中&#xff0c;graph[i] 是一个列…

03.时间轮

时间轮 1.为什么需要时间轮 海量的定时任务下&#xff0c;小顶堆时间复杂度比较高&#xff0c;性能差 2.时间轮是什么 时间轮这个技术其实出来很久了&#xff0c;在kafka、zookeeper、Netty、Dubbo等高性能组件中都有时间轮使用的方式 时间轮&#xff0c;从图片上来看&…

自定义数据集 - Dataset

文章目录 1. PASCAL VOC格式 划分训练集和验证集2. 自定义dataset 1. PASCAL VOC格式 划分训练集和验证集 import os import randomdef main():random.seed(0) # 设置随机种子&#xff0c;保证随机结果可复现files_path "./VOCdevkit/VOC2012/Annotations" # 指定…

Sentinel限流规则支持流控效果

流控效果是指请求达到流控阈值时应该采取的措施&#xff0c;包括三种&#xff1a; 1.快速失败&#xff1a;达到阈值后&#xff0c;新的请求会被立即拒绝并抛出FlowException异常。是默认的处理方式。 2.warm up&#xff1a;预热模式&#xff0c;对超出阈值的请求同样是拒绝并抛…

网络安全的信息收集方法有哪些?

网络安全攻击中的信息收集是攻击者为了了解目标系统的弱点、配置、环境和潜在的防御措施而进行的活动。以下是一些常见的信息收集手段&#xff1a; 开放网络资源查询&#xff1a; 使用搜索引擎查找关于目标组织的信息&#xff0c;包括新闻稿、社交媒体帖子、官方网站等。通过W…

答案之书程序

答案之书程序 需求&#xff1a;用户输入手机号码后4位或者生日&#xff0c;自动生成答案之书对应答案 效果图 C#代码实现过程 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq;…

新买电脑配置不低却卡顿?

目录 前言&#xff1a; 电脑卡顿的原因 Windows 10必做的系统优化 禁用 IP Helper 关闭系统通知 机械硬盘开启优化驱动器功能 开启存储感知 前言&#xff1a; 新买的电脑配置不低&#xff0c;但却卡顿甚至程序不反应&#xff0c;这是怎么回事儿&#xff1f; 其实并不…

获取主流电商平台商品价格,库存信息,数据分析,SKU详情

要接入API接口以采集电商平台上的商品数据&#xff0c;可以按照以下步骤进行&#xff1a; 1、找到可用的API接口&#xff1a;首先&#xff0c;需要找到支持查询商品信息的API接口。这些信息通常可以在电商平台的官方文档或开发者门户网站上找到。 2、注册并获取API密钥&#x…