相信大家最近一定被 log4j2 的远程代码执行漏洞所刷屏了,各个互联网厂商,开源组织,还有相关企业都瑟瑟发抖,相关研发人员也都是加班加点紧急修复和改正。笔者也看了一些相关文章,感觉不少都是刷屏,刷阅读量,甚至是做相关广告的,详细介绍的少之又少。这里写一篇文章,详细介绍 log4j2 RCE 漏洞复现步骤以及根因,纯粹是以学习为目的。log4j2 RCE 漏洞总体来说是通过 JNDI 注入来完成的,具体的有 RMI 协议的方式和 LDAP 协议等不同方式,这里以 RMI 方式为例子做详细复现步骤和根因分析(不了解 JNDI/RMI/LDAP 等相关概念的同学请自 Google)。
基本原理
基本注入原理可以用以下流程图说明:
复现步骤
创建恶意代码相关类以及下载该类的服务:
创建 RMI 服务:
利用 log4g2 漏洞注入 RMI 调用:
查看恶意代码执行结果:
漏洞原因
log4j2 的 MessagePatternConverter 组件中的 format 方法是罪魁祸首,在记录日志的时候会间接的调用该方法。
上面会 trigger 原生 RMI 服务调用:
恶意代码执行如下图:
受害条件
该漏洞被触发需要满足下面条件:
以上就是对于Log4j2 RCE 漏洞复现以及一些相关分析,当然对于解决方式从影响和成本上看还是关掉这个 lookup 的功能比较廉价。虽然官方也有紧急的修复,但是毕竟涉及到升级软件版本,需要大量的测试和分析工作。