安全矩阵

 找回密码
 立即注册
搜索
查看: 2530|回复: 0

独家!Log4j2 RCE漏洞代码浅析

[复制链接]

855

主题

862

帖子

2940

积分

金牌会员

Rank: 6Rank: 6

积分
2940
发表于 2021-12-10 16:10:07 | 显示全部楼层 |阅读模式
原文链接:独家!Log4j2 RCE漏洞代码浅析

Apache Log4j是一个基于Java的日志框架,已于2015年8月5日停止维护。Log4j2是其重构升级版本,新增的 Lookups 方法设计用于通过多种途径动态引入外部变量。 log4j2版本 < log4j-2.15.0-rc2 可由JNDI注入实现远程代码执行。
执行流程
当POC作为message传递给 Logger 类的 error 、 fatal 等方法后,略去一些非关键流程,会进入到 MessagePatternConverter 类 format 方法对 ${ 内容进行解析替换:

之后进入 Interpolator 类的 lookup 方法,由前缀值 jndi 获取到 JndiLookup 类:

最终调用对应的 lookup 方法发起请求,也就是遍地开花的dnslog。。。

流程分析
JDK版本<8u191,可通过LDAP引入外部JNDI Reference:

JDK版本>=8u191,当存在 org.apache.naming.factory.BeanFactory 与 com.springsource.org.apache.el 等依赖时,可在返回的JNDI Reference中指定相应工厂类及setter方法,或是由LDAP引入序列化链实现RCE:

同时可以结合一些其它 StrLookup 适当变形,以及配合官方测试用例中脏数据`"?Type=A Type&Name=1100110&Char=!"`可绕过rc1。



RC2版本对此异常进行了捕获。
修复建议
详细修复建议请参照《Apache Log4j2 远程代码执行漏洞 | 默安科技全产品支持检测》

参考链接
[Log4j2 Manual Lookups](https://www.docs4dev.com/docs/en ... manual-lookups.html)
[LOG4J2-3201 - Limit the protocols JNDI can use by default]
(https://github.com/apache/loggin ... 170394d5f1a01ac02d3)


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2025-4-23 09:10 , Processed in 0.015033 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表