CVE-2021-44228: Apache Log4j2 远程代码执行漏洞分析
报告编号:B6-2021-121301
报告来源:360CERT
报告作者:360CERT
更新日期:2021-12-13
2021年12月09日,360CERT监测发现Apache Log4j 2
存在JNDI远程代码执行,漏洞等级:严重
,漏洞评分:10.0
。
Apache Log4j 2是一个开源的日志记录组件,使用非常的广泛,使用情况参考:
https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core/usages
对此,360CERT建议广大用户尽快将·Apache Log4j 2进行升级,以免遭受黑客攻击。
基本信息 | 详情 |
---|---|
相关组件 | Apache Log4j2 |
CVE编号 | CVE-2021-44228 |
漏洞类型 | 远程代码执行 |
漏洞评分 | 10.0 |
风险等级 | 等级 |
---|---|
威胁等级 | 严重 |
影响范围 | 广泛 |
攻击者价值 | 极高 |
利用难度 | 极低 |
利用状态 | 最新情况 |
---|---|
PoC/EXP | 已公开 |
在野利用 | 已存在 |
漏洞细节 | 已公开 |
安全补丁 | 已发布 |
2.14.0
log4j2 对error msg
的处理在MessagePatternConverter#format
在方法内,noLookups
默认false
,于是进入if判断。
if (this.config != null && !this.noLookups) {
for(int i = offset; i < workingBuilder.length() - 1; ++i) {
if (workingBuilder.charAt(i) == '$' && workingBuilder.charAt(i + 1) == '{') {
String value = workingBuilder.substring(offset, workingBuilder.length());
workingBuilder.setLength(offset);
workingBuilder.append(this.config.getStrSubstitutor().replace(event, value));
}
}
}
workBuilder
是log
前缀加上msg
。
这里会进行匹配,如果匹配到了${
的字符,value
是从前缀之后的部分开始,接着调用StrSubstitutor#replace
一直跟到StrSubstitutor#substitute
,
获取prefix($,{
)和suffix(}
)的匹配。
该方法会进行递归调用,提取${}
之间的value
进行解析(这也是网上的一些嵌套其他协议绕过的点)。
然后调用StrSubstitutor#resolveVariable
。
在Interpolator#lookup
里对协议进行匹配,然后调用对应的lookup
方法,这里还会对协议进行toLowerCase
调用(也就存在一些特殊字符对waf
的绕过)。
部分调用栈如下:
为何只能error/fotal触发
想要触发后续流程,需要调logMessage
方法,需要isEnable
为true
,跟进,发现会对level
进行判断,info
的level
是400
,只要小于等于200
,才会返回true
。
小于等于200
的只有100/200
。
static {
OFF = new Level("OFF", StandardLevel.OFF.intLevel());
//100
FATAL = new Level("FATAL", StandardLevel.FATAL.intLevel());
//200
ERROR = new Level("ERROR", StandardLevel.ERROR.intLevel());
//300
WARN = new Level("WARN", StandardLevel.WARN.intLevel());
//400
INFO = new Level("INFO", StandardLevel.INFO.intLevel());
//500
DEBUG = new Level("DEBUG", StandardLevel.DEBUG.intLevel());
//600
TRACE = new Level("TRACE", StandardLevel.TRACE.intLevel());
//2147483647
ALL = new Level("ALL", StandardLevel.ALL.intLevel());
}
2.15.0-rc1
在遍历formatter
的时候,由之前的MessagePatternConverter
变为MessagePatternConverter$SimpleMessagePatternConverter
。
MessagePatternConverter$SimpleMessagePatternConverter
不存在危险操作,而另一个类存在lookup
的是MessagePatternConverter$LookupMessagePatternConverter
。
看下初始化Converter
的逻辑:
想要拿到LookupMessagePatternConverter
,必须要lookups
为true
,而默认情况下是false
,跟一下loadLookups
,需要设置options
。
手动设置options
之后,一路跟到JndiManager
。
在lookup
内部执行了几个方法,会对协议内容进行检测,allowedProtocols
检测协议,allowedHosts
对ldap
请求的host
进行了检测,只允许请求本地ip
,所以,看似这里已经对ldap
做了检测,但是注意catch
错误的时候,并没有return
,所以可以利用抛出错误进行绕过。
具体绕过方式可以直接参考官方示例。
2.15.0-rc2
catch
错误之后,return null
,也就走不到lookup
方法里了。
LOG4J2-3208
github
上发布了最新的commit
:
https://github.com/apache/logging-log4j2/commit/44569090f1cf1e92c711fb96dfd18cd7dccc72ea
https://github.com/apache/logging-log4j2/commit/44569090f1cf1e92c711fb96dfd18cd7dccc72ea
而本次commit
的关键代码是:
isIsJndiEnabled
默认返回false
,即默认情况下,禁用了jndi
协议的使用。
若想了解更多产品信息或有相关业务需求,可移步至http://360.net。
360安全卫士
Windows用户可通过360安全卫士实现对应补丁安装、漏洞修复、恶意软件查杀,其他平台的用户可以根据修复建议列表中的安全建议进行安全维护。
360CERT建议广大用户使用360安全卫士定期对设备进行安全检测,以做好资产自查以及防护工作。
360安全卫士团队版
用户可以通过安装360安全卫士并进行全盘杀毒来维护计算机安全。360CERT建议广大用户使用360安全卫士定期对设备进行安全检测,以做好资产自查以及防护工作。
360本地安全大脑
360本地安全大脑是将360云端安全大脑核心能力本地化部署的一套开放式全场景安全运营平台,实现安全态势、监控、分析、溯源、研判、响应、管理的智能化安全运营赋能。360本地安全大脑已支持对相关漏洞利用的检测,请及时更新网络神经元(探针)规则和本地安全大脑关联分析规则,做好防护。
360终端安全管理系统
360终端安全管理系统软件是在360安全大脑极智赋能下,以大数据、云计算等新技术为支撑,以可靠服务为保障,集防病毒与终端安全管控功能于一体的企业级安全产品。
360终端安全管理系统已支持对相关漏洞进行检测和修复,建议用户及时更新漏洞库并安装更新相关补丁。
2021-12-10 360CERT发布预警通告
2021-12-13 360CERT发布分析
1、 Apache Log4j 2 远程代码执行漏洞通告
https://cert.360.cn/warning/detail?id=d5dd5bbdfbb3d58c3a633e4e105e22bb
2.https://github.com/apache/logging-log4j2/commit/bac0d8a35c7e354a0d3f706569116dff6c6bd658
一直以来,360CERT对全球重要网络安全事件进行快速通报、应急响应。为更好地为政企用户提供最新漏洞以及信息安全事件的安全通告服务,现360CERT推出了安全通告特制版报告订阅服务,以便用户做资料留存、传阅研究与查询验证。
今后特制报告将不再提供公开下载,用户可扫描下方二维码进行服务订阅。
https://cert.360.cn/
进入官网查看更多资讯