漏洞复现:《CVE-2021-44228:Apache Log4j2 远程代码执行》
2021-12-11 00:25:33 Author: mp.weixin.qq.com(查看原文) 阅读量:9 收藏

0x00 前言

    2021年12月9日,“网安仔的不眠之夜”

   这个星期的安全圈 “躁” 起来了,先是在野0day《Grafana 未授权任意文件读取》被爆出,随后又出现了《Apache Log4j2 远程代码执行》;后者的传播速度之快、利用门槛之低、影响范围之广,使其在业内堪称 “核弹级” 漏洞。

0x01 漏洞描述

    2021年12月9日,Apache Log4j 的远程代码执行漏洞细节被公开,大量的业务框架都使用了该组件。此次漏洞是用于 Log4j2 提供的 lookup 功能造成的,该功能允许开发者通过一些协议去读取相应环境中的配置。该漏洞一旦被攻击者利用会造成严重危害

0x02 漏洞编号

CVE-2021-44228

    Apache Log4j 2.x <=  2.15.0-rc2(据悉,官方rc1补丁有被绕过的风险)

0x04 漏洞复现

   此次漏洞的命令执行原理和 fastjson 一样,都存在远程加载的步骤。其主要问题出在 Log4j2 打印日志的时候对字符串 ${ } 处理不当。

    环境搭建:

    此次复现的环境为 Tomcat 9.0.41、Jdk 1.8( Jdk1.8.191以上默认不支持ldap协议,对于高版本的Jdk,则需要目标存在一定的依赖才行。

   接着,在目标服务器部署一个 Tomcat 服务(源自 https://www.t00ls.cc/thread-63695-1-1.html)

    攻击步骤:

    1. 首先写一个恶意类(这里的代码是弹出计算器,Exp不便展示)

    2. 启动一个 LDAP 服务监听端口(https://github.com/0x727/JNDIExploit)

    3. 抓包并在输入框填入攻击代码,接着拦截到包后,给包添加 cmd:(命令)参数并放包

    复现成功。

0x05 内部自查

1. 项目依赖版本检测

检测pom依赖版本是否低于 2.15.0

<dependencies>  <dependency>    <groupId>org.apache.logging.log4j</groupId>    <artifactId>log4j-api</artifactId>    <version>2.15.0</version>  </dependency>  <dependency>    <groupId>org.apache.logging.log4j</groupId>    <artifactId>log4j-core</artifactId>    <version>2.15.0</version>  </dependency></dependencies>

检测gradle依赖版本是否低于 2.15.0

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

检测Ivy依赖版本是否低于 2.15.0

<dependencies>  <dependency org="org.apache.logging.log4j" name="log4j-api" rev="2.15.0" />  <dependency org="org.apache.logging.log4j" name="log4j-core" rev="2.15.0" /></dependencies>

检测SBT依赖版本是否低于 2.15.0

libraryDependencies += "org.apache.logging.log4j" % "log4j-api" % "2.15.0"libraryDependencies += "org.apache.logging.log4j" % "log4j-core" % "2.15.0"

若没有使用上述工具,那么可以全局搜索项目中是否存在 log4j 的相关 jar 包,并通过 jar 包中的 /META-INF/MANIFEST.MF 文件查看 log4j 的版本。

      2. 日志/流量排查

        (1. 排查日志或者解码后完整的请求数据包中是否存在${jndi:关键字。

     (2. 排查日志是否存在相关堆栈报错,堆栈里是否有JndiLookup、ldapURLContext、getObjectFactoryFromReference等与 jndi 调用相关的堆栈信息。

0x06 修复建议

        1. 通用修补建议

          升级到最新版本 2.15.0-rc2 :

https://github.com/apache/logging-log4j2/releases/tag/log4j-2.15.0-rc2

       2. 临时修补建议

1. 设置JVM启动参数-Dlog4j2.formatMsgNoLookups=true2. 尽量使用JDK 版本大于11.0.18u191、7u201、6u211,需要注意的是,即使是使用了 JDK 高版本也不能完全保证安全,依然存在本地绕过的情况。3. 限制不必要的业务访问外网。4. 采用 rasp 对 lookup 的调用进行阻断。5. 采用 waf 对请求流量中的 ${jndi 进行拦截。

        参考链接:https://mp.weixin.qq.com/s/p2X1gu-rbiI3FZwteErnkQ


文章来源: https://mp.weixin.qq.com/s?__biz=Mzg5MzU4NTgwNQ==&mid=2247484655&idx=1&sn=9e7014e3c0d0ca91ecec44c9fbea3e2f&chksm=c02dd40df75a5d1bc23f7999c20a89b7fb4f9c6700a11416e707056f2dc011f016fd5aff2d95&scene=58&subscene=0#rd
如有侵权请联系:admin#unsafe.sh