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

CVE-2026-6722 PHP SOAP扩展远程代码执行漏洞

披露日期: 2026-05-10

漏洞信息

漏洞编号
CVE-2026-6722
漏洞类型
释放后重用 (UAF) / 远程代码执行
CVSS评分
9.8 严重
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
PHP

相关标签

远程代码执行释放后重用PHPSOAPUAF

漏洞概述

PHP 8.2.31、8.3.31、8.4.21和8.5.6之前的版本中,SOAP扩展存在严重安全漏洞。该漏洞源于对象去重机制未正确增加引用计数,当处理包含重复键的apache:Map节点时,会触发释放后重用(UAF)。攻击者可利用此漏洞通过构造恶意SOAP请求,在服务器上实现远程代码执行。

技术细节

该漏洞位于PHP SOAP扩展的对象去重机制中。机制在存储PHP对象指针到全局映射时未增加引用计数。当SOAP请求中的apache:Map节点包含重复键时,处理第二个条目会覆盖临时结果映射中的第一个条目,导致原PHP对象被释放,但映射中仍保留指向该内存区域的悬垂指针。后续对该节点的href引用会将悬垂指针复制到结果中。由于PHP字符串分配可能回收被释放的内存区域,攻击者通过控制SOAP请求体,利用字符串分配操作重用被释放的内存,即可控制程序流并执行任意代码。

攻击链分析

STEP 1
1. 构造恶意请求
攻击者构造包含重复键的apache:Map节点的恶意SOAP请求XML。
STEP 2
2. 发送请求
将恶意SOAP请求发送至运行受影响PHP版本的Web服务器。
STEP 3
3. 触发内存释放
服务器SOAP扩展处理重复键,导致原有对象被释放,但全局映射中残留悬垂指针。
STEP 4
4. 内存重用
攻击者通过精心构造的字符串分配操作回收被释放的内存区域,植入恶意指令。
STEP 5
5. 执行代码
程序访问悬垂指针,跳转到恶意内存地址,最终在服务器上执行任意代码。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
<?xml version="1.0" encoding="UTF-8"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <exploit> <!-- Malicious apache:Map with duplicate keys to trigger UAF --> <map xmlns="http://ws.apache.org/namespaces/axis"> <item> <key id="key1">A</key> <value id="val1">Original Value</value> </item> <item> <key href="#key1"/> <!-- Reusing key triggers overwrite and free of val1 --> <value>B</value> </item> </map> <!-- Reference the freed object to trigger RCE --> <target href="#val1"/> </exploit> </soap:Body> </soap:Envelope>

影响范围

PHP 8.2.* < 8.2.31
PHP 8.3.* < 8.3.31
PHP 8.4.* < 8.4.21
PHP 8.5.* < 8.5.6

防御指南

临时缓解措施
如果无法立即升级,建议在服务器配置中禁用SOAP扩展(php.ini中disable_functions或禁用soap.so),或者在应用层面对SOAP请求数据进行严格的过滤和清洗,避免处理不受信任来源的SOAP数据。

参考链接