Horde Webmail远程代码执行漏洞

渗透技巧 2年前 (2022) admin
769 0 0

Horde Webmail远程代码执行漏洞

Horde Webmail远程代码执行漏洞。

Sonar研究人员在Horde Webmail中发现一个安全漏洞,CVE编号CVE-2022-30287,攻击者利用该漏洞可以在受害者打开攻击者发送的邮件后完全控制Horde实例。未认证的Horde实例用户在服务器上执行任意代码。截至目前,没有官方补丁发布。

Horde Webmail远程代码执行漏洞
漏洞分析

Horde地址簿配置

Horde Webmail 允许用户对联系人进行管理。通过web接口,用户可以添加、删除和检索联系人。管理员可以配置联系人保存的位置,创建多个地址簿,每个有一个不同的后端服务器和协议。

下面是默认地址簿配置文件部分代码,是使用LDAP后端的默认配置:

turba/config/backends.php 

$cfgSources[‘personal_ldap’] = array(

  // Disabled by default

  ‘disabled’ => true,

  ‘title’ => _(“My Address Book”),

  ‘type’ => ‘LDAP’,

  ‘params’ => array(

      ‘server’ => ‘localhost’, 

      ‘tls’ => false,

   // …

可以看出,LDAP配置加入到了保存在$cfgSources 数组中的可用地址簿后端。配置本身是含有记录的key-value数组,可以用来配置LDAP 驱动。

CVE-2022-30287:未对factory类进行类型检查

用户在与终端进行联系人相关的交互时,会发送一个字符串用来识别想要使用的地址簿。然后Horde从$cfgSources 数组中取回对应的配置,并管理到地址簿的连接。

该模式的典型使用如下所示:

turba/merge.php

 14 require_once __DIR__ . ‘/lib/Application.php’;

15 Horde_Registry::appInit(‘turba’);

16

17 $source = Horde_Util::getFormData(‘source’);

18 // …

19 $mergeInto = Horde_Util::getFormData(‘merge_into’);

20 $driver = $injector->getInstance(‘Turba_Factory_Driver’)->create($source);

21 // …

30 $contact = $driver->getObject($mergeInto);

上述代码表明$source 参数如何接收到传递给Turba_Factory_Driver的create()方法。Turba是Horde地址簿组件的名字。create() 方法代码如下所示:

turba/lib/Factory/Driver.php

 51     public function create($name, $name2 = ”, $cfgSources = array())

52     {

53     // …

57         if (is_array($name)) { 

58             ksort($name); 

59             $key = md5(serialize($name)); 

60             $srcName = $name2; 

61             $srcConfig = $name; 

62         } else { 

63             $key = $name; 

64             $srcName = $name; 

65             if (empty($cfgSources[$name])) { 

66                 throw new Turba_Exception(sprintf(_(“The address book “%s” does not exist.”), $name)); 

67             } 

68             $srcConfig = $cfgSources[$name]; 

69         }

在第57行,检查了$name 参数的类型。该参数对应之前的$source 参数。如果是一个数组,就直接用做配置来设置$srcConfig变量。如果是字符串,就访问全局 $cfgSources,并取回对应的配置。

因为这里没有类型检查,攻击者可以发送数组作为参数,并提供完全可以控制的配置。后面的代码中, create()方法可以使用攻击者控制的数组中的值动态实例化驱动类:

turba/lib/Factory/Driver.php

75  $class = ‘Turba_Driver_’ . ucfirst(basename($srcConfig[‘type’])); 

76       // …

112  $driver = new $class($srcName, $srcConfig[‘params’]);

因此,攻击者可以选择实例化任意地址簿驱动,完全控制传递的参数,比如host、用户名、密码、文件路径。

实例化攻击者可以执行任意代码的驱动

然后,攻击者可以注入驱动配置使得其可以在要攻击的Horde实例上执行任意代码。

研究人员发现Horde支持连接到IMSP服务器。连接到IMSP服务器时,Horde会提取不同的记录。部分记录会被翻译为PHP序列化对象,然后反序列化。

以下代码是IMSP 驱动类的_read()方法,表明会检查__members 记录的存在性。如果存在,就反序列化:

turba/lib/Driver/Imsp.php

223   if (!empty($temp[‘__members’])) {

224      $tmembers = @unserialize($temp[‘__members’]);225   }

由于存在PHP对象注入,攻击者可以迫使Horde反序列化恶意对象,引发任意代码执行。

通过CSRF实现漏洞利用

默认情况下,Horde 会拦截HTML邮件中的图像。攻击者可以使用HTML标签

<picture>

 <source media=”(min-width:100px)” >

  <img src=”blocked.jpg” alt=”Exploit image” style=”width:auto;”>

</picture>

Horde Webmail远程代码执行漏洞

漏洞时间轴

研究人员在2022年2月2日将该漏洞报告给厂商,5月3日,90天的漏洞修复期已过,但官方仍未发布补丁。

参考及来源:https://blog.sonarsource.com/horde-webmail-rce-via-email/

Horde Webmail远程代码执行漏洞

Horde Webmail远程代码执行漏洞

原文始发于微信公众号(嘶吼专业版):Horde Webmail远程代码执行漏洞

版权声明:admin 发表于 2022年6月6日 下午12:01。
转载请注明:Horde Webmail远程代码执行漏洞 | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...