-
-
[翻译]补丁差异分析进展:MOVEIt Transfer RCE(CVE-2023-34362)
-
发表于: 2023-6-30 18:06 8521
-
原文标题:Patch Diffing Progress MOVEIt Transfer RCE (CVE-2023-34362)
原文地址:https://blog.assetnote.io/2023/06/07/moveit-transfer-patch-diff-adventure/
翻译:梦幻的彼岸
在过去的几天里,攻击者一直在利用Progress MOVEIt Transfer中的一个关键的预认证漏洞。有几篇很好的博客文章,涵盖了事件响应、取证和检测工程的努力,当它涉及到防止妥协时。[1] [2] [3].
Assetnote成功地确定了这个漏洞的完整利用链,包括SQL注入和远程代码执行攻击载体。这个漏洞链已经被我们的安全研究团队复现,并在所有客户上进行了检查。当关键漏洞在野外被利用时,我们的团队努力工作,对利用的有效载荷进行逆向工程,并通过我们的攻击面管理平台向客户提供确切答案,以保证客户是否真的存在漏洞。
你可以在下面观看我们的RCE概念验证视频:
这篇博文将详细介绍如何建立一个环境来逆向工程这个问题。稍后,我们将披露概念证明和重现该漏洞的步骤。
鉴于该漏洞仍在被积极利用,在公开的概念证明可用之前,或30天后,在组织有时间修补他们的实例或从外部互联网上删除它们之后,将不会公布概念证明。
当逆向工程补丁时,第一步是确认你能够下载并安装两个相邻的软件版本(未打补丁和已打补丁),以便我们能够进行补丁差异。对于很多研究人员来说,这往往是他们在进入这个过程中最重要的部分之前的障碍。
我们能够通过首先注册Progress MOVEIt Transfer的试用版来实现这一目标,并立即获得一个序列密钥和该软件的最新版本(2023.0.1)的下载。这是一个好的开始,但我们如何获得未打补丁的版本呢?
在谷歌上做了一些搜索,我们看到了这个链接https://cdn.ipswitch.com/ft/MOVEit/Transfer/2022/2022.1.1/MOVEit-Transfer-2022.1.1-FullInstall.exe。我们知道2023.0.0有漏洞,经过一番周折,我们能够通过以下网址下载这个版本--https://cdn.ipswitch.com/ft/MOVEit/Transfer/2023/2023.0/MOVEit-Transfer-2023.0.0-FullInstall.exe。
安装这个软件有一些挑战。我们需要一个有效的序列密钥来安装该软件,幸运的是我们通过申请免费试用获得了这个密钥。然而,为了将该序列号用于旧版本,我们必须通过 "离线激活 "的步骤,该步骤会生成一个许可证.txt,你可以将其反馈给安装程序。
在安装了两个版本的软件后,我们压缩了每个版本的C:\MOVEitTransfer\,并通过DiffMerge运行它,看看有什么变化。我们不得不将.dll文件从DiffMerge的设置中的排除列表中删除,以便我们能够准确地确定哪些文件需要仔细检查。
我们知道这个漏洞的利用日志包括对MOVEitISAPI.dll的请求,但这不是我们可以用ILSpy反编译的东西。它是一个本地二进制文件,我们必须使用Ghidra进行逆向工程。在这之前,我们决定把重点放在可以反编译的东西上,看看是否有任何关于这个漏洞如何被利用的线索。
看一下wwwroot/bin文件夹内的DLL文件,我们可以看到有许多文件已经改变了。下一步是使用 ILSpy 反编译这些DLL文件,并使用DiffMerge再次比较源代码。
在对这些文件进行反编译,并用DiffMerge比较已打过补丁和未打过补丁的版本后,我们注意到这段特定的代码已经从已打过补丁的版本中删除了:
看到这里,我们很快就意识到了这段代码的影响,它允许你根据请求的头信息任意设置会话变量。这似乎是发现该漏洞根源的一个真正的线索。
我们花了一些时间追踪代码,了解这个函数首先是如何被调用的。我们的调查使我们找到了 machine2.aspx,它似乎只能通过内部网络调用。看了Huntress Labs的文章,并在Twitter上与wvu交谈,我们意识到machine2.aspx被调用的方式是通过位于MOVEitISAPI.dll?action=m2的SSRF。
为了进一步研究这个问题,我们需要安装该软件并建立一个动态调试环境。这很简单,因为MOVEit Transfer的安装程序开箱即用,不需要太多调试。安装了软件,以及默认的MySQL数据库。记住要保存你在本地设置的所有凭证。
确认你可以登录到本地主机上的MOVEit Transfer网络应用程序,一旦完成,下载一份Jetbrains Rider,以便建立一个调试环境。在进行动态调试时,我们更喜欢使用Rider,因为它能自动附着在运行网络应用程序的进程上,并动态地反编译所有加载的程序集。
你可以通过在启动Rider时点击 “Attach to Process(附加到进程)”按钮,并选择运行moveitdmz应用程序的W3WP进程来实现:
附加到进程后,在左边你会看到所有的程序集被Rider神奇地反编译了。你可以选择你感兴趣的程序集,在我们的例子中,midmz
-> MOVEit.DMZ.WebApp
-> SILMachine2
-> 在Machine2Main函数中设置一个中断点:
在这一点上,我们能够调试应用程序,并确认我们能够
通过位于 MOVEitISAPI.dll?action=m2
的SSRF命中machine2.aspx
虽然还有几个必要的利用步骤,但我们计划在企业有时间修补后再发布这些细节。
我们将在30天后更新这篇博文,提供漏洞链的全部细节。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
赞赏
- [原创]物联网安全:基础篇 4121
- 威胁情报小课堂:阻止活跃勒索软件的感染 2177
- [翻译]发现利用 Facebook 和 MS 管理控制台实施的 Kimsuky APT 攻击 7060
- 威胁情报小课堂:LockBit Black 2053
- 威胁情报小课堂:Nitrogen 2079