GLPI htmlawed Rce(CVE-2022-35914)
2022-10-4 14:46:16 Author: Ots安全(查看原文) 阅读量:70 收藏

漏洞信息

在最近的一次渗透测试中,我们遇到了一个有趣的范围,其中包含最新的产品并且没有任何凭据。在 bruteforce dns、文件夹、所有登录表单和做各种事情上花了一些时间之后,我没有得到什么有趣的东西。我们在互联网上发现了一个 GLPI 产品,它存在一个最近的漏洞(未经身份验证的 SQL 注入,该漏洞在渗透测试前一周公布,并且已经在范围 x_x 上进行了修补)。

GLPI 是一个 php 解决方案,供应商给出的定义是“GLPI 代表 Gestionnaire Libre de Parc Informatique 是一个免费的资产和 IT 管理软件包,它提供 ITIL 服务台功能、许可证跟踪和软件审计。” 这个解决方案在法国非常常用,它使它成为我们渗透测试的一个很好的目标。

从具有最近严重漏洞的产品开始进行调查并不是一个坏主意。这意味着供应商关心补丁,如果你发现一些有趣的东西,他肯定会做出反应。

经过几个小时的代码挖掘,我得到了一些有趣的东西要挖掘更多,但没有身份验证就无法进入我的范围。在我的研究中,我开始挖掘供应商文件夹,在那里,我在 GLPI 产品的供应商文件夹中发现了一个微不足道的漏洞。

语境

  • 该漏洞本身不在 GLPI 中,而是在第三方库 HTMLAWED https://www.bioinformatics.org/phplabware/internal_utilities/htmLawed/中。

  • 该库的测试脚本在版本 < v1.2.9 中存在漏洞。我注意到这个漏洞的供应商的那一天,他修补了发布包和他的服务器。,他非常反应和感激。感谢他!

  • 在 GLPI 上,这个库在发布版本中提供了一个示例脚本(版本不包括这个脚本,但在 GLPI 上使用下载了所有包)。

  • 这将获得最后一个版本,所以一切都应该没问题吧?

  • 事实上,GLPI 版本直接在版本中包含供应商文件夹。因此,当您下载版本 <= 9.5.8 或 <= 10.0.2 时,您将获得包含源代码以及 htmLawedTest.php 文件的旧版本库。

漏洞描述

  • 当 htmLawedTest.php 存在时会发生此问题,并且在 glpi 9.x 和 10.x(不了解其他)中默认情况下是这种情况,因为 GLPI 直接通过 composer 获取它。

  • 默认情况下,在 GLPI 应用程序上,路径/vendor/htmlawed/htmlawed/htmLawedTest.php对所有人可用。

  • 在 htmLawedTest.php 中,程序员使用用户条目来设置 htmlawed 配置,并为用户提供所有可用于测试产品的配置。

# htmlawedTest.php...if($do){ $cfg = array();foreach($_POST as $k=>$v){if($k[0] == 'h' && $v != 'nil'){   $cfg[substr($k, 1)] = $v;  } }...$out = htmLawed($_POST['text'], $cfg, $_POST['spec']);
  • 如您所见,函数 htmlLawed 使用我们控件上的所有参数调用。

  • 可用的配置选项之一是钩子函数。如果钩子(或钩子标签)由用户控制,他可以设置一个 php 执行,在那里他可以控制函数名和参数(字符串或数组、数组、字符串或数组)。

# htmlawed.phpfunction htmLawed($t, $C=1, $S=array()){    ...    $C['hook'] = (!empty($C['hook']) && function_exists($C['hook'])) ? $C['hook'] : 0;    ...if($C['hook']){$t = $C['hook']($t, $C, $S);}
  • 这几乎完全匹配PHP exec 函数签名,但 php 在变量类型上很好,所以我们可以使用 exec 函数作为钩子。

exec(string $command, array &$output = null, int &$result_code = null): string|false
  • 所以我们得到了一个命令注入($t 是用户条目)并且 exec 将覆盖 $C 和 $S。

  • 由于 $t 被替换为钩子的结果,这就像一个 webshell 我们直接获取命令的结果。

请注意,还有其他方法可以在不使用 exec 的情况下利用漏洞,通过使用回调函数,如 array_map、call_user_func 等,不要依赖 exec 上的 disable_function 来修补漏洞

GLPI 在 2022 年 9 月 14 日在其 github 上发布了glpi 10.0.x ( 10.0.3 ) 和 9.5.x ( https://github.com/glpi-project/glpi/releases/tag/9.5.9 )的补丁. Htmlawed 已经修补了漏洞。(htmlawed 中的补丁只是来自示例脚本的 hook 和 hook_tag 参数的未设置,因此如果在代码中使用用户参数调用该函数,请小心)。

影响

  • 此漏洞的影响是未经身份验证的远程代码执行,因此至关重要。(CVSS 评分 9.8)

  • 如果您的 GLPI 暴露在互联网上,您将面临重大风险(如果是您的情况,您不应该这样做。票证和 IT 管理软件必须限制在内部网络或至少应该位于以前的身份验证门户之后) .

  • 无论如何,要在不升级的情况下快速修补,您应该删除文件 /vendor/htmlawed/htmlawed/htmLawedTest.php 并在日志中搜索对该文件的访问权限。(我还建议您禁止直接访问供应商文件夹以避免这种漏洞)。

痕迹

  • 在日志中搜索 /vendor/htmlawed/htmlawed/htmLawedTest.php 以获得妥协的痕迹。

开发

curl -s -d 'sid=foo&hhook=exec&text=cat /etc/passwd' -b 'sid=foo' http://localhost/vendor/htmlawed/htmlawed/htmLawedTest.php |egrep '\&nbsp; \[[0-9]+\] =\&gt;'| sed -E 's/\&nbsp; \[[0-9]+\] =\&gt; (.*)<br \/>/\1/'

  • 有人逆向cve信息,在github上公开poc https://github.com/cosad3s/CVE-2022-35914-poc


文章来源: http://mp.weixin.qq.com/s?__biz=MzAxMjYyMzkwOA==&mid=2247495590&idx=1&sn=86723d2c32886c81278633fb20875018&chksm=9bada6edacda2ffb2673ffc58dad9b2b06d579bc757af8f739b764ba470db3593c6e5f521a32#rd
如有侵权请联系:admin#unsafe.sh