首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Apache Log4j2 漏洞(CVE-2021-44228)全流程检测与快速修复指南

Apache Log4j2 漏洞(CVE-2021-44228)全流程检测与快速修复指南

作者头像
猫头虎
发布2025-07-24 08:40:11
发布2025-07-24 08:40:11
47600
代码可运行
举报
运行总次数:0
代码可运行

Apache Log4j2 漏洞(CVE-2021-44228)全流程检测与快速修复指南

急速响应,莫慌! 当你在项目中搜到 log4j-core 相关的 Jar 包时,说明你可能暴露在严重的远程代码执行(RCE)风险下。请务必按照以下步骤,立刻检测迅速修复验证解危

Log4Shell 漏洞示意图
Log4Shell 漏洞示意图

一、背景概述

  • 漏洞名称:Log4Shell
  • CVE 编号:CVE-2021-44228
  • 披露时间:2021-12-09
  • 影响范围:Log4j2 2.0-β92.14.1 全部版本
  • 危害级别高危,已被大量蠕虫化、勒索挖矿武器化
  • 利用条件:默认开启的 JNDI lookup 功能(${jndi:ldap://…}

Log4j2 的 JNDI 机制会递归解析用户可控的日志消息,一旦嵌入恶意 jndi: URL 即可触发任意代码加载执行。


二、快速检测

1. 在项目源码/依赖中查找 Jar
代码语言:javascript
代码运行次数:0
运行
复制
# 待检测目录一般为项目根目录
grep -RIn --include="*.jar" "log4j-core" .

或更精准地:

代码语言:javascript
代码运行次数:0
运行
复制
find . -type f -name "log4j-core-*.jar"

示例

代码语言:javascript
代码运行次数:0
运行
复制
./lib/log4j-core-2.14.1.jar
./services/user-service/target/dependency/log4j-core-2.13.3.jar
2. 验证 Jar 是否包含 JndiLookup
代码语言:javascript
代码运行次数:0
运行
复制
# 针对每个上面找到的 Jar
for J in $(find . -type f -name "log4j-core-*.jar"); do
  echo "Checking $J ..."
  if jar tf "$J" | grep -q "org/apache/logging/log4j/core/lookup/JndiLookup.class"; then
    echo "  👉 漏洞存在:$J 包含 JndiLookup"
  else
    echo "  ✅ 安全:$J 不含 JndiLookup"
  fi
done

三、官方推荐修复方案

1. 升级到安全版本

旧版本范围

推荐升级版本

2.0-β9 – 2.14.1

2.17.1 或以上

Maven

代码语言:javascript
代码运行次数:0
运行
复制
<dependency>
  <groupId>org.apache.logging.log4j</groupId>
  <artifactId>log4j-core</artifactId>
  <version>2.17.1</version>
</dependency>

Gradle

代码语言:javascript
代码运行次数:0
运行
复制
implementation 'org.apache.logging.log4j:log4j-core:2.17.1'

升级后,重新编译、打包并部署。

2. 临时缓解(不推荐长期依赖)

移除 JndiLookup 类

代码语言:javascript
代码运行次数:0
运行
复制
zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class

禁用消息查找(仅对 ≥2.10 版本有效)

代码语言:javascript
代码运行次数:0
运行
复制
# 环境变量
export LOG4J_FORMAT_MSG_NO_LOOKUPS=true

# 或者在 JVM 启动参数中添加
-Dlog4j2.formatMsgNoLookups=true

⚠️ 注意:临时方案可能因后续版本变化而失效,务必尽快升级到官方补丁版。


四、修复受影响的常见组件

如果你使用了下列框架,请分别检查并升级它们内置的 Log4j2 版本:

组件/框架

解决办法

Spring Boot Starter Log4j2

在 pom.xml 中显式声明 log4j-core:2.17.1

Apache Struts2

升级至最新支持的 Struts2 版本

Apache Solr / Druid / Flink

下载官方最新版,或应用官方补丁


五、Docker 镜像与运行时扫描

扫描镜像中的 Jar

代码语言:javascript
代码运行次数:0
运行
复制
docker run --rm -v /your/project:/app -w /app busybox \
  sh -c 'find . -name "log4j-core-*.jar"'

CI/CD 中加入检测

使用 Log4Shell Detector 等工具

在 Jenkins/GitLab CI 中执行:

代码语言:javascript
代码运行次数:0
运行
复制
log4shell-detector.sh --scan-dir /path/to/libs

六、验证修复

  1. 重新检测 Jar,确保不再包含 JndiLookup.class
  2. 安全测试:模拟发送 ${jndi:ldap://127.0.0.1:1389/a},确认日志中不再触发 JNDI 解析。
  3. 代码审计:搜索使用 PatternLayoutStringSubstitutor 等位置,确保不再使用 ${jndi:…}

七、持续防御与最佳实践

  1. 依赖管理
    • 使用 Dependabot、Mend (原 WhiteSource) 等工具 自动检测漏洞依赖。
  2. 日志安全配置
    • 禁止在生产环境中记录 未经消毒 的用户输入。
  3. 加固 JDK
    • 升级 JDK 至最新补丁版本,可降低其他 JNDI 漏洞风险。
  4. 安全培训
    • 定期组织开发/运维团队学习 CVE 漏洞知识,养成“第一时间检查依赖”的习惯。

八、参考链接

只有及时检测、迅速升级,才能让 Log4Shell 无机可乘。祝你的项目远离 RCE,平安跨年! —— 安全工程师,与你同在

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-07-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Apache Log4j2 漏洞(CVE-2021-44228)全流程检测与快速修复指南
    • 一、背景概述
    • 二、快速检测
      • 1. 在项目源码/依赖中查找 Jar
      • 2. 验证 Jar 是否包含 JndiLookup
    • 三、官方推荐修复方案
      • 1. 升级到安全版本
      • 2. 临时缓解(不推荐长期依赖)
    • 四、修复受影响的常见组件
    • 五、Docker 镜像与运行时扫描
    • 六、验证修复
    • 七、持续防御与最佳实践
    • 八、参考链接
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档