百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

Apache Log4j 五连环漏洞修复锦囊秘籍

toyiye 2024-05-25 20:11 47 浏览 0 评论

阅读本文约花费您5分钟,修复应用漏洞刻不容缓!

1 、以数据之名 简介

  • 今日头条、微信公众号、知乎和掘金,主体均为“以数据之名”;
  • 欢迎关注,留言交流;
  • 本文主要针对近期Apache Log4j 5连环漏洞,做修复策略实践经验总结。

2 、Log4j 漏洞综述

【安全通告-高危】Apache Log4j 五连环安全漏洞

【综述】
近日,监测到Apache Log4j 存在多个任意代码执行及DoS拒绝漏洞:
CVE-2021-4104:Apache Log4j 1.2.x版本在特定配置时存在JMSAppender 反序列化代码执行漏洞。
CVE-2021-44228:该组件存在Java JNDI 注入漏洞,当程序将用户输入的数据进行日志,即可触发此漏洞,成功利用此漏洞可以在目标服务器上执行任意代码。
CVE-2021-45046:当log4j配置使用非默认模式布局和上下文查找(例如${ctx:loginId})或线程上下文映射模式(%X、%mdc或%MDC)时,使用JNDI查找模式制作恶意输入数据从而导致拒绝服务(DoS) 攻击。
CVE-2021-45105:由于log4j没有防止在自引用查找中不受控制的递归,当日志配置使用带有上下文查找的非默认模式布局(例如,${ctx:loginId})时,控制线程上下文映射 (MDC) 输入数据的攻击者可以制作包含递归查找的恶意输入数据,导致 StackOverflowError 终止进程,造成DoS攻击。

CVE-2021-44832:在某些特殊场景下(如系统采用动态加载远程配置文件的场景等),有权修改日志配置文件的攻击者可以构建恶意配置,通过JDBC Appender 引用JNDI URI 数据源触发JNDI 注入,成功利用此漏洞可以实现远程代码执行。

【影响范围】

CVE-2021-44228:
2.0-beta9 <= Apache Log4j <= 2.12.1
2.13.0<= Apache Log4j <= 2.15.0-rc1

CVE-2021-45046:
2.0-beta9 <= Apache Log4j <= 2.12.1
2.13.0<= Apache Log4j <= 2.15.0-rc2(2.15.0稳定版)
注:只有 log4j-core jar文件受此漏洞影响。

CVE-2021-4104:
Apache Log4j =1.2.x

CVE-2021-45105:
2.0-alpha1 <= Apache Log4j <=2.16.0
注:只有 log4j-core jar文件受此漏洞影响。


CVE-2021-44832:2.0-beta7 <= Apache Log4j2 <= 2.17.0
注:不包括安全修复版本2.3.2 和2.12.4

【漏洞影响】攻击者可利用上述漏洞,成功在目标服务器上执行任意代码及发起拒绝攻击。

【处置建议】升级至:
Apache Log4j 2.17.1(适用于java8)
Apache Log4j 2.12.4(适用于java7)
Apache Log4j 2.3.2 (适用于java6)
注:此漏洞在特殊情况下才会被利用,建议已升级至2.17.0 、2.12.3的,在下次有上线的时候升级掉,还未升级的升级至以上最新版本。

【处置时间】建议30天内修复完成


3 、Log4j 依赖 Jdk 版本

3.1 Jdk 1.6 应用

Log4j 版本

修复状态

备注

2.0.x~2.3

未修复


2.3.2

已修复

推荐 Jdk1.6 版本的应用,升级到该版本

3.2 Jdk 1.7 应用

Log4j 版本

修复状态

备注

2.4~2.12.1

未修复


2.12.2

未完全修复

已修复JNDI漏洞,其他未修复

2.12.3

未完全修复

已基本修复,但不完全

2.12.4

已修复

推荐 Jdk1.7 版本的应用,升级到该版本


3.3 Jdk 1.8 应用

Log4j 版本

修复状态

备注

2.13.0~2.14.1

未修复


2.15.0

未完全修复

已修复JNDI漏洞,其他未修复

2.16.0

未完全修复

已修复JNDI漏洞和Lookup漏洞,其他未修复

2.17.0

已修复

修复MDC递归循环依赖漏洞

2.17.1

已修复

推荐 Jdk1.8 版本的应用,升级到该版本



4 、Jdk 1.8 应用升级

4.1 Maven 依赖替换

<dependencies>
  <dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>2.17.1</version>
  </dependency>
  <dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.17.1</version>
  </dependency>
  <dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-1.2-api</artifactId>
    <version>2.17.1</version>
  </dependency>
  <dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-jcl</artifactId>
    <version>2.17.1</version>
  </dependency>
  <dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-jul</artifactId>
    <version>2.17.1</version>
  </dependency>
  <dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-slf4j-impl</artifactId>
    <version>2.17.1</version>
  </dependency>
  <dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.25</version>
  </dependency>
  <dependency>
    <groupId>commons-logging</groupId>
    <artifactId>commons-logging</artifactId>
    <version>1.2</version>
  </dependency>
  <dependency>
    <groupId>com.lmax</groupId>
    <artifactId>disruptor</artifactId>
    <version>3.4.2</version>
  </dependency>
