log4j2 JNDI解析LDAP协议变量远程加载class存在漏洞(可被攻击执行任意代码)

log4j2 JNDI解析LDAP协议变量远程加载class存在漏洞(可被攻击执行任意代码)

💡 原文中文,约4200字,阅读约需10分钟。
📝

内容提要

2021年12月,Apache Log4j2被发现存在远程代码执行漏洞,阿里云建议用户升级至2.15.0版本以确保安全。该漏洞利用了Java的JNDI API,攻击者可通过LDAP服务加载恶意代码。用户需检查依赖版本以防范风险。

🔎

延伸解读

漏洞影响范围与版本确认

文章指出,受影响的Log4j2版本为2.x系列,且小于等于2.15-rc1。用户需检查项目依赖中是否包含log4j-core和log4j-api,并确认其版本。对于Spring Boot项目,可通过解压jar包查看lib目录下的jar版本;对于运行中的Java进程,可通过ps命令查看classpath中的jar包。若存在漏洞版本,则面临远程代码执行风险。

临时缓解措施与局限性

文章提到,在无法立即升级的情况下,可采取临时方案,如设置JVM参数-Dlog4j2.formatMsgNoLookups=true,或删除log4j-core jar包中的JndiLookup.class文件。但作者通过实验证明,在Windows JDK 1.8.0_212-b10环境下,攻击仍可成功复现,因此临时方案并非绝对安全,建议尽快升级到2.15.0版本。

漏洞复现与攻击原理

文章详细描述了复现攻击所需的四个步骤:准备恶意class文件、启动HTTP服务提供下载、启动LDAP服务指向HTTP服务、执行Log4j2日志记录触发漏洞。攻击者利用JNDI API通过LDAP协议远程加载恶意类,在类加载时执行任意代码。复现时需注意JDK版本,过高版本可能导致攻击失败,建议使用1.8.0_191以下版本。

升级建议与操作指南

阿里云建议用户升级至Log4j2 2.15.0版本。对于现场不便重新打包的情况,可直接替换目标容器lib目录下的jar包。文章提供了Maven依赖示例,将log4j-core和log4j-api版本改为2.15.0即可。升级后,JNDI远程加载class的行为将被阻止,从而修复漏洞。

❓

Q&A

Apache Log4j2的漏洞是什么?

Apache Log4j2存在远程代码执行漏洞,攻击者可以通过JNDI API利用LDAP服务加载恶意代码。

如何防范Log4j2的漏洞?

用户应升级Log4j2至2.15.0版本,并检查依赖版本以防范风险。

Log4j2的漏洞影响哪些版本?

漏洞影响的版本为2.x <= 2.15-rc1。

如何检查Log4j2的依赖版本?

可以通过查看CLASSPATH或使用命令解压jar包找到lib目录来检查依赖版本。

Log4j2的日志级别有哪些?

Log4j2的日志级别包括:All、Trace、Debug、Info、Warn、Error、Fatal。

如果无法升级Log4j2,应该怎么做?

如果现场不方便重新打包,可以直接替换目标容器lib下的jar包。

🏷️

标签

➡️

继续阅读