星巡研究院
CVE-2021-44228critical

Log4j2 JNDI 注入(Log4Shell)

Log4j2 在 2.14.1 及以前版本会解析日志内容中的 JNDI 查找语法,攻击者可通过任意被记录的外部输入触发远程对象加载。

# CVE-2021-44228 · Log4j2 JNDI 注入 ## 基本信息 - 编号:CVE-2021-44228(别名 Log4Shell) - 组件:Apache Log4j2 - 影响版本:2.0-beta9 至 2.14.1 - 修复版本:2.15.0 起,建议直接升到 2.17.1 或更高 - 严重度:critical ## 问题成因 Log4j2 支持在日志文本里写查找语法,形如 `${jndi:ldap://主机/对象}`。2.14.1 及以前版本会真正解析并加载 JNDI 指向的远程对象。只要日志里出现攻击者可控的字符串,就可能被触发。 ## 触发面有多大 任何把外部输入写进日志的位置都是入口:请求头、用户名、搜索词、接口参数、消息内容。所以它不是"某一个接口"的问题,而是"所有记录了该字段的日志"都可能是入口——排查时要按字段维度过一遍,而不是只测几个接口。 ## 修复与缓解 1. 升级 Log4j2 到 2.17.1 或更高,并确认依赖树里没有传递引入的旧版本 2. 无法立即升级时,按官方指引从 jar 中移除 JndiLookup 类 3. 出网限制:禁止应用服务器主动访问外网 LDAP / RMI,这是最有效的兜底 4. 全量梳理依赖:直接依赖升了,传递依赖里的旧版照样会被利用 ## 常见坑 - 只升了直接依赖,漏掉传递依赖中的旧版 log4j-core - 检测规则只匹配 jndi 字面量,被混淆写法绕过 - 修复后没有清理历史日志,重放旧日志仍可能触发 ## 怎么验证修好了 在测试环境构造一条含查找语法的日志输入,确认不再产生外部连接(可用出网代理或抓包观察)。
#log4j#jndi#rce#java