PHP 8.5.11 修复 FPM IPv6 ACL 绕过、嵌套 yield from 丢元素与 DOM UAF
PHP 8.5.11 于 2026-09-24 发布,完整 ChangeLog 见 php.net/ChangeLog-8.php。
BCMath
- 修复
bc_is_zero_for_scale()在 scale 超过n_scale时的越界读取。
Core
- 修复自动 UTF-16/32 编码检测过程中的越界读取。
- 修复 GH-15375:嵌套
yield from在内部生成器调用valid()或next()之后跳过元素。 - 修复 GH-23232:单独的命名空间分隔符会让自动加载器请求空类名。
- 修复 GH-23301:中间生成器再次委托时,嵌套
yield from重复产出一个值。
DOM
- 修复遵循规范模式下,
NamedNodeMap::getNamedItemNS()传入空 URI 时无法匹配 null 命名空间的问题。 - 修复
className/classList写入以及属性删除后,getElementsByClassName()和其他节点列表缓存未失效的问题。 - 修复
DOMDocument::xinclude()之后克隆DOMNameSpaceNode的 use-after-free。 - 修复
DOMXPath中php:function回调收到 nodeset、后续回调返回另一文档节点时的崩溃。 - 修复 GH-23331:
node_list_unlink()跳过仍有活动 wrapper 的属性子节点时的 UAF。 - 修复
Dom\Element::setAttributeNS()替换属性值时,该属性子节点仍有活动 wrapper 的 use-after-free。
GD
- 修复
imageaffinematrixget()和imageaffinematrixconcat()在错误消息中报告错误参数的问题。
FPM
- 修复 GH-19320:FPM UID 和 GID 溢出。
- 修复 GHSA-62xp-839h-2637:FastCGI 的
listen.allowed_clients因地址比较不正确导致 IPv6 ACL 绕过(CVE-2026-91768)。
Intl
- 修复
grapheme_strpos()和grapheme_strrpos()在空 needle 时返回 UTF-16 偏移而非字素偏移的问题。 - 修复 GH-23094:
NumberFormatter解析 … 对 UTF-8 字符串使用 UTF-16 位置。 - 修复
Locale::parseLocale()读取越过尾部-或_的问题。 - 修复
grapheme_str_split()将 UBRK 当作字节索引的问题。
Standard
- 修复流过滤器 … 取消设置 StreamBucket … 重新附加 bucket 时的段错误。
- 修复 GHSA-…(Out … wrapper when following …)。(CVE-2026-93682)
升级建议
本次发布包含两个安全修复:FPM 的 CVE-2026-91768 和 Standard 组件的 CVE-2026-93682。使用 8.5 分支的环境应升级到 8.5.11。
如果 PHP-FPM 通过 listen.allowed_clients 限制 FastCGI 访问,并且监听地址或客户端地址涉及 IPv6,建议优先安排升级并复核现有 ACL 是否按预期生效。依赖 DOM、Intl、Core 生成器的应用,升级后可针对本次涉及的 yield from 嵌套委托、getElementsByClassName() 缓存、grapheme_* 偏移等行为做一次回归验证。