IPBUF安全漏洞报告
English
CVE-2026-40863 CVSS 7.5 高危

CVE-2026-40863 PhpSpreadsheet拒绝服务漏洞

披露日期: 2026-05-12

漏洞信息

漏洞编号
CVE-2026-40863
漏洞类型
拒绝服务
CVSS评分
7.5 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
PhpSpreadsheet

相关标签

拒绝服务DoSPhpSpreadsheetXML注入CPU耗尽

漏洞概述

PhpSpreadsheet是一个纯PHP库,用于读写电子表格文件。在受影响版本中,其SpreadsheetML XML读取器未对ss:Index行属性进行最大行数限制验证。攻击者可通过构造包含超大ss:Index值的恶意XML文件,导致内部缓存行数异常膨胀。当后续调用getRowIterator()方法时,程序将尝试迭代数十亿行,从而耗尽CPU资源,引发拒绝服务攻击。

技术细节

该漏洞源于PhpSpreadsheet处理SpreadsheetML XML文件时的输入验证缺失。具体而言,Reader\Xml组件在解析<Row>元素的ss:Index属性时,未将其与系统允许的最大行数(AddressRange::MAX_ROW = 1,048,576)进行比对。攻击者可利用此逻辑漏洞,在XML文件中设置ss:Index="999999999"。这会导致程序内部的cachedHighestRow变量被更新为一个极大的数值。一旦应用程序后续尝试遍历行数据,循环逻辑将基于这个巨大的数值执行,导致CPU资源被长时间占用,最终造成服务不可用。

攻击链分析

STEP 1
步骤1
攻击者识别目标系统使用了受影响版本的PhpSpreadsheet库处理XML文件。
STEP 2
步骤2
攻击者构造恶意的SpreadsheetML XML文件,其中包含一个ss:Index属性设为极大值(如999999999)的<Row>元素。
STEP 3
步骤3
攻击者将恶意XML文件上传至目标服务器或通过应用接口提交。
STEP 4
步骤4
目标应用解析XML文件,内部缓存行数被设置为极大值。
STEP 5
步骤5
当应用调用getRowIterator()时,尝试遍历数十亿行,导致CPU资源耗尽,服务拒绝。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
<?xml version="1.0"?> <Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:html="http://www.w3.org/TR/REC-html40"> <Worksheet ss:Name="Sheet1"> <Table> <!-- Malicious Row Index causing CPU exhaustion --> <Row ss:Index="999999999"> <Cell><Data ss:Type="String">Exploit</Data></Cell> </Row> </Table> </Worksheet> </Workbook>

影响范围

PhpSpreadsheet < 1.30.4
PhpSpreadsheet < 2.1.16
PhpSpreadsheet < 2.4.5
PhpSpreadsheet < 3.10.5
PhpSpreadsheet < 5.7.0

防御指南

临时缓解措施
在无法立即升级的情况下,建议在调用getRowIterator()时显式指定结束行参数,限制迭代范围。同时,应在文件上传入口处增加XML格式和内容大小的严格检查。

参考链接

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