【CVE-2022-30333】UnRAR路径遍历漏洞

作者:Sec-Labs | 发布时间:

9499e2bdd9165419

 

Zimbra是一个企业级的电子邮件解决方案,被超过20万家企业、政府和金融机构使用。最近,Zimbra实例成为了一个0-day攻击活动的目标,该活动可能是由一个针对欧洲政府和媒体实例的国家行为者进行的。

一个0-day漏洞被用来窃取个人用户账户的电子邮件的事实表明,一个被攻击的电子邮件账户对攻击者来说是多么有价值,而且这种漏洞对一个组织的影响是多么的灾难性。机密文件可能被盗,密码可能被重置,组织成员可能被冒名顶替,从而危及更多账户。

在这篇博文中,我们介绍了我们的研究团队是如何以APT组织的视角来处理Zimbra的。结果,我们在unrar工具中发现了一个0day漏洞,这是一个用于Zimbra的第三方工具。该漏洞最终允许远程攻击者在一个有漏洞的Zimbra实例上执行任意代码,而不需要事先进行任何认证或了解它。

受影响的软件和版本

在本节中,我们将详细介绍 unrar 的哪些版本受到影响。虽然这篇博文重点介绍了Zimbra,以证明这个漏洞的影响,但任何依赖未打补丁的unrar版本来提取不受信任的档案的软件都会受到影响。

攻击者能做什么?

我们在开发WinRAR的RarLab公司开发的unrar二进制文件中发现了一个文件写入漏洞(CVE-2022-30333)。

当一个应用程序或受害者用户提取一个不受信任的档案时,攻击者能够在目标提取目录之外创建文件。如果他们能够写到一个已知的位置,他们很可能能够以一种导致在系统上执行任意命令的方式来利用它。

在Zimbra的案例中,成功的利用使攻击者能够访问被攻击的电子邮件服务器上发送和接收的每一封电子邮件。他们可以悄悄地后门登录功能,并窃取一个组织的用户的凭据。有了这个权限,他们就有可能升级到一个组织更敏感的内部服务。这种攻击的唯一要求是unrar安装在服务器上,这是预期的,因为它是RAR档案病毒扫描和垃圾邮件检查所需要的。

我是否受到影响?

RarLab的官方安全补丁包含在UnRar源代码6.1.7版本中,并包含在6.12版本的二进制文件中。任何以前的版本都可能存在漏洞。只有Unix的二进制文件(不包括Android)受到这个漏洞的影响。WinRAR是没有这个漏洞的。

脆弱的和已打过补丁的版本可能不同,这取决于你使用的Linux发行版和从哪个软件库下载的二进制文件。如果你想确保你使用的是包含安全补丁的版本,我们建议直接从RarLab的网站下载它。

unrar有多种流行的实现方式。只有依靠RarLab的代码的实现方式受到影响。

这与Zimbra有什么关系?

Zimbra对这个unrar漏洞没有过错,但由于与受影响的服务相关的广泛权限,其利用才成为可能。例如,未认证的攻击者可以将JSP shell写入Web目录,而这是一个不相关的服务。

如果安装了unrar,Zimbra实例就会受到影响,这是意料之中的,因为它是RAR档案的垃圾邮件检查和病毒扫描所需要的。由于unrar的调用方式,预计也会安装RarLab的实现,也就是易受攻击的那个。

技术细节

在下面的章节中,我们将详细介绍我们在发现unrar漏洞之前所审计的攻击面、其根本原因,以及未经认证的攻击者如何利用它来获得对Zimbra实例的代码执行。

背景 - 垃圾邮件检查和文件格式问题

由于Zimbra是一个一体化的解决方案,它带有用于发送和接收电子邮件的预先配置的软件。它还试图在收到电子邮件时检测垃圾邮件并扫描病毒。

下面的图形显示了当一个 Zimbra 实例收到电子邮件时涉及的一些软件。

c0a2a675ef165444

收到的电子邮件由Postfix通过SMTP(1)进行处理。然后,Postfix将电子邮件传递给Amavisd(2)。Amavis解析收到的电子邮件,递归地提取附件,如ZIP和RAR文件,然后将所有文件发送给Spam Checker Spamassassin和反病毒软件ClamAV(3)。如果电子邮件被认为是干净的,它就被传递给Zimbra的代码(4)。

所有这些第三方服务都支持对许多文件格式的解析和处理。要做到这一点,它们依赖于更多的外部软件组件。例如,当Amavis解析传入的电子邮件并检测到一个RAR归档文件作为附件时,它使用unrar工具将其提取到一个临时目录。

在下一节中,我们将分解一个路径穿越漏洞,当Amavisd提取一个恶意的RAR归档文件时,可能会触发这个漏洞。

CVE-2022-30333 - unrar中的文件写入漏洞

背景 - unrar的提取和安全假设

unrar在命令行上的典型调用可能看起来像下面这样。

unrar x archive.rar /tmp/extract

这个命令将提取archive.rar中的所有文件到/tmp/extract目录中。

调用该命令的应用程序或用户希望文件只被写入/tmp/extract目录。像Amavis这样的软件依赖于这一假设,以确保在处理完所有文件后可以安全地删除它们。这个安全网是由unrar实现的,默认情况下是启用的。

符号链接提取逻辑

unrar面临的一个挑战是,恶意制作的RAR档案可能包含符号链接。攻击者可以提取一个指向提取目录之外的符号链接,然后用第二个文件来解读它。

