Log4j2漏洞修复

2023-11-20

一、漏洞说明

Apache Log4j2是一个基于Java的日志记录工具。由于Apache Log4j2某些功能存在递归解析功能,攻击者可直接构造恶意请求,触发远程代码执行漏洞。漏洞利用无需特殊配置,经阿里云安全团队验证,Apache Struts2、Apache Solr、Apache Druid、Apache Flink等均受影响。

漏洞适用版本为 2.0 <= Apache log4j2 <= 2.14.1,只需检测Java应用是否引入 log4j-api , log4j-core 两个jar。若存在应用使用,极大可能会受到影响。

二、临时修复方案

方式1:
  1. 修改启动脚本或命令,添加“-Dlog4j2.formatMsgNoLookups=true ” 启动参数和参数值(不包括引号)。

  2. 使用修改后的脚本或命令重启服务。

    例如:
    原本启动脚本或命令: java -jar file.jar
    修 改 后 启 动 脚 本 或 命 令 : java -Dlog4j2.formatMsgNoLookups=true -jar file.jar

现已验证 jdk1.7 及以上版本(绝大多数 jdk 版本)均可通过该种
方式规避漏洞,若 jdk 环境低于 1.7 版本,请升级至 1.7 及以上版本。为 避免低版本 jdk 平台存在漏洞利用的情况,请及时升级,升级后需要及时 观察并监测应用业务是否运行正常,若存在异常情况需要及时回退至原来 的 jdk 版本,避免影响生产环境业务。

方式2:

在应用classpath下添加log4j2.component.properties配置文件,文件内容为log4j2.formatMsgNoLookups=true;

也可以通命令行参数指定:

java -Dlog4j.configurationFile=../config/log4j2.component.properties
方式3:

将系统环境变量 FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS 设置为 true

注:以上3种方式也可以同时实施,以确保服务器环境安全可靠。

三、研发源码级修复方案

1. 通过版本覆盖,将项目依赖的Log4j2升级到最新版本

此种方式 适用于 项目对 Log4j2 有强依赖的场景,即 缺少依赖程序无法启动或者无法正常工作 的项目。

  • 在项目主 pom.xml 中引入Log4j2的最新版本进行版本覆盖:
<dependencies>
	        <dependency>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-api</artifactId>
                <version>2.17.0</version>
            </dependency>
            <dependency>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-core</artifactId>
                <version>2.17.0</version>
            </dependency>
            <dependency>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-to-slf4j</artifactId>
                <version>2.17.0</version>
            </dependency>
</dependencies>

