原文链接:https://blog.mbie.me/posts/cve-2020-9478/
介绍
Rubrik CDM是一个基于企业备份管理Web应用程序的平台。该软件包括允许组织处理灾难恢复,合规性和复制数据管理的工具。有一项功能可以从以前保存和管理的备份中还原单个文件。在研究此功能与VmWare Tools的相互作用时,我们的S21sec团队发现了一种将OS命令注入文件恢复调用的方法。这是与Rubrik协调披露后的内容。
漏洞
CVE-2020-9478 – CVE-2020-9478-通过文件还原功能进行OS命令注入
CVSS: 8.8 (CVSS:3.0/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H)
公告: https://www.rubrik.com/en/advisories/rbk20200316s0012
文件还原功能
如前所述,Rubrik CDM的主要功能之一是备份管理。用户一旦登录平台,便可以与其权限所允许的备份进行交互。这些备份或快照一旦由平台进行管理,将被分类并为其文件建立索引。
现在,具有正确权限的用户将能够触发Y系统上X快照的还原。此外,用户还可以浏览快照中存在的文件并下载/还原单个文件,而不是整个快照。
假设我们要还原上周的/etc/passwd并将其放在Rubrik管理的虚拟机上的/tmp/上:

图1:文件还原功能
漏洞测试
发现此功能后,我们立即将注意力集中在尝试查找文件在实时系统中的放置方式,以期希望找到以sudo甚至命令注入形式写入的文件。我们加载了pspy(Linux进程监视器),以尝试收集足够的证据来对该功能的输入字段进行测试。
从最初的分析中,我们注意到发生了以下操作:
- 该应用程序的后端要求VMWare工具守护程序将压缩后的/etc/passwd放置在实时系统的/tmp/文件夹中;
- VMWare守护程序将压缩文件以及解压缩/etc/passwd并将其移动到/tmp/的脚本放置在临时文件夹中;
- VMWare运行上述脚本,然后依次尝试解压缩/etc/passwd并将其移至/tmp/。此文件恢复操作将导致VMWare工具守护程序在系统上执行以下bash命令:
bash -c "/usr/bin/sudo" -n bash -c "bash '/tmp/vmware-hostname_1180-4210953646/hostname_vmware234/restoreFromZip.sh' '/tmp;'"
restorefromzip.sh脚本的内容
destDir="$1"
tgzFile="files.tgz"
if [ -z "$destDir" ]; then
echo "No destDir given"
exit 1
fi
mkdir -p "$destDir" &&
tar -xpzf "$tgzFile" -C "$destDir" --numeric-owner || exit 1
发现文件还原功能的内部工作原理后,我们立即发现最好的做法是尝试在“还原位置”字段中插入命令,这显然很容易受到攻击。
但是,我们很快发现开发人员已经想到了此缺陷,并且先前已经实施了一些检查以检测一些可用于注入OS命令的字符。
以下字符未通过后端验证,并抛出了路径验证错误消息:"'; |。这意味着转义原始bash调用是不可能的(至少据我们所知)。
经过一番思考后,我想到了bash的shell扩展功能。对于那些可能不知道的人,shell扩展功能中有一项功能称为Command Substitution,它可以帮助我们克服给定的局限性。此功能使用户能够评估bash调用中的表达式,该调用将在原始调用本身之前执行。要使用此功能,用户必须将表达式放在花括号之间,并在前面加一个美元符号,例如:$(id)。
一个栗子:
➜ ~ cp $(find /etc/*.conf) /home/bie/confs
➜ ~ ls /home/bie/confs
adduser.conf deluser.conf hdparm.conf kernel-img.conf libaudit.conf
ca-certificates.conf fuse.conf host.conf ld.so.conf libc.conf
debconf.conf gai.conf insserv.conf.d ld.so.conf.d ...
如我们所见,在cp调用之前对find命令表达式进行了扩展和执行,打印了要复制的文件的路径。遵循Rubrik CDM中文件恢复功能的相同想法,并且看到后端允许使用命令替换特殊字符,我们尝试以以下形式注入OS命令:

图二:替换命令
结果
我们再次启动了pspy,很快发现注入已成功完成,并且id进程调用已成功执行!

图3:概念验证成功
这一概念证明意味着我们在Rubrik CDM管理的所有Linux系统中都成功获得了命令注入。我们立即联系了Rubrik,并要求进行协调披露。
##备注和时间表
在整个过程中,Rubrik的安全团队表现出负责任和透明的态势,迅速解决了该问题,并对协调的披露要求做出了快速响应。
- 2020年2月27日:我们联系了Rubrik,通知我们发现了漏洞,并希望协调披露;
- 2020年3月5日:Rubrik安全团队对漏洞进行了分类和验证;
- 2020年3月19日:Rubrik推出了该漏洞的补丁程序,并向客户发布了内部建议;
- 2020年4月10日:Rubrik公开发布了该通报。
本文迁移自知识星球“火线Zone”