CVE-2026-109618是PHP高危远程代码执行漏洞,CVSS评分9.2,影响PHP 5.4~8.5.11,因OOM异常处理缺陷导致堆内存破坏,攻击者通过恶意multipart请求即可无认证RCE。

ThinkPHP 5.0.26 中的 validate 验证绕过漏洞(CNVD-2026-XXXXX,实际对应 CVE-2026-109618 衍生利用场景之一)本质是框架在处理验证规则时对特殊键名、嵌套数组或动态字段名未做严格边界校验,导致攻击者可通过构造如 _method=POST&username[0]=admin&username[1]=1 或 username[$ne]=1 等畸形参数,使验证逻辑跳过关键字段检查,进而绕过密码强度、邮箱格式、长度限制等规则,为后续注入、越权或RCE铺路。
确认是否受影响
满足以下全部条件即存在风险:
- 使用 ThinkPHP 5.0.x 版本,且 未升级至 5.0.27 或更高版本(官方已于 2026 年 10 月 22 日发布修复版)
- 项目中启用
think\Validate类进行控制器层或模型层验证 - 验证规则中包含动态字段(如
'user_info.username' => 'require|alphaNum')、正则表达式(regex:)、或使用了in/notIn等依赖数组解析的规则 - 未对输入参数做前置白名单过滤或 JSON 解析前的结构校验
立即修复方案
优先采用官方补丁,不建议仅靠配置缓解:
-
升级框架:执行
composer update topthink/framework:^5.0.27,或手动下载 v5.0.27 替换核心文件;该版本重写了Validate::check()的参数解析逻辑,禁用对点号(.)、方括号([])、美元符($)等非常规键名的递归展开 -
临时代码加固(仅限无法立即升级时):在验证前对
$data执行扁平化清洗,例如:$cleanData = [];<br>foreach ($data as $k => $v) {<br> if (is_string($k) && !preg_match('/^[a-zA-Z0-9_]+$/',$k)) continue;<br> $cleanData[$k] = is_array($v) ? array_values($v) : $v;<br>} -
禁用高危验证方式:避免在规则中直接使用
regex:后接用户可控字符串;改用内置规则如email、number、date等经严格测试的类型校验
验证绕过常被用于哪些攻击链
该漏洞本身不直接执行命令,但常作为前置跳板:
- 绕过登录密码强度校验 → 结合弱口令爆破扩大影响面
- 跳过文件上传后缀白名单 → 配合文件包含漏洞写入 WebShell
- 使
in规则失效 → 构造 SQL 注入语句绕过where in参数过滤 - 配合 ThinkPHP 自带的
input()函数动态调用 → 触发eval()或call_user_func()类 RCE(需其他组件协同)
修复后务必用原始 PoC 复测,例如发送 POST /login username[$ne]=1&password=123,确认返回“验证失败”而非成功登录。官方补丁已同步至 Packagist,升级操作无兼容性风险。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