</dependencies>


4.2 Ivy 依赖替换

<dependencies>
  <dependency org="org.apache.logging.log4j" name="log4j-api" conf="zip->default" rev="2.17.1" />
  <dependency org="org.apache.logging.log4j" name="log4j-core" conf="zip->default" rev="2.17.1" />
  <dependency org="org.apache.logging.log4j" name="log4j-1.2-api" conf="zip->default" rev="2.17.1" />
  <dependency org="org.apache.logging.log4j" name="log4j-jcl" conf="zip->default" rev="2.17.1" />
  <dependency org="org.apache.logging.log4j" name="log4j-jul" conf="zip->default" rev="2.17.1" />
  <dependency org="org.apache.logging.log4j" name="log4j-slf4j-impl" conf="zip->default" rev="2.17.1" />
  <dependency org="org.slf4j" name="slf4j-api" conf="zip->default" rev="1.7.25" />
  <dependency org="commons-logging" name="commons-logging" conf="zip->default" rev="1.2" />
  <dependency org="com.lmax" name="disruptor" conf="zip->default" rev="3.4.2" />
</dependencies>


5 、非 Jdk 1.8 应用升级

5.1 jdk 1.7 maven依赖替换

<dependencies>
  <dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>2.12.4</version>
  </dependency>
  <dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.12.4</version>
  </dependency>
  <dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-1.2-api</artifactId>
    <version>2.12.4</version>
  </dependency>
  <dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-jcl</artifactId>
    <version>2.12.4</version>
  </dependency>
  <dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-jul</artifactId>
    <version>2.12.4</version>
  </dependency>
  <dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-slf4j-impl</artifactId>
    <version>2.12.4</version>
  </dependency>
  <dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.25</version>
  </dependency>
  <dependency>
    <groupId>commons-logging</groupId>
    <artifactId>commons-logging</artifactId>
    <version>1.2</version>
  </dependency>
  <dependency>
    <groupId>com.lmax</groupId>
    <artifactId>disruptor</artifactId>
    <version>3.4.2</version>
  </dependency>
</dependencies>


5.2 jdk 1.6 maven依赖替换

<dependencies>
  <dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>2.3.2</version>
  </dependency>
  <dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.3.2</version>
  </dependency>
  <dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-1.2-api</artifactId>
    <version>2.3.2</version>
  </dependency>
  <dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-jcl</artifactId>
    <version>2.3.2</version>
  </dependency>
  <dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-jul</artifactId>
    <version>2.3.2</version>
  </dependency>
  <dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-slf4j-impl</artifactId>
    <version>2.3.2</version>
  </dependency>
  <dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.25</version>
  </dependency>
  <dependency>
    <groupId>commons-logging</groupId>
    <artifactId>commons-logging</artifactId>
    <version>1.2</version>
  </dependency>
  <dependency>
    <groupId>com.lmax</groupId>
    <artifactId>disruptor</artifactId>
    <version>3.3.2</version>
  </dependency>
</dependencies>


6 、Log4j 漏洞修复其他问题

6.1 com.lmax的disruptor的版本兼容性问题

  • Log4j 的2.12.2和2.16.0版本选用disruptor-3.4.2版本。
  • Log4j 的2.3版本选用disruptor-3.3.2版本。

6.2 DocumentBuilderFactory.setFeature找不到的问题

引入如下依赖,并且删除其他xerces的包,保留如下包即可

<dependencies>
  <dependency>
    <groupId>xerces</groupId>
    <artifactId>xerceslmpl</artifactId>
    <version>2.12.1</version>
  </dependency>
  <dependency>
    <groupId>xml-apis</groupId>
    <artifactId>xml-apis</artifactId>
    <version>1.4.01</version>
  </dependency>
</dependencies>

6.3 Invalid byte tag in constant pool: 19异常

此异常是Tomcat版本低的原因,可以升级Tomcat8版本。对应用可用性无影响。解决SEVERE:Unableto process Jar entry [module-info.class] from Jar [jar:file:/opt/oracle/tomcat/webapps/app-sys/WEB-INF/lib/jackson-annotations.jar!/] for annotations org.apache.tomcat.util.bcel.classfile.ClassFormatException:Invalidbytetagin constant pool: 19


小编心声

虽小编一己之力微弱,但读者众星之光璀璨。小编敞开心扉之门,还望倾囊赐教原创之文,期待之心满于胸怀,感激之情溢于言表。一句话,欢迎联系小编投稿您的原创文章!

让我们携手成为技术专家

欢迎关注,欢乐交流,共同成长


参考资料

[1] 数据仓库集锦 : https://mp.weixin.qq.com/s/g28mTshrGHE5XGGVn-qPAA

[2] Log4j 官方说明: https://logging.apache.org/log4j/2.x/download.html

[3] Log4j 漏洞清单: https://logging.apache.org/log4j/2.x/

[4] Log4j maven仓库: https://mvnrepository.com/artifact/org.apache.logging.log4j

相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码