Apache Log4j 远程代码执行漏洞复现+代码审计分析+POC+EXP

admin 2021年12月10日18:20:53安全文章Apache Log4j 远程代码执行漏洞复现+代码审计分析+POC+EXP已关闭评论1,029 views12472字阅读8分14秒阅读模式

0x01 漏洞描述

我是转载啊,看清楚了,别无脑喷我好不好Apache Log4j 是 Apache 的一个开源项目,Apache Log4j2是一个基于Java的日志记录工具。该工具重写了Log4j框架,并且引入了大量丰富的特性。我们可以控制日志信息输送的目的地为控制台、文件、GUI组件等,通过定义每一条日志信息的级别,能够更加细致地控制日志的生成过程。该日志框架被大量用于业务系统开发,用来记录日志信息。

图片

2021年12月9日,该漏洞正在被广泛利用 。漏洞编号:暂无,漏洞威胁等级:严重。
Log4j-2中存在JNDI注入漏洞,当程序将用户输入的数据被日志记录时,即可触发此漏洞,成功利用此漏洞可以在目标服务器上执行任意代码。鉴于此漏洞危害较大,建议客户尽快采取措施防护此漏洞。
经分析,log4j2是全球使用广泛的java日志框架,同时该漏洞还影响很多全球使用量的Top序列的通用开源组件,攻击者可直接构造恶意请求,触发远程代码执行漏洞。漏洞利用无需特殊配置,Apache Struts2、Apache Solr、Apache Druid、Apache Flink等均受影响

0x02 危害等级

严重

0x03 漏洞复现

2021年12月9日,已第一时间复现上述漏洞,演示如下:

图片

0x04 影响版本

Apache Log4j 2.x <= 2.14.1

0x05 修复建议

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

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

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

与此同时,请做好资产自查以及预防工作,以免遭受黑客攻击。

0x06 审计分析

详细代码如下

图片

从上面代码中可以看到,不管什么级别的日志下都可以出发lookup。那么问题来了?为什么有些级别的日志下却不可以触发呢?那是因为你的日志级别设置的太高,导致log4j根本就没打印日志内容。

代码org.apache.logging.log4j.core.pattern.MessagePatternConverter#format中,代码会按字符检测每条日志,如果一旦发现某条日志中包含$ {,就会触发替换机制,也就是将表达式内的内容替换成真实的内容,其中config.getStrSubstitutor().replace(event, value)执行下一步替换操作,其中关键代码如图

图片

org.apache.logging.log4j.core.lookup.StrSubstitutor#substitute(org.apache.logging.log4j.core.LogEvent, java.lang.StringBuilder, int, int, java.util.List<java.lang.String>)其实就是一个简单的字符串提取,然后找到lookup的内容并替换。函数的文档如下

图片

学过数据结构的都会,不详细介绍了。在函数的这个地方,执行变量解析,如图

图片

在此执行查找,根据变量的协议,关键代码如下

剩下就是一个简单的字符串查找函数,从字符串中提取类似于url的结构去解析,

图片

值得注意的是,log4j2支持很多协议,例如通过ldap查找变量,通过docker查找变量,详细参考这里https://www.docs4dev.com/docs/zh/log4j2/2.x/all/manual-lookups.html

图片

由以上类层次结构图可以看出

1、log4j2提供不下十种获取所运行环境配置信息的方式,基本能满足实际运行环境中获取各类配置信息的需求。

2、我们在自定义lookup时,可以根据自身需求自由选择继承自StrLookup,AbstractLookup,AbstractConfigurationAwareLookup等等来简化我们的代码。以上默认提供的各类lookup,其取值来源看官可以通过下面给出的引用链接中的第二个进行详细的瞭解,我就不再在这里赘述一遍了。

接下来我们来探索一些稍微深入的内容,以及一些细节性的内容。

1、作爲lookup对外门面的Interpolator是通过 log4j2中负责解析节点的PropertiesPlugin类来併入执行流程中的。具体源码可以参见PropertiesPlugin.configureSubstitutor方法。其中注意的是,我们在中提供的属性是以default的优先级提供给外界的。

2、作爲lookup对外门面的Interpolator,在其构造函数中载入了所有category值爲StrLookup.CATEGORY的plugin【即包括log4j2内置的(“org.apache.logging.log4j.core” package下的),也包括用户自定义的(log4j2.xml文件中的 Configuration.packages 属性值指示的package下的)】。

3、Interpolator可以单独使用,但某些值可能取不到。

4、获取MDC中的内容,log4j2提供了两种方式:$${ctx:user}或%X{user}。

0x07 POC+EXP获取

后台回复:

Log4j

  • 专注于信息安全方面分享,非营利性组织,不接商业广告

  • 关注不迷路,点赞!关注!转发!评论!!

  • 要投稿的后台留言即可,会第一时间回复,谢谢!


相关推荐: Category-719: OWASP Top Ten 2007 Category A8 - Insecure Cryptographic Storage

Category-719: OWASP Top Ten 2007 Category A8 - Insecure Cryptographic Storage ID: 719 Status: Obsolete Summary Weaknesses in this …

特别标注: 本站(CN-SEC.COM)所有文章仅供技术研究,若将其信息做其他用途,由用户承担全部法律及连带责任,本站不承担任何法律及连带责任,请遵守中华人民共和国安全法.
  • 我的微信
  • 微信扫一扫
  • weinxin
  • 我的微信公众号
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年12月10日18:20:53
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                  Apache Log4j 远程代码执行漏洞复现+代码审计分析+POC+EXP https://cn-sec.com/archives/670194.html