无境 web靶场上新 CVE-2026-34838 groupoffice 反序列化

Group-Office 不安全反序列化漏洞详情

Summary

Group-Office 允许认证用户保存任意的系统设置。AbstractSettingsCollection 模型中的漏洞导致加载这些设置时存在不安全的反序列化问题。通过将序列化的 FileCookieJar 对象注入设置字符串,经过认证的攻击者可以实现任意文件写入,直接导致服务器上的远程代码执行(RCE)。

Details

核心漏洞存在于 go/base/model/AbstractSettingsCollection.php 的 _loadData() 方法中。该方法会自动检索特定模块或组件的设置。它检查字符串是否以“serialized:”开头:如果是,则盲目将字符串的其余部分传递给 PHP 的原生 unserialize() 函数,且不进行类验证(allowed_classes => false)。

// In go/base/model/AbstractSettingsCollection.php -> _loadData()
$values = GO::config()->getSettings($propertyNames,$this->_userId);

foreach($values as $property=>$value){
   if(isset($value)){
       if(substr($value,0,11)=='serialized:'){
           // VULNERABLE SINK: Unsafe deserialization
           $value = unserialize(substr($value,11));
      }
       $this->{substr($property,strlen($this->myPrefix()))} = $value;
  }
}

任何经过认证的用户都可以使用遗留的 HTTP Controller 端点 index.php?r=core/saveSetting,向 go_settings 数据库表注入任意数据。由于数据库中的名称列限制为 50 字符,攻击者可以针对 GO\Base\Export\Settings(原生扩展 AbstractSettingsCollection 且易于触发)处理的 export_include_headers 设置(22 个字符)。

为了实现 RCE,攻击者利用 Group Office 内捆绑的库 guzzlehttp/guzzle 进行 PHP 对象注入(POP)链。该 GuzzleHttp\Cookie\FileCookieJar 类包含一个 __destruct() 方法,当对象被 PHP 的垃圾回收器销毁时,它会将其 cookie 保存到攻击者控制的文件路径中。通过将包含 PHP 标签的 SetCookie 对象填充到 JAR 中,可实现任意文件写入,植入网页壳负载。

Impact

这是一个不安全的反序列化漏洞,可直接导致远程代码执行(RCE)。

任何低权限、经过认证的 Group-Office 用户都可以滥用该漏洞,在服务器文件系统上写入 PHP Web 壳。这将导致底层服务器在运行中的网页应用进程中,其机密性、完整性和可用性完全被破坏。

请登录后发表评论

    请登录后查看回复内容