关注公众号回复“漏洞”获取研究环境或工具
漏洞信息
2022年1月18日,Apache发布安全公告披露了3个Log4j的新漏洞,均影响Apache Log4j 1.x版本。其中CVE-2022-23307是Apache log4j Chainsaw反序列化漏洞,可导致任意命令执行。漏洞通报如下:
Chainsaw是由Log4j开发社区成员编写的与Log4j配套的应用程序,是一个基于GUI的日志查看器,可以读取Log4j的XMLLayout格式的日志文件。下面给各位小伙伴分享一下漏洞的分析与复现过程。
环境搭建
添加引用:
<!-- https://mvnrepository.com/artifact/log4j/log4j -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
添加日志配置文件`log4j.properties`:
log4j.rootLogger=DEBUG,stdout,CHAINSAW_CLIENT
log4j.appender.CHAINSAW_CLIENT=org.apache.log4j.net.SocketAppender
log4j.appender.CHAINSAW_CLIENT.RemoteHost=localhost
log4j.appender.CHAINSAW_CLIENT.Port=4445
log4j.appender.CHAINSAW_CLIENT.LocationInfo=true
上面指定Chainsaw服务端口为默认的`4445`,启动Apache Log4j自带的Chainsaw服务,为了方便漏洞分析,可以加入远程调试配置:
java -Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,address=0.0.0.0:8787,server=y,suspend=n -cp log4j-1.2.17.jar org.apache.log4j.chainsaw.Main
构造测试代码:
实现可视化监视日志功能:
漏洞分析
Apache Log4j集成了Chainsaw模块:
启动实现位于`org.apache.log4j.chainsaw#main`:
首先通过`initLog4J`完成一些初始化的工作,然后创建`Main`对象:
通过`setupReceiver`创建一个Socket套接字接收子线程`LoggingReceiver`:
`LoggingReceiver`定义了一个典型的套接字处理数据接收的流程:
进入`Slurper`:
直接将接收的数据码流进行了反序列化操作,从而导致出现漏洞。
漏洞复现
为了方便复现,在Chainsaw启动过程中加入`commons-collections-3.1.jar`,修改启动命令如下:
java -Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,address=0.0.0.0:8787,server=y,suspend=n -classpath %classpath% -cp ./libs/commons-collections-3.1.jar;log4j-1.2.17.jar org.apache.log4j.chainsaw.Main
生成cc6利用链:
java -jar ysoserial.jar CommonsCollections6 calc >calc.bin
构建Socket发送数据包:
成功触发RCE:
修复方式
由于Log4j v1.x系列已经停止更新,所以无法直接通过升级进行修复,这里建议程序要么采用Log4j v2.x系列,要么在配置文件中修改Chainsaw默认的接收方式,比如修改为`XMLSocketReceiver`。
由于传播、利用此文档提供的信息而造成任何直接或间接的后果及损害,均由使用本人负责,且听安全团队及文章作者不为此承担任何责任。
点关注,不迷路!
关注公众号回复“漏洞”获取研究环境或工具
原文始发于微信公众号(且听安全):【最新漏洞预警】CVE-2022-23307 Apache Log4j Chainsaw反序列化漏洞分析与复现
- 我的微信
- 微信扫一扫
-
- 我的微信公众号
- 微信扫一扫
-
评论