吃瓜之高危Apache Log4j 远程代码执行漏洞分析

本文介绍了Apache Log4j2.x版本的一个严重远程代码执行漏洞,详细解析了漏洞原理和利用方式。当Log4j的日志输出格式包含特定JNDI表达式时,可能导致黑客执行任意代码。解决方法包括升级到2.15.0-rc2版本,设置相关系统和JVM参数,以及禁用lookups功能。对于无法立即升级的情况,可通过修改参数缓解风险。高版本JDK可能提供一定防护。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

吃瓜之高危Apache Log4j 远程代码执行漏洞分析


前言

就在昨天,运维转发一条关于Apache Log4j 远程代码执行漏洞的公告,抱着吃瓜的心态,模拟复现了一波。

漏洞分析

根据公告内容,此次针对的是Apache Log4j 2.x < 2.15.0-rc2版本。公告指出,当我们以这种格式进行日志输出的时候,存在着被黑客攻击的风险。
在这里插入图片描述
如,当传入的name参数形如以下格式的时, Log4j 可以去执行这个地址对应的服务。

${jndi:rmi://127.0.0.1:7777/HelloService1}

在这里插入图片描述
利用这个漏洞,黑客可以在被攻击者的服务器上执行黑客自己的服务,从而达到攻击的目的。

原理

能实现如上的操作,首先得感谢log4j提供的 lookups功能。它允许通过 JNDI 的方式去检索变量,而 JNDI 又可以支持远程服务调用,间接造成了该漏洞。

关于JNDI,可以看看早些年写的一篇文章:JNDI

解决方式

  • 升级版本至 2.15.0-rc2
  • 修改jvm参数 -Dlog4j2.formatMsgNoLookups=true
  • 修改配置log4j2.formatMsgNoLookups=True
  • 将系统环境变量 FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS 设置为 true

关于升级版本,有时可能一时半会不好下手,特别时那种间接依赖 Log4j的情况,譬如依赖某个服务Jar包,该服务包再去依赖 Log4j。可以通过修改参数缓解。

另外,笔者在测试的时候,高版本的JDK似乎也能防止这种情况出现,譬如JDK 8u271版本,在复现时,则是安全的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

legendaryhaha

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值