
一、漏洞全局信息与受影响资产盘点1. CVE官方核心数据漏洞编号CVE-2026-7261漏洞类型CWE-416释放后重用内存破坏漏洞NVD官方CVSS3.1评分9.8评级Critical高危。攻击链路全程走网络攻击者不需要登录系统、不需要配合用户操作仅发送构造完成的HTTP SOAP请求包就能触发内存损坏。漏洞成功触发后可同时破坏服务器机密性、完整性、可用性三类安全边界。漏洞触发依赖两个前置条件同时成立服务器编译PHP时启用soap扩展业务代码调用setPersistence开启SOAP_PERSISTENCE_SESSION持久会话模式。缺少任意一项攻击链路直接断裂。PHP底层缺陷位于ext/soap扩展服务端请求异常处理分支官方2026年6月推送补丁修复内存指针释放逻辑。2. 全分支受影响版本明细当前线上主流PHP8长期支持分支全部覆盖漏洞无例外版本豁免1PHP 8.2 系列8.2.0 ~ 8.2.30安全基线最低8.2.312PHP 8.3 系列8.3.0 ~ 8.3.30安全基线最低8.3.313PHP 8.4 系列8.4.0 ~ 8.4.20安全基线最低8.4.214PHP 8.5 开发分支8.5.0 ~ 8.5.5安全基线最低8.5.6Windows、Linux、macOS系统不受限制只要搭载上述版本且开启soap持久会话服务器暴露攻击面。3. 资产暴露风险分级标准企业内网ERP、供应链对接SOAP接口、对外第三方开放WebService接口属于一级高危资产攻击者能直接通过公网投递恶意载荷。仅内部系统调用、限制内网IP访问的SOAP服务属于二级中危资产内网横向渗透拿下一台主机后可批量爆破同网段PHP服务。编译关闭soap扩展、未调用SOAP_PERSISTENCE_SESSION的PHP环境属于三级无风险资产无需紧急处置纳入常规月度巡检即可。二、SoapServer持久会话底层运行架构与漏洞触发流程图1. 正常持久会话内存调度架构1正常业务对象生命周期逻辑业务初始化SoapServer实例传入处理业务逻辑的Handler对象执行setPersistence(SOAP_PERSISTENCE_SESSION)标记持久化。客户端首次发起SOAP调用PHP创建Handler堆内存对象存入进程会话上下文请求执行完毕不执行内存销毁函数zval_ptr_dtor。后续同会话下所有SOAP请求直接复用上下文内已存在的Handler实例减少反复创建销毁对象带来的性能损耗。会话生命周期结束客户端断开、会话超时统一遍历上下文全部对象批量释放堆内存无悬空指针残留。2架构示意图文字说明客户端SOAP请求 → Nginx/Apache反向代理 → PHP-FPM Worker进程进程内存分区栈内存请求临时变量 堆内存Handler业务对象持久会话标记开启 → Handler存入Session上下文哈希表单次请求结束 → 跳过对象析构函数会话过期销毁 → 批量清理哈希表内全部对象内存2. 漏洞触发完整流程1恶意客户端发送格式畸形、标签嵌套异常的SOAP XML POST报文报文内部构造非法参数强制业务逻辑抛出运行异常。2PHP soap扩展进入fault错误处理分支执行zval_ptr_dtor主动释放堆内存中的持久化Handler对象。3内存释放完成程序未清空上下文哈希表内存储的对象指针悬空指针留存。4代码继续执行Fault错误报文组装、异常日志写入、会话上下文回写三步操作循环读取悬空指针指向的已回收堆内存。5堆内存空间会被系统分配给新变量、新对象覆盖攻击者精准控制内存布局篡改虚函数表指针、回调函数地址。6函数指针被覆盖后PHP进程执行攻击者预设的任意原生代码完成远程代码执行。3. 漏洞缺陷原始C代码对比漏洞未修复源码片段ext/soap/soap_server.cif(fault_occurred){zval_ptr_dtor(handler_obj);generate_soap_fault(fault_out);write_session_context(session_hash);}这段代码不区分会话持久化状态只要出现异常就直接销毁handler_obj释放后后续代码持续访问该指针。官方补丁修复后代码if(fault_occurred){if(persistence_mode!SOAP_PERSISTENCE_SESSION){zval_ptr_dtor(handler_obj);}generate_soap_fault(fault_out);write_session_context(session_hash);}新增持久模式判断逻辑开启SOAP_PERSISTENCE_SESSION时跳过主动析构对象内存统一交由会话销毁流程回收彻底消除悬空指针来源。三、一键批量检测脚本服务器是否存在CVE-2026-7261风险1. Linux全服务器批量检测Shell脚本可直接复制执行脚本功能检测PHP版本、soap扩展启用状态、扫描全站代码SOAP_PERSISTENCE_SESSION关键字输出风险等级与处置建议#!/bin/bash# CVE-2026-7261 批量风险检测工具 v1.0LOG_PATH/tmp/cve_2026_7261_check.logWEB_ROOT_LIST(/var/www/html/home/wwwroot/usr/share/nginx/html)echo CVE-2026-7261 风险检测开始$(date)$LOG_PATH# 1. 获取PHP全部可用二进制文件PHP_BIN_LIST$(whereisphp|awk{for(i2;iNF;i) print $i})if[-z$PHP_BIN_LIST];thenecho未检测到服务器PHP程序无风险$LOG_PATHexit0fi# 遍历每个PHP程序检测版本与soap扩展forphpin$PHP_BIN_LISTdoif[!-x$php];thencontinuefiPHP_VER$($php-v|head-n1|awk{print $2})echo检测PHP程序$php版本$PHP_VER$LOG_PATH# 判断版本是否处于受影响区间VER_MAJ$(echo$PHP_VER|cut-d.-f1)VER_MIN$(echo$PHP_VER|cut-d.-f2)VER_PATCH$(echo$PHP_VER|cut-d.-f3)RISK_VER0if[$VER_MAJ8];thencase$VER_MINin82)if[$VER_PATCH-lt31];thenRISK_VER1;fi;;83)if[$VER_PATCH-lt31];thenRISK_VER1;fi;;84)if[$VER_PATCH-lt21];thenRISK_VER1;fi;;85)if[$VER_PATCH-lt6];thenRISK_VER1;fi;;esacfiif[$RISK_VER-eq0];thenecho$PHP_VER版本安全跳过扩展检测$LOG_PATHcontinuefi# 检测soap扩展是否加载SOAP_STATUS$($php-m|grepsoap)if[-z$SOAP_STATUS];thenecho$PHP_VER存在漏洞版本但未启用soap扩展低风险$LOG_PATHcontinuefiecho$PHP_VER漏洞版本soap扩展已启用进入代码扫描阶段$LOG_PATH# 扫描网站目录持久化关键字HAS_PERSIST0forweb_pathin${WEB_ROOT_LIST[]}doif[!-d$web_path];thencontinue;figrep-rSOAP_PERSISTENCE_SESSION$web_path--include*.php2/dev/nullif[$?-eq0];thenHAS_PERSIST1echo目录$web_path检测到SOAP持久会话代码一级高危风险$LOG_PATHfidoneif[$HAS_PERSIST-eq0];thenecho未检索到持久会话代码二级中危建议升级PHP兜底$LOG_PATHfidoneecho 检测完成日志文件$LOG_PATHcat$LOG_PATH使用方式1将代码保存为cve_scan.sh2chmod x cve_scan.sh3./cve_scan.sh 直接执行日志输出/tmp目录可留存归档2. Windows环境检测批处理脚本echo off echo CVE-2026-7261 Windows本地检测工具 set log%temp%\cve_2026_7261_log.txt echo 检测日志输出路径%log% php -v %log% php -m | findstr soap %log% findstr /s /m SOAP_PERSISTENCE_SESSION C:\inetpub\wwwroot\*.php %log% echo 检测结束查看日志确认风险等级 notepad %log% pause3. 单文件PHP检测探针上传站点直接访问文件名soap_check.php上传网站根目录浏览器打开即可出检测结果?phpheader(Content-Type:text/plain;charsetutf-8);echo CVE-2026-7261 站点探针检测 \n;$vphpversion();echo当前PHP版本.$v.\n;$extextension_loaded(soap);echosoap扩展状态.($ext?已启用:未加载).\n;// 版本风险判断list($ma,$mi,$pa)explode(.,$v);$riskVerfalse;if($ma8){switch($mi){case82:$riskVer$pa31;break;case83:$riskVer$pa31;break;case84:$riskVer$pa21;break;case85:$riskVer$pa6;break;}}echo版本是否漏洞区间.($riskVer?是:否).\n;// 扫描当前目录代码$resshell_exec(grep -r SOAP_PERSISTENCE_SESSION . --include*.php 2/dev/null);echo持久会话代码检索结果.(empty($res)?无匹配代码:$res).\n;echo 风险判定 \n;if(!$riskVer||!$ext||empty($res)){echo当前站点无CVE-2026-7261攻击面\n;}else{echo高危漏洞暴露立即执行修复操作\n;}四、漏洞本地复现环境搭建教程1. 漏洞环境编译安装受影响PHP版本1源码编译依赖安装CentOS7/8yuminstallgcc gcc-cmakelibxml2-devel openssl-devel bzip2-devel libcurl-devel2Debian/Ubuntu依赖aptinstallbuild-essential libxml2-dev libssl-dev libbz2-dev libcurl4-openssl-dev3下载漏洞版本PHP源码并编译开启soap扩展以漏洞版本PHP8.4.20举例wgethttps://www.php.net/distributions/php-8.4.20.tar.gztar-zxvfphp-8.4.20.tar.gzcdphp-8.4.20 ./configure --enable-soap --enable-fpm --with-openssl --with-curlmake-j4makeinstall编译完成后执行php -v确认版本php -m确认soap扩展存在。2. 存在漏洞的SOAP服务测试代码新建server.php搭建带持久会话的漏洞服务端?phpclassTestHandler{publicfunctiongetData($param){return[msg业务正常返回,data$param];}}$wsdlnull;$servernewSoapServer($wsdl,[urihttp://127.0.0.1:9000]);$server-setClass(TestHandler::class);// 漏洞触发核心配置$server-setPersistence(SOAP_PERSISTENCE_SESSION);$server-handle();启动内置测试服务php-S127.0.0.1:9000 server.php3. 恶意请求POC载荷触发内存异常恶意客户端client.php构造畸形XML强制抛出Fault异常?php$clientnewSoapClient(null,[locationhttp://127.0.0.1:9000,urihttp://127.0.0.1:9000,trace1,exceptions0]);// 传入非法嵌套数组构造畸形SOAP报文$maliciousDatanewstdClass();$maliciousData-looparray_fill(0,1000,str_repeat(x,2000));try{$client-getData($maliciousData);}catch(Exception$e){var_dump($e);}echo$client-__getLastResponse();执行php client.php观察PHP内置服务进程出现段错误、内存读写报错漏洞触发成功。五、三类修复方案分步操作指南1. 根治方案升级PHP至安全基线版本生产环境首选1CentOS/RHEL yum升级完整流程# 刷新软件源缓存yum clean allyum makecache# 批量更新全部PHP组件yum update php php-cli php-fpm php-soap-y# 重启PHP-FPM服务加载新版本systemctl restart php-fpm# 校验升级结果php-vphp-m|grepsoap2Debian/Ubuntu apt升级流程aptupdateaptfull-upgrade php8.4*-ysystemctl restart php8.4-fpm php-v3源码环境增量补丁修复不完整重装PHP仅替换ext/soap扩展漏洞代码适合无法停机完整升级业务① 进入原有PHP源码目录ext/soap文件夹② 替换soap_server.c为官方修复后源码③ 执行编译扩展cdext/soap phpize ./configuremakecpmodules/soap.so /usr/local/php/lib/php/extensions/no-debug-non-zts-20240924/④ 重启PHP-FPM加载新扩展文件2. 临时应急止损方案业务无法停机升级1代码层注释持久化配置全局检索setPersistence(SOAP_PERSISTENCE_SESSION)全部注释修改示例// $server-setPersistence(SOAP_PERSISTENCE_SESSION);注释后漏洞触发条件直接消失不存在UAF风险仅损失会话复用性能。2php.ini禁用soap扩展编辑php.ini找到extensionsoap行首加分号注释;extensionsoap保存后重启php-fpm彻底移除SOAP扩展攻击入口。3Nginx WAF拦截恶意SOAP请求配置nginx.conf站点server块添加拦截规则阻断超大畸形XML报文location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; # 限制POST请求体最大512KB client_max_body_size 512k; # 匹配SOAP Fault畸形特征拦截 if ($request_body ~* faultstring|detail) { return 403; } }重载Nginx配置systemctl reload nginx3. 最小权限加固配套配置清单1PHP-FPM运行用户降权配置修改php-fpm.conf pool配置禁止root运行进程[www] user www-data group www-data listen /run/php/php8.4-fpm.sock listen.owner www-data listen.group www-data listen.mode 0660低权限进程即使被RCE攻击者无法读取服务器系统配置、数据库密钥。2对外SOAP接口IP访问白名单Nginx配置location /soap_server.php { # 放行内网、合作方固定IP allow 192.168.0.0/16; allow 10.0.0.0/8; deny all; fastcgi_pass 127.0.0.1:9000; }六、修复后常态化巡检与监控方案1. 定时自动巡检定时任务crontab配置每天凌晨2点自动执行漏洞检测脚本输出日志留存归档0 2 * * * /root/cve_scan.sh /var/log/cve_daily_check.log2. 日志异常监控规则ELK/云监控告警配置监控触发告警条件任意一条命中推送短信/企业微信通知1一分钟内SOAP接口Fault报错超过20条2PHP-FPM进程频繁crash、segment fault崩溃日志3公网陌生IP高频POST访问soap服务端文件4服务器新增低于安全基线的PHP版本实例3. 月度资产安全检查清单1遍历所有业务服务器PHP版本基线核对2清理业务代码废弃未使用的SoapServer文件3校验php.ini未启用不必要扩展soap、ldap、imap等4复核SOAP接口访问白名单清理过期合作方IP七、线上业务处置常见踩坑问题1. 升级PHP后业务代码报错升级后部分废弃函数、参数失效提前搭建预发布环境完整回归测试禁止直接线上热更版本。2. 注释持久会话后接口QPS下降会话不复用会频繁创建Handler对象并发上涨时增加PHP进程开销短期扩容php-fpm进程池缓解性能衰减长期完成版本升级根治。3. 内网无公网访问忽视漏洞风险攻击者通过Webshell、弱密码拿下内网一台主机后可横向扫描同网段全部SOAP服务批量利用内网接口防护标准和公网接口保持一致。4. 仅依靠WAF防护不升级PHPWAF规则存在绕过可能性畸形XML特征可变形规避正则拦截WAF只能作为辅助防护手段不能替代版本升级。八、漏洞安全延伸与企业WebService长效防护思路1. WebService接口通用风险点汇总除本次UAF漏洞外PHP SoapServer长期存在注入、XML外部实体XXE、未授权访问三类高频漏洞业务上线前统一做安全扫描。开发规范强制要求SOAP请求XML格式校验、参数长度限制、接口鉴权Token校验拒绝裸接口对外暴露。2. 企业PHP版本统一管理方案搭建内部软件源仓库统一管控全部服务器PHP安装包版本新服务器初始化自动部署安全基线版本避免运维人员手动安装漏洞版本。开发侧容器镜像标准化基础镜像内置修复后PHP版本容器上线前自动执行漏洞探针检测镜像存在风险直接阻断发布流水线。互动提问1. 你们企业线上是否大量使用PHP SoapServer对接第三方业务临时注释持久会话后遇到了哪些性能问题2. 除了文中提供的批量检测脚本你平时会用哪些自动化工具扫描PHP内存破坏类高危漏洞