急速响应,莫慌! 当你在项目中搜到
log4j-core
相关的 Jar 包时,说明你可能暴露在严重的远程代码执行(RCE)风险下。请务必按照以下步骤,立刻检测 → 迅速修复 → 验证解危。
2.0-β9
至 2.14.1
全部版本${jndi:ldap://…}
)Log4j2 的 JNDI 机制会递归解析用户可控的日志消息,一旦嵌入恶意
jndi:
URL 即可触发任意代码加载执行。
# 待检测目录一般为项目根目录
grep -RIn --include="*.jar" "log4j-core" .
或更精准地:
find . -type f -name "log4j-core-*.jar"
示例
./lib/log4j-core-2.14.1.jar
./services/user-service/target/dependency/log4j-core-2.13.3.jar
# 针对每个上面找到的 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
旧版本范围 | 推荐升级版本 |
---|---|
2.0-β9 – 2.14.1 | 2.17.1 或以上 |
Maven:
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.17.1</version>
</dependency>
Gradle:
implementation 'org.apache.logging.log4j:log4j-core:2.17.1'
升级后,重新编译、打包并部署。
移除 JndiLookup 类
zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class
禁用消息查找(仅对 ≥2.10 版本有效)
# 环境变量
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 | 下载官方最新版,或应用官方补丁 |
扫描镜像中的 Jar
docker run --rm -v /your/project:/app -w /app busybox \
sh -c 'find . -name "log4j-core-*.jar"'
CI/CD 中加入检测
使用 Log4Shell Detector
等工具
在 Jenkins/GitLab CI 中执行:
log4shell-detector.sh --scan-dir /path/to/libs
JndiLookup.class
。${jndi:ldap://127.0.0.1:1389/a}
,确认日志中不再触发 JNDI 解析。PatternLayout
、StringSubstitutor
等位置,确保不再使用 ${jndi:…}
。只有及时检测、迅速升级,才能让 Log4Shell 无机可乘。祝你的项目远离 RCE,平安跨年! —— 安全工程师,与你同在