Tomcat CVE-2024-50379 条件竞争漏洞 PoC

admin 2024年12月18日21:45:01评论94 views字数 2452阅读8分10秒阅读模式

https://lists.apache.org/thread/y6lj6q1xnp822g6ro70tn19sgtjmr80r

受影响版本:

Apache Tomcat 11.0.0-M1 to 11.0.1Apache Tomcat 10.1.0-M1 to 10.1.33Apache Tomcat 9.0.0.M1 to 9.0.97

该漏洞仅影响 Windows 环境

漏洞相关配置

web.xml 示例配置:

<!DOCTYPE web-appPUBLIC"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN""http://java.sun.com/dtd/web-app_2_3.dtd" ><web-app><display-name>Archetype Created Web Application</display-name><servlet><servlet-name>default</servlet-name><servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class><!-- 设置 readonly 为 false,允许资源被写入或修改 --><init-param><param-name>readonly</param-name><param-value>false</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>default</servlet-name><url-pattern>/</url-pattern></servlet-mapping></web-app>

漏洞利用流程

  1. 攻击者通过PUT 请求向服务器上传恶意 JSP 文件:

    • 例子文件:aa.Jsp 和bb.Jsp

    • 恶意 JSP 文件内容如下:

      PUT /tomcat-CVE-2024-50379/{{file:line(/Users/xxx/yakit-projects/temp/tmp1660464294.txt)}}.Jsp HTTP/1.1Host: 192.168.2.128:58093User-Agent: Mozilla/5.0
      Tomcat CVE-2024-50379 条件竞争漏洞 PoC
  2. 并发访问上传的 JSP 文件:

    • 利用条件竞争,攻击者通过GET 请求并发访问目标 JSP 文件,例如访问aa.jsp

    • 请求示例:

      GET /tomcat-CVE-2024-50379/aa.jsp HTTP/1.1Host: 192.168.2.128:58093User-Agent: Mozilla/5.0
      Tomcat CVE-2024-50379 条件竞争漏洞 PoC
  3. Tomcat 的编译与加载过程出现 Race Condition:

    • JSP 文件被写入时触发编译。
    • 在文件被完全编译成.class 文件并删除前的时间窗口内,某些访问可能会跳过完整检查,触发恶意代码执行。
    • 在 Windows 系统中,由于文件名不区分大小写(aa.Jsp 与aa.jsp被视为同一个文件),当文件写入和访问同时发生时,会导致:
    • 1. JSP 文件被写入时触发编译
    • 2. 在文件被完全编译成.class 文件并删除前的时间窗口内,某些访问可能会跳过完整检查,触发恶意代码执行。

漏洞复现细节

  1. 示例攻击行为

    • 通过并发PUT上传和GET请求访问,可能在以下情况下出现 500 错误:

      HTTP Status 500 – Internal Server ErrorMessage java.lang.ClassNotFoundException: org.apache.jsp.aa_jsp
    • 错误原因是 Tomcat 在编译 JSP 文件的过程中,因条件竞争未能正确加载类文件。

  2. 关键影响

    • 在恶意 JSP 文件成功加载的情况下,可执行任意代码(如Runtime.getRuntime().exec("calc"))。 
      Tomcat CVE-2024-50379 条件竞争漏洞 PoC

漏洞为何仅影响 Windows 环境?

  1. 文件系统对大小写的敏感性
    • Windows 使用的 NTFS 文件系统对文件名不区分大小写,aa.jsp 和aa.Jsp 被视为同一个文件。
    • 在 Linux 和 macOS 上,文件系统(如 ext4、APFS)对文件名大小写敏感,aa.jsp 和aa.Jsp 被视为两个不同的文件,不会触发条件竞争。
  2. Tomcat 编译机制与文件路径一致性
    • Tomcat 的 Jasper 引擎会根据文件路径生成类名(如org.apache.jsp.aa_jsp)。在大小写不敏感的环境中,不一致的文件名可能绕过检查。
    • 例如,aa.Jsp 编译生成的.class 文件被视为aa_jsp 类,但在请求路径中访问aa.jsp 会导致类加载失败(ClassNotFoundException)。
  3. 条件竞争的时间窗口
    • 在并发条件下,Windows 不区分文件大小写的特性加剧了竞争,导致 JSP 文件被部分写入或删除时仍然被访问。

缓解措施

  1. 禁用文件写入功能

    • 禁止通过 HTTP PUT 请求上传文件,确保readonly=true

      <init-param><param-name>readonly</param-name><param-value>true</param-value></init-param>
  2. 启用大小写敏感检查

    • 确保DefaultServlet的配置未禁用大小写敏感性:

      <init-param><param-name>caseSensitive</param-name><param-value>true</param-value></init-param>

      注:此方案并不能缓解PUT写入文件

  3. 升级 Tomcat

    • 检查并应用 Tomcat 的安全补丁,确保使用最新版本。
  4. 调整文件系统设置(可选)

    注:此方案并不能缓解PUT写入文件

    • 在 Windows 上启用文件系统的大小写敏感特性(如通过修改 NTFS 配置),避免文件名冲突。

原文始发于微信公众号(薛定谔的安全):Tomcat CVE-2024-50379 条件竞争漏洞

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年12月18日21:45:01
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Tomcat CVE-2024-50379 条件竞争漏洞 PoChttps://cn-sec.com/archives/3524277.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息