解决Apache Log4j2漏洞通用方案(最新&亲测有效)

7 篇文章 0 订阅
1 篇文章 0 订阅

【亲测有效】

漏洞背景

2021年11月24日,阿里云安全团队向Apache官方报告了Apache Log4j2远程代码执行漏洞。2021年12月10日,阿里云安全团队发现 Apache Log4j 2.17.0-rc1 版本存在漏洞绕过,请及时更新至 Apache Log4j 2.17.0-rc2 版本。

漏洞描述
Apache Log4j2是一款优秀的Java日志框架。2021年11月24日,阿里云安全团队向Apache官方报告了Apache Log4j2远程代码执行漏洞。由于Apache Log4j2某些功能存在递归解析功能,攻击者可直接构造恶意请求,触发远程代码执行漏洞。漏洞利用无需特殊配置,经阿里云安全团队验证,Apache Struts2、Apache Solr、Apache Druid、Apache Flink等均受影响。2021年12月10日,阿里云安全团队发现 Apache Log4j 2.17.0-rc1 版本存在漏洞绕过,请及时更新至 Apache Log4j 2.17.0-rc2 版本。阿里云应急响应中心提醒 Apache Log4j2 用户尽快采取安全措施阻止漏洞攻击。【后面Apache团队也发现2.15.0和2.16.0版本也存在远程数据漏洞,最终升级为安全版本 2.17.0】
漏洞评级
Apache Log4j 远程代码执行漏洞——严重
漏洞状态
在这里插入图片描述
影响版本
经验证 2.17.0-rc1 版本存在绕过,实际受影响范围如下:Apache Log4j 2.x < 2.17.0-rc2
安全建议

  1. 排查应用是否引入了Apache log4j-core Jar包,若存在依赖引入,且在受影响版本范围内,则可能存在漏洞影响。请尽快升级Apache Log4j2所有相关应用到最新的 log4j-2.15.0-rc2 版本,地址 https://github.com/apache/logging-log4j2/releases/tag/log4j-2.15.0-rc2
  2. 升级已知受影响的应用及组件,如 spring-boot-starter-log4j2/Apache Struts2/Apache Solr/Apache Druid/Apache Flink
  3. 可升级jdk版本至6u211 / 7u201 / 8u191 / 11.0.1以上,可以在一定程度上限制JNDI等漏洞利用方式。

解决方案

方案1(极力推荐)

此方式直接升级版本来解决,升级到安全版本(2.17.0)即可。要PS的是,我们引入安全版本依赖后,也要在starter-web启动器依赖里把Spring Boot自带的log依赖要排除掉(所谓铲草除根),因为Spring Boot封装的Apache Log4j2依赖暂时还没是最新版本,使用它可能会出现漏洞。重点来了,请参考如下代码
原依赖(存在漏洞的):

<!-- 引入log4j2依赖 -->  
<dependency> 
    <groupId>org.springframework.boot</groupId>  
    <artifactId>spring-boot-starter-log4j2</artifactId>  
</dependency>

【下面的 解决依赖1解决依赖2 均可解决漏洞,将上面原依赖替换为下面的其中一个依赖】
解决依赖1:

<!-- 安全版本 2.17.0版本(Apache 原版的log依赖) --> 
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j2</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<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>
<!-- 去掉springboot默认配置 --> 
<dependency>  
    <groupId>org.springframework.boot</groupId>  
    <artifactId>spring-boot-starter-web</artifactId>  
    <exclusions><!-- 去掉springboot默认配置 -->  
        <exclusion>  
            <groupId>org.springframework.boot</groupId>  
            <artifactId>spring-boot-starter-logging</artifactId>  
        </exclusion>  
    </exclusions>  
</dependency> 

解决依赖2:

<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->
<!-- 安全版本 2.17.0版本(Apache 原版的log依赖) --> 
<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-api</artifactId>
     <version>2.17.0</version>
</dependency>
<!-- 去掉springboot默认配置 --> 
<dependency>  
    <groupId>org.springframework.boot</groupId>  
    <artifactId>spring-boot-starter-web</artifactId>  
    <exclusions><!-- 去掉springboot默认配置 -->  
        <exclusion>  
            <groupId>org.springframework.boot</groupId>  
            <artifactId>spring-boot-starter-logging</artifactId>  
        </exclusion>  
    </exclusions>  
</dependency> 

升级到安全版本后,我们刷新Maven后能看到新依赖如下:
在这里插入图片描述

如果是Gradle版本,解决依赖如下:
修改build.gradle为:

dependencies {
  compile group: 'org.apache.logging.log4j', 
  name: 'log4j-api', 
  version: '2.17.0-rc2' 
  compile group: 'org.apache.logging.log4j', 
  name: 'log4j-core', 
  version: '2.17.0-rc2' 
 }

安全版本相关源码https://gitcode.net/mirrors/apache/logging-log4j2?utm_source=csdn_github_acceleratorhttps://github.com/apache/logging-log4j2/releases/tag/log4j-2.17.0-rc2

方案2

此方式通过部署方式和配置来临时解决漏洞,具体解决如下

  1. 在jvm启动参数中添加 -Dlog4j2.FORMATMsgNoLookups=true
    在这里插入图片描述
  2. 系统环境变量中配置 FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS=true
  3. 项目中创建 log4j2.component.properties 文件,文件中增加配置 log4j2.formatMsgNoLookups=true
  4. 采用 rasplookup 的调用进行阻断;
  5. 采用 waf 对请求流量中的 ${jndi} 进行拦截;
  6. 禁止不必要的业务访问外网。

好lala,Apache Log4j2漏洞已解决,希望能帮助到各位后端开发er,也麻烦各位大佬顺手 点赞 && 关注,蟹蟹!!!
后期会给大家推送更加深层技术和各种性能优化方案的鸡汤~~~

  • 11
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值