2021年12月9日,互联网上曝出了 Apache Log4j2 中的远程代码执行漏洞。
一 漏洞分析
01 组件介绍
Apache Log4j2是一款Java日志框架,是Log4j 的升级版。可以控制每一条日志的输出格式。通过定义每一条日志信息的级别,能够更加细致地控制日志的生成过程。
02 漏洞描述
该漏洞是由于Apache Log4j2某些功能存在递归解析功能,攻击者可利用该漏洞在未授权的情况下,构造恶意数据进行远程代码执行攻击,最终获取服务器最高权限。
二 影响范围
用户认证:不需要用户认证
触发方式:远程
配置方式:默认
利用条件:需要外网访问权限
影响版本:2.0 ≤ Apache Log4j2 < 2.15.0-rc2
利用难度:极低,无需授权即可远程代码执行
威胁等级:严重,能造成远程代码执行
综合评估漏洞利用难度极低,利用要求较少,影响范围很大,危害极其严重,且已经被黑客公开利用持续全网扫描,根据部里要求,需要紧急修复。
建议受影响用户尽快升级到安全版本应尽快升级Apache Log4j-2 至2.15.0-rc2版本,官方安全版本下载可以参考以下链接:
https://github.com/apache/logging-log4j2/releases/tag/log4j-2.15.0-rc2
建议对Apache Struts2/Apache Solr/Apache Flink/Apache Druid 等已知受影响的应用及组件进行升级
若由于其他原因,暂时无法升级到最新版本的用户可根据以下方法缓解(任选一种):
1、jvm参数 -Dlog4j2.formatMsgNoLookups=true
2、log4j2.formatMsgNoLookups=True
3、系统环境变量 FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS 设置为true
该漏洞理论上来讲是log4j2本身的正常功能,只是该功能被恶意利用。关键点从MessagePatternConverter.format方法开始,首先该方法会判断输入的字符串中是否包含"${" | ||
![]() |
如果存在则会进入判断中,调用config.getStrSubstitutor().replace(event, value),问题config.getStrSubstitutor().replace(event, value),config.getStrSubstitutor()执行完成后返回一个StrSubstitutor对象,紧接着调用StrSubstitutor.replace方法,然后在该方法中又调用了substitute方法。
该漏洞会将"${}"中的内容当作表达式,从而进行远程加载,在这里log4j2的本意应该是将ldap服务器上该地址中所记录的东西加载到本地,来进行一个字符串替换。具体的调用栈如下:
qy88国际官网老虎机一直致力于为客户提供优质的网络安全优化解决方案,公司自主研发的“NVS 漏洞扫描系统”在web漏洞扫描、弱密码扫描、木马威胁等专项检测、防御方面表现优秀。qy88国际官网老虎机有能力在当下及未来帮助客户抵御类似“Apache Log4j2 远程代码执行漏洞”的突袭。
温馨提醒:已购买公司系统的广大客户可通过系统菜单“系统配置-版本升级-升级管理”进行漏洞库等其他规则库的版本升级。
END