php-src 官方安全公告(2026-05-07,评级 low)披露 cve-2026-7568:标准库 metaphone() 函数内部的 signed int 位置索引在处理超长字符串时有符号整数溢出,可导致段错误或读取无关内存。修复版本覆盖 8.2.31、8.3.31、8.4.21、8.5.6。

▲ php/php-src Security Advisories 公告页
漏洞机制
metaphone() 用于按发音匹配单词,其内部用 signed int w_idx 记录当前扫描位置。signed int 上限是 2147483647,C 语言中超出即为未定义行为——实践中常回绕为负数,但不被标准保证。公告给出的复现方式是构造一个超过 2 GiB 的字符串(str_repeat('0', 2*1024**3-2).'AE',需 memory_limit=-1),调用 metaphone() 后位置索引溢出,AddressSanitizer 报 SEGV。溢出后访问当前位置可能读到无关内存。
影响与风险
触发前提是单次传入超过 2 GiB 的字符串,而 PHP 默认 memory_limit 远低于此,因此评级为 low。风险集中在关闭内存限制的 CLI 脚本、批处理任务,以及接受任意长度输入做语音匹配的搜索服务。这类场景下攻击者可以用超大输入让进程崩溃。
修复与升级
升级到 8.2.31 / 8.3.31 / 8.4.21 / 8.5.6 及以上。同时建议:即使升级后,也不应对不可信输入关闭 memory_limit;对 metaphone() 的入参做长度上限校验,超长文本先分词或截断再处理。
修复补丁(官方提交)
该问题由官方提交 fee84dd8c769 修复(2026-05-06),提交说明为「[skip ci] Adjust credits for GHSA-96wq-48vp-hh57.phpt」。改动涉及 1 个源码/测试文件,核心变更如下:
完整补丁与测试用例可在官方提交页面查看:https://github.com/php/php-src/commit/fee84dd8c7699e4e7f9b2e864a393ee5a372f974

▲ 官方公告

▲ php-src 修复提交
关键信息
| 项目 | 内容 |
|---|---|
| 类目 | 安全漏洞 |
| 级别 | 常规 |
| 日期 | 2026-05-07 |
| 关联编号 | CVE-2026-7568 / GHSA-96wq-48vp-hh57 |
| 影响范围 | ext-standard;官方修复版本 8.2.31 / 8.3.31 / 8.4.21 / 8.5.6 |
| 核验状态 | 已官方确认 |
| 受影响与修复 | ext-standard 修复 8.2.31;ext-standard 修复 8.3.31;ext-standard 修复 8.4.21;ext-standard 修复 8.5.6 |
| 修复提交 | fee84dd8c769(PHP-8.2) |
来源:https://github.com/php/php-src/security/advisories/GHSA-96wq-48vp-hh57

