防止符号链接攻击原来是很复杂的,因为RAR档案可以在Windows和Unix上创建和提取,在文件系统路径处理方面有很大的不同。符号链接也可以是相对的和绝对的。下面是Unix和Windows文件系统的恶意符号链接的例子。

OS Relative Payload Absolute Payload
Windows ..\..\..\tmp\shell C:\tmp\shell
Unix ../../../tmp/shell /tmp/shell

为了防止Unix系统上的符号链接攻击,unrar通过检查第一个字符是否是正斜杠(/)来禁止任何绝对路径的符号链接。

验证相对符号链接是由IsRelativeSymLinkSafe()函数完成的,这里显示了它的一个片段。

extinfo.cpp

127     bool Dot2=TargetName[0]=='.' && TargetName[1]=='.' &&
128               (IsPathDiv(TargetName[2]) || TargetName[2]==0) &&
129               (Pos==0 || IsPathDiv(*(TargetName-1)));
130     if (Dot2)
131       // …

可以看出,这个函数检查符号链接目标是否包含两个点,后面有一个路径分隔符(Unix上的.../和Windows上的.../)。 当检测到路径穿越的尝试时,符号链接被认为是不安全的。

绕过符号链接的验证

我们提到检查符号链接是否包含路径遍历序列(.../)的工作。然而,这种检查被一种常见的漏洞模式所否定,即不受信任的数据在被验证后被修改。

一旦符号链接被验证,它就被unrar规范化了。我们以前提到过,RAR归档文件可能是在Windows或Unix系统上创建的,这些操作系统对文件路径的处理很有特点。

为了确保在Windows上创建的RAR归档文件可以在Unix系统上提取,反斜线(\)被转换成正斜线(/)。

下面的片段显示了当代表符号链接的RAR归档项的类型为FSREDIR_WINSYMLINK时,这是如何发生的,如果归档是在Windows系统上创建的。

ulinks.cpp

93   if (hd->RedirType==FSREDIR_WINSYMLINK || hd->RedirType==FSREDIR_JUNCTION)
 94   {
 95     // …
101     DosSlashToUnix(Target,Target,ASIZE(Target));
102   }

DosSlashToUnix()函数只是将所有反斜线转换为正斜线。攻击者可以利用这一行为,因为这一操作打破了之前验证步骤的假设。

让我们假设攻击者制作了一个RAR档案,其中包含一个FSREDIR_WINSYMLINK类型的符号链接,目标是...\...\tmp/shell。由于档案是在Unix系统上提取的,符号链接目标被认为是安全的,因为没有检测到./序列。

然而,由于DosSlashToUnix()的规范化,最终的符号链接目标是./././tmp/shell。通过利用这一行为,攻击者可以在目标文件系统的任何地方写一个文件。

和我们的研究一样,我们选择不发布任何开发代码。我们可以在我们的内部研究实例上成功地利用这些错误,并且相信威胁者将能够复制它,如果他们还没有这样做的话。我们强烈建议升级你的系统,使用最新版本的unrar。

 

在Zimbra中的利用

如前所述,当收到带有RAR归档附件的电子邮件时,它会被Amavis通过unrar自动提取以供分析。在Zimbra中,大多数服务,包括Amavis服务器,都以zimbra用户的身份运行。

因此,文件写入基元允许在其他服务的工作目录中创建和覆盖文件。攻击者可以通过各种手段实现RCE影响。例如,我们提到,攻击者可以将JSP shell写入一个Web目录中。幸运的是,大多数Zimbra实例的服务分布在多个服务器上,因此在大多数安装中不可能有这种利用路径。然而,我们已经报告了多种不同的利用路径,这些路径在分布式安装中是可行的。出于这个原因,我们建议立即升级unrar,即使你的Web服务器和邮件服务器不在同一台物理机器上。

利用后获得root权限

当攻击者成功地利用了Zimbra实例上的unrar漏洞后,他们可以以zimbra用户的身份执行任意的系统命令。在写这篇文章的时候,存在一个公开的从zimbra到root的特权升级,同时还有利用代码。该漏洞是由Darren Martyn发现的。

补丁

RarLab通过确保验证的路径与创建符号链接时所用的路径相同来修补这个问题。这个补丁包含在6.12的二进制版本中,可以从RarLab的网站下载。我们敦促任何人确保他们使用的是有补丁的unrar版本。如果管理员喜欢通过软件包管理器来安装unrar,他们应该检查他们的软件库是否包含补丁版本,因为版本可能因他们使用的Linux发行版而不同。

我们把这个错误通知了Zimbra,这样他们就可以向他们的用户发出警告并给他们的云实例打上补丁。我们还提到,大多数服务以zimbra用户的身份运行,这使得利用这个问题成为可能。在写这篇文章的时候,没有任何官方补丁可供Zimbra用户用来强化实例的权限。

 

摘要

在这篇博文中,我们分析了CVE-2022-30333的技术细节,即unrar中的一个路径遍历漏洞。我们演示了这个漏洞是如何导致Zimbra上的预认证RCE,以及这类漏洞是如何被详细利用的。

这个漏洞遵循一个常见的漏洞模式,即在用户输入被验证后对其进行修改,导致绕过安全检查。我们以前曾就这个话题发表过演讲,你可以在这里观看。

我们要感谢RarLab的开发者对这个问题的快速和专业处理。

我们也要感谢Zimbra的安全团队认真对待这个问题,并警告他们的客户以帮助防止利用。

原文链接

https://blog.sonarsource.com/zimbra-pre-auth-rce-via-unrar-0day/

标签:0day漏洞, 漏洞分享