注:官方已发布最新的 2.17.0 版本。如本地仓库加载不到,可以配置官方的snapshot仓库(https://repository.apache.org/content/groups/),或者下载jar文件后上传到本地的私服库 来解决。

  • 代码级别验证:
@RunWith(SpringRunner.class)
@SpringBootTest
@Log4j2
public class SpringTests {
 
    @Test
    public void test(){
        log.error("${jndi:ldap://127.0.0.1:1389/#Exploit}");
        log.error("${}","jndi:ldap://127.0.0.1:1389/#Exploit");
    }
}

在这里插入图片描述

可以正常输出日志,不执行命令则漏洞修复生效。

  • 利用 Idea 插件 maven helper 进行验证
    在这里插入图片描述
  • 查看打包后的 jar 文件进行验证
    在这里插入图片描述

2.将项目中的 Log4j2 依赖排除

此种情况 适用于 项目对 Log4j2 没有强依赖的场景。

利用 Maven Helper 插件搜索出,依赖关系,在引入依赖的节点直接将 Log4j2 的引入排除掉 即可,例如:

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.apache.logging.log4j</groupId>
                    <artifactId>log4j-to-slf4j</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

注: 排除后需要验证: 项目能否正常启动? 项目功能是否正常?

四、第三方应用服务修复

  • 此次漏洞受影响的范围还是非常广泛的,包括一些常用的中间件、数据库,如果: ES、Kafka等;
  • 这些第三方的应用服务,修复起来是比较棘手的,短时间内在官方没有发布安全版本的情况下,只能临时通过替换应用目录中的jar文件的方式进行修复;
  • 可以去官方的snapshot库下载最新的 jar 文件,对第三方服务进行替换操作;
  • 注意做好文件备份工作,有的服务可能会出现启动失败的情况;

官方库地址:https://repository.apache.org/snapshots

五、漏洞修复注意事项

  • 修复程序版本是否与项目现场的版本匹配?
  • 修复完成后 要保证项目能够正常启动,且功能正常,有条件的最好部署到测试环境验证一下;
  • 工程实施部署时,一定要提前备份好部署包 和 相关数据;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Log4j2漏洞修复 的相关文章

  • java中监视目录变化

    我正在使用 WatchService 来监视目录中的更改 特别是目录中新文件的创建 下面是我的代码 package watcher import java nio file import static java nio file Stand
  • 垃圾收集器如何在幕后工作来收集死对象?

    我正在阅读有关垃圾收集的内容 众所周知 垃圾收集会收集死亡对象并回收内存 我的问题是 Collector 如何知道任何对象已死亡 它使用什么数据结构来跟踪活动对象 我正在研究这个问题 我发现GC实际上会跟踪活动对象 并标记它们 每个未标记的
  • 如何在 Java 中向时间戳添加/减去时区偏移量?

    我正在使用 JDK 8 并且玩过ZonedDateTime and Timestamp很多 但我仍然无法解决我面临的问题 假设我得到了格式化的Timestamp在格林威治标准时间 UTC 我的服务器位于某处 假设它设置为Asia Calcu
  • Runtime.exec 处理包含多个空格的参数

    我怎样才能进行以下运行 public class ExecTest public static void main String args try Notice the multiple spaces in the argument Str
  • 在 Java 中如何找出哪个对象打开了文件?

    我需要找出答案哪个对象在我的 Java 应用程序中打开了一个文件 这是为了调试 因此欢迎使用工具或实用程序 如果发现哪个对象太具体了 这class也会很有帮助 这可能很棘手 您可以从使用分析器开始 例如VisualVM http visua
  • 断言 Kafka 发送有效

    我正在使用 Spring Boot 编写一个应用程序 因此要写信给 Kafka 我这样做 Autowired private KafkaTemplate
  • Sun 在 EDT 之外做 GUI 工作的演示?

    我正在看SplashDemo java http download oracle com javase tutorial uiswing examples misc SplashDemoProject src misc SplashDemo
  • Java继承,扩展类如何影响实际类

    我正在查看 Sun 认证学习指南 其中有一段描述了最终修饰符 它说 如果程序员可以自由地扩展我们所知的 String 类文明 它可能会崩溃 他什么意思 如果可以扩展 String 类 我是否不会有一个名为 MyString 的类继承所有 S
  • 蓝牙发送和接收文本数据

    我是 Android 开发新手 我想制作一个使用蓝牙发送和接收文本的应用程序 我得到了有关发送文本的所有内容逻辑工作 但是当我尝试在手机中测试它时 我看不到界面 这是Main Activity Code import android sup
  • 如何将 HTML 链接放入电子邮件正文中?

    我有一个可以发送邮件的应用程序 用 Java 实现 我想在邮件中放置一个 HTML 链接 但该链接显示为普通字母 而不是 HTML 链接 我怎样才能将 HTML 链接放入字符串中 我需要特殊字符吗 太感谢了 Update 大家好你们好 感谢
  • 不可变的最终变量应该始终是静态的吗? [复制]

    这个问题在这里已经有答案了 在java中 如果一个变量是不可变的并且是final的 那么它应该是一个静态类变量吗 我问这个问题是因为每次类的实例使用它时创建一个新对象似乎很浪费 因为无论如何它总是相同的 Example 每次调用方法时都会创
  • 如何区分从 Saxon XPathSelector 返回的属性节点和元素节点

    给定 XML
  • hibernate 6.0.2.Final 和 spring boot 2.7.0 的entityManagerFactory bean 未配置问题

    所以最近我想升级我的 Spring Boot 项目项目的一些依赖项 特别是这些组件 雅加达 EE 9 弹簧靴2 7 休眠 6 0 2 Final 完成此操作后 所有更新和代码折射 更新将 javax 导入到 jakarta 以及一些 hib
  • 使用 WSGI 在 Windows XAMPP 中设置 Python 路径

    我正在 Webfaction 上设置实时服务器的开发版本 在本地计算机上的虚拟 Apache 服务器环境 运行没有任何错误 中运行 Django 应用程序 XP 使用 Python 2 6 运行 XAMPP Lite 我可以提交更改通过 G
  • Capistrano 和 XSendFile 配置

    我正在尝试使用 Apache 2 2 Passenger 4 0 59 和 XSendFile 0 12 配置 Rails 生产服务器 应用程序通过 Capistrano 部署 部署的应用程序生成 可能很大 PDF Rails root t
  • 在 Spring 上下文中查找方法级自定义注释

    我想知道的是 所有的类 方法Spring http en wikipedia org wiki Spring Framework注释为 Versioned的bean 我创建了自定义注释 Target ElementType METHOD E
  • 手动设置Android Studio的JDK路径

    如何为 Android Studio 使用自定义 JDK 路径 我不想弄乱 PATH 因为我没有管理员权限 是否有某个配置设置文件允许我进行设置 如果您查看项目设置 您可以从那里访问 jdk 在标准 Windows 键盘映射上 您可以在项目
  • partitioningBy 必须生成一个包含 true 和 false 条目的映射吗?

    The 分区依据 https docs oracle com javase 8 docs api java util stream Collectors html partitioningBy java util function Pred
  • Android View Canvas onDraw 未执行

    我目前正在开发一个自定义视图 它在画布上绘制一些图块 这些图块是从多个文件加载的 并将在需要时加载 它们将由 AsyncTask 加载 如果它们已经加载 它们只会被绘制在画布上 这工作正常 如果加载了这些图片 AsyncTask 就会触发v
  • 抛出 Java 异常时是否会生成堆栈跟踪?

    这是假设我们不调用 printstacktrace 方法 只是抛出和捕获 我们正在考虑这样做是为了解决一些性能瓶颈 不 堆栈跟踪是在构造异常对象时生成的 而不是在抛出异常对象时生成的 Throwable 构造函数调用 fillInStack

随机推荐

  • python导入excel模块_Python利用Psycopg2模块将Excel表格数据导入Postgressql

    import os import numpy as np import pandas as pd import xlrd import psycopg2 import redis conn redis Redis host localhos
  • python利用bs4获取网络小说

    所选定的小说网址 https www shicimingju com book xiyouji html 如果想更换其他小说资源 在上一级网址就行 https www shicimingju com book 代码如下 from bs4 i
  • jeecgboot问题解决方案

    常见问题Q A JEECG老版在线文档 点击进入 1 后台访问提示token错误 报错截图 解决方案 JeecgBoot后台的所有请求访问 增加了token机制 所以不能直接访问后台 而需要通过前台登录才能访问 默认前台访问地址 http
  • 探查Weblogic JDBC Multipool 问题

    问题描述 WebLogic Server MultiPool 有两种不同的类型 高可用性 MultiPool 和负载平衡 MultiPool 这两种算法互不相容 分别用于达成不同的目标 本模式提供有关这两种算法的信息 了解不同类型的 Web
  • 5.sklearn之转换器(划分训练集和测试集、以及标准化、归一化数据会用transform,独热编码也会用到)

    文章目录 1 什么是转换器 2 测试集和训练集 2 1 训练集 测试集 验证集 2 2 拆分训练集测试集有个问题 2 3 代码 3 标准化 3 1 上离差标准化代码 举一反三就好了 其他几个用法一样 3 2 sklearn 其他标准化函数
  • SDL检查

    SDL检查 在用 Visual Studio 编译比较早的代码时 经常会遇到错误 错误 C4996 wcscpy This function or variable may be unsafe Consider using wcscpy s
  • Python+selenium+pytest 自动化测试环境搭建

    Python Selenium Pytest 自动化测试环境搭建 一 安装Python及解释器 二 安装浏览器及对应浏览器驱动 1 安装谷歌浏览器 浏览器安装之后 关闭浏览器的自动更新 因为如果浏览器自动更新了 你的浏览器驱动没有更新 那么
  • Web渗透入侵流程思路

    什么是web渗透入侵呢 渗透测试能够独立地检查你的网络策略 换句话说 就是给你的系统安了一双眼睛 而且 进行这类测试的 都是寻找网络系统安全漏洞的专业人士 下面就来一起学习分享一下web入侵渗透流程中的思路 首先献出一张宝贵的图 这张图上写
  • Fiddler 教程

    Fiddler是最强大最好用的Web调试工具之一 它能记录所有客户端和服务器的http和https请求 允许你监视 设置断点 甚至修改输入输出数据 使用Fiddler无论对开发还是测试来说 都有很大的帮助 阅读目录 Fiddler的基本介绍
  • 异常:java.lang.ArrayIndexOutOfBoundsException

    java lang ArrayIndexOutOfBoundsException 一种运行时异常 常出现在数组下标越界中 称为下标出界异常 代码演示 下面异常报错 就是因为我的数组arr只能有arr 0 arr 1 两个元素 而我的循环中多
  • 番茄钟工作法:你真的了解番茄钟么?

    1 什么是番茄工作法 番茄工作法的发明者 意大利人弗朗西斯科 西里洛于1992年创立了番茄工作法 他和我们大多数人一样 是一个重度拖延症患者 他在大学生活的头几年 曾一度苦于学习效率低下 于是他做了个简单的实验 我就不信我不能专注10分钟
  • MATLAB+JAVA的混合开发

    近期项目中需要使用matlab跟java做混合开发 主要记录一下 此次开发遇到的问题点 环境 使用的matlab版本是 R2018b 当前状况 MATLAB代码已经编写好 且运行成功 需要打成jar包才可以被java调用 步骤一 按照教程安
  • electron 下载过慢解决

    elecetron 起步 根据elecetron 官网上 试了下初始安装 结果第一步安装依赖就挂了 2个命令都试过了不行 npm install save dev electron yarn add dev electron 安装cnpm
  • Linux -安装MySQL

    一 步骤 1 下载 一 查询下本机mysql是否卸载干净 二 下载与安装 2 配置 一 步骤 1 下载 一 查询下本机mysql是否卸载干净 查看mysql情况 rpm qa grep mysql 完全卸载mysql rpm e nodep
  • element-plus中 el-image :src属性发送get请求

    项目场景 Element plus 中
  • MySQL Test Run 测试框架介绍

    介绍 MySQL Test Run 简称MTR 是MySQL官方提供的自动化测试框架 执行脚本在发布路径的mysql test目录下 主要测试步骤 是通过执行一个case test 中的语句 包括sql语句和其他管理语句 将case的输出记
  • Anaconda学习

    Anaconda conda 创建 激活 退出 删除虚拟环境 Anaconda超详细教程2023 7 10 windows 网络连接错误 1 首先学习anaconda是什么 Anaconda 官方网站 就是可以便捷获取包且对包能够进行管理
  • 计算机开机后反复上电无法启动,电脑无法开机一直重启显示器也不亮——用排除法一样来,拔...

    重新启动后无法打开计算机且显示器也无法打开 使用消除方法进行相同的操作 拉出图形卡并使用核心显示系统 通常 这是显卡问题 但仍然无法输入 拉出记忆棒 然后再试一次 然后放回原位 它可以正常启动吗 如果手边还有另一个内存模块 请拔出原来的内存
  • firewall-cmd使用--remove-rich-rule删除rich-rule规则

    命令格式 firewall cmd permanent remove rich rule 规则列表 firewall cmd permanent remove rich rule rule family ipv4 source addres
  • Log4j2漏洞修复

    一 漏洞说明 Apache Log4j2是一个基于Java的日志记录工具 由于Apache Log4j2某些功能存在递归解析功能 攻击者可直接构造恶意请求 触发远程代码执行漏洞 漏洞利用无需特殊配置 经阿里云安全团队验证 Apache St