漏洞预警:Apache Log4j RCE漏洞

发布时间:2021-12-10 04:42:47 作者:Potato 阅读量:2248

Part1 漏洞描述

Apache Log4j是Apache的一个开源项目,Apache log4j2是Log4j的升级版本,我们可以控制日志信息输送的目的地为控制台、文件、GUI组件等,通过定义每一条日志信息的级别,能够更加细致地控制日志的生成过程。

近日发现Apache Log4j存在任意代码执行漏洞(CVE-2021-44228),经过分析,Apache Log4j2 <=2.14.1 配置、日志消息和参数中使用的 JNDI 功能部件不能抵御攻击者控制的 LDAP 和其他 JNDI 相关端点。启用消息查找替换后,能够控制日志消息或日志消息参数的攻击者可以执行从 LDAP 服务器加载的任意代码。

Part2 危害等级

风险等级:高危(较大事件)

Part3 漏洞影响

  • Apache Log4j 2.x < 2.15.0-rc2

Part4 漏洞分析及验证

源码分析

查看 log4j2各种不同层级的日志函数处理方式,发现都会调用 logIfEnabled函数进行处理,以 error为例:

来到程序入口,从LogManager中获取指定日志信息,赋值给log,然后记录下info级别的信息

找到 logIfEnabled函数:把数据存储在了 logMessage

在对日志的处理函数中,发现在第116行会循环提取 ${的内容,不符合格式的请求将直接返回。

然后进入 StrSubstitutor#substitute函数,主要进行字符串的提取:

然后进入467行的 resolveVariable函数,根据提交的协议提取不同的 resolver进行 lookup处理。 最终进入 JndiLookup#lookup,触发JNDI请求,完成RCE

RC1绕过【dnslog/ exp】 /后加空格

Part5 漏洞检测

自我检测

1.若程序使用Maven打包,查看项目的pom.xml文件中是否存在下图所示的相关字段,若版本号为小于2.15.0,则存在该漏洞。

2.若程序使用gradle打包,可查看build.gradle编译配置文件,若在dependencies部分存在org.apache.logging.log4j相关字段,且版本号为小于2.15.0,则存在该漏洞。

攻击检测

1、攻击者在利用前通常采用dnslog方式进行扫描、探测,常见的漏洞利用方式可通过应用系统报错日志中的"javax.naming.CommunicationException"、"javax.naming.NamingException: problem generating object using object factory"、"Error looking up JNDI resource"关键字进行排查。

2、攻击者发送的数据包中可能存在"${jndi:}" 字样,推荐使用全流量或WAF设备进行检索排查

产品检测

  • 绿盟科技远程安全评估系统(RSAS)与WEB应用漏洞扫描系统(WVSS)、网络入侵检测系统(IDS)已具备对该漏洞的扫描与检测能力。

  • 阿里云安全中心也支持对此漏洞的检测

Part6 漏洞修复

1、厂商已发布升级修复漏洞,用户请尽快更新至安全版本:log4j-2.15.0-rc2

下载链接:https://github.com/apache/logging-log4j2/releases/tag/log4j-2.15.0-rc2

2、升级已知受影响的应用及组件,如srping-boot-strater-log4j2/Apache Solr/Apache Flink/Apache Druid等


Potato

专注渗透测试技术

全球最新网络攻击技术

支付宝打赏 微信打赏

我要评论

Catfish(鲶鱼) Blog V 4.7.3