目录导航
几个月前,在扫描我们一个客户的外部攻击面时,我们的自主渗透测试产品 NodeZero 发现了一个暴露在 Internet 上的名为 ResourceSpace 的应用程序实例。 ResourceSpace 是一种数字资产管理工具,使用户能够组织他们的数字资产。我们认为有趣的是,自 2015 年以来没有公开披露该产品的漏洞。因此我们决定拉下最新的 源代码 来仔细研究一下。
在我们对 ResourceSpace 代码库的评估过程中,我们发现了三个可能被未经身份验证的攻击者利用的新漏洞。
最关键的是CVE-2021-41765,这是一种预身份验证 SQL 注入,攻击者可以滥用它来获取 ResourceSpace 服务器上的远程代码执行 (RCE) 权限。
确定的另外两个漏洞是CVE-2021-41950(一种可用于删除文件系统上的任意文件的路径遍历漏洞)和CVE-2021-41951(一种反射跨站点脚本(XSS)漏洞)。供应商 Montala Limited 迅速修补了所有三个漏洞。
CVE-2021-41765:未经身份验证的 SQLi 到 RCE
ResourceSpace 是一个老一代的 PHP 应用程序,其中许多用于输入清理的核心函数和库都是从头开始构建的。SQL查询使用的是内置字符串连接,并防止SQL注入,像某些功能escape_check
和 getvalescaped
在整个代码库来净化输入变量广泛使用。它要求开发人员遵守纪律以始终如一地应用这些清理功能。
ResourceSpace 9.5 于 2021 年 3 月发布,作为该版本的一部分宣布的新功能之一是“外部上传共享”。此功能使没有 ResourceSpace 帐户的用户可以将内容上传到 ResourceSpace。为了实现此功能,对身份验证和授权逻辑进行了更改。这些变化无意中引入了这个漏洞,特别是我们发现了一个输入参数没有被清理的例子。这是k
文件中的 参数 pages/edit_fields/9_ajax/add_keyword.php
:

参数k
表示外部共享的授权密钥,其值传递给 中的 check_access_key_collection
函数 include/user_functions.php
。与 k
一起,外部共享的标识符 upload_collection
也被传递到 check_access_key_collection
函数中。经过进一步检查,结果证明 的值 upload_collection
可以从名为 的 cookie 传入 upload_share_active
,并且即使 ResourceSpace 管理员没有设置外部共享,值 1 也始终可以用于此共享。
该函数check_access_key_collection
将 k
的值作为 $key
变量直接发送给SQL查询,导致SQL注入漏洞。

我们曾经 sqlmap
在本地测试环境中确认 SQL 注入。 sqlmap
确认注入是基于布尔值的盲 SQL 注入。

从 SQLi 到管理员访问
未经身份验证的 SQL 注入允许攻击者转储 ResourceSpace 数据库的全部内容。我们发现这些数据包括用户的会话cookie,这些cookie存储在 表的 session
列中 user
。如果管理员的会话 cookie 在数据库中,攻击者可以滥用 SQL 注入以管理员用户身份访问。
使用 sqlmap
转储所有的用户名,密码hash和会话Cookie:

捕获会话 cookie 后,我们就可以在 Web 浏览器中设置窃取的会话 cookie 以访问 ResourceSpace 主页:

从管理员访问到 RCE
管理员对 Web 应用程序的访问导致在底层服务器上获得远程代码执行权限是很常见的。我们在之前的几篇文章中描述了这种现象:
在 ResourceSpace 的案例中,我们发现管理员可以将包含任意 PHP 文件的插件上传到服务器,然后执行这些 PHP 文件。

此处描述了创建插件的过程 。插件是tar.gz
重命名为具有.rsp
扩展名的 文件 。我们放入了一个基本的 webshell 作为插件存档文件的一部分:
<?php if(isset($_REQUEST['cmd'])){ echo "<pre>"; $cmd = ($_REQUEST['cmd']); system($cmd); echo "</pre>"; die; }?>%
然后将其上传到服务器并访问它以转储/etc/passwd
文件的内容 :

CVE-2021-41950:导致任意文件删除的路径遍历
CVE-2021-41950 是 pages/ajax/tiles.php
. 易受攻击的代码在这里:

在 provider
和 variant
参数是unsanitized,它们被用于构建一个目录路径 $tilecache
。如果此目录路径中已存在文件,则将其删除。因此,未经 身份验证的攻击者可以操纵 provider
和 variant
参数以 Web 服务器用户的身份任意删除文件,包括应用程序源代码和 ResourceSpace 配置文件 config.php
。删除config.php
尤其令人担忧 ,因为它包含多个特定于应用程序的密钥,这使得安装很难恢复,除非最近备份过。
下面是一个curl
利用该漏洞删除config.php
文件的命令:

以及由此产生的拒绝服务影响:

CVE-2021-41951:反射型 XSS
CVE-2021-41951 是通过wordpress_user
文件中的参数 反映的 XSS 漏洞 plugins/wordpress_sso/pages/index.php
。这个参数的值被回显给调用者。这似乎是安装中留下的测试代码。

证明 XSS:

要利用此漏洞,攻击者需要说服 ResourceSpace 用户单击精心制作的链接。如果成功,攻击者就可以在受害者的浏览器中运行任意代码。
缓解措施
供应商 Montala Limited 立即修复了所有报告的漏洞。除了修复上述漏洞外,供应商还取消了管理员通过 Web 界面上传自定义插件的功能。
严重的预身份验证 SQL 注入漏洞影响 ResourceSpace 9.5 至 9.6.18229 版。如果您使用这些版本中的任何一个,强烈建议您更新到 ResourceSpace 的最新版本。
在撰写本文时,ResourceSpace 的最新版本是 9.7,于 2021 年 10 月 29 日发布。
时间线
- 2021 年 9 月 25 日:向供应商披露的漏洞
- 2021 年 9 月 27 日:修复了所有漏洞
- 2021 年 11 月 9 日:公开披露
参考
- CVE-2021-41765
- CVE-2021-41950
- CVE-2021-41951
- ResourceSpace 产品版本
- pages/edit_fields/9_ajax/add_keyword.php 的补丁版本
- pages/ajax/tiles/php 的补丁版本
- index.php 从 WordPress SSO 插件中删除
转载请注明出处及链接