针对 EOL 平台上 PHP CVE-2026-109618 / CVE-2026-109619(RCE,CVSS 9.2)的非官方补丁:CentOS/RHEL 7(Remi)上的 PHP 7.3、Amazon Linux 2 上的 PHP 5.4、Amazon Linux 1 上的 PHP 5.3
PHP 安全团队针对 2026-10-21 公布的两个严重、未经身份验证的远程代码执行漏洞所发布的最小缓解措施的非官方向后移植:
| CVE | 安全公告 | 摘要 |
|---|---|---|
| CVE-2026-109618 | GHSA-w8hw-w9fx-j79w | 通过内存耗尽导致的损坏实现 RCE(CVSS 4.0:9.2) |
| CVE-2026-109619 | GHSA-6wmf-4rv5-p3rp | 通过过期的全局状态实现 RCE(CVSS 4.0:9.2) |
上游修复了 PHP 8.2.35、8.3.36、8.4.27 和 8.5.12,并为 7.4、8.0 和 8.1 发布了仅含源码的最小缓解措施。没有人针对下列平台发布修复,因此本仓库为这些平台提供补丁和可复现的构建脚本。
与 PHP Group、Remi Collet 或 Amazon 均无关联。 不提供任何担保。部署前请阅读 限制。
php7.3 7.3.33-35 包含同一上游提交的独立 7.3
移植版本。此处的 EL7 补丁修改了相同的 17 个文件,且核心改动逐行完全一致(详情见 docs/TESTING.md)。tests/verify.sh 对每次构建均报告 PATCHED。| 你的系统 | PHP 软件包来源 | 使用什么 |
|---|---|---|
| CentOS 7 / RHEL 7 | Remi php73(例如 php-7.3.33-14.el7.remi) | patches/php-7.3.33-remi22-el7-… + build/el7-php73/build.sh |
| Amazon Linux 2 | Amazon php-5.4.16-46.amzn2.* | patches/php-5.4.16-amzn2-… + build/amazon-linux/build.sh amzn2 |
| Amazon Linux 1(AMI 2017.03 / 2018.03) | Amazon php-5.3.29-1.8.amzn1 | patches/php-5.3.29-amzn1-… + build/amazon-linux/build.sh amzn1 |
| 使用 Sury PPA 的 Ubuntu / Debian,PHP 7.3 / 7.4 / 8.0 / 8.1 | deb.sury.org | 此处无需任何操作。 升级到 Sury 7.3.33-35、7.4.33-31、8.0.30-25 或 8.1.34-9(或更高版本)。它们已包含修复(debian/patches/*-Avoid-state-corruption-via-bailout.patch),尽管其变更日志未提及这些 CVE。 |
Ubuntu 24.04 发行版 php8.3 | Ubuntu 归档 | 升级到 8.3.6-0ubuntu0.24.04.13 或更高版本。 |
| 来自任何来源的 PHP 8.2 或更新版本 | — | 升级到 8.2.35 / 8.3.36 / 8.4.27 / 8.5.12 或更高版本。 |
构建机器上需要 Docker(任意操作系统)。构建完全在目标发行版的容器内运行,
因此生成的 RPM 可通过简单的 yum localinstall 安装。
git clone https://github.com/leonlai-tw/php-eol-cve-2026-109618-109619.git
cd php-eol-cve-2026-109618-109619
# CentOS 7 / RHEL 7 + Remi PHP 7.3 -> ./work-el7/out/
build/el7-php73/build.sh
# Amazon Linux 2 + PHP 5.4 -> ./work-amzn2/out/
build/amazon-linux/build.sh amzn2
# Amazon Linux 1 + PHP 5.3 -> ./work-amzn1/out/
build/amazon-linux/build.sh amzn1
生成的软件包版本号为 <vendor version>.cvefix1(例如
php-7.3.33-22.cvefix1.el7、php-5.4.16-46.amzn2.0.7.cvefix1),因此它们的排序始终比它们所替换的厂商软件包更新。
仅安装你已有的软件包,然后重启 PHP:
# on the target host, inside the directory holding the built RPMs
yum localinstall $(for p in $(rpm -qa 'php*' --qf '%{NAME}\n'); do ls ${p}-[0-9]*.cvefix1*.rpm 2>/dev/null; done)
systemctl restart php-fpm # or: apachectl graceful (mod_php)
长时间运行的 PHP 进程(Swoole/Octane、队列 worker、cron 守护进程)也必须重启;否则它们会继续运行旧的可执行文件。
rpm -q php-cli # must end in .cvefix1
tests/verify.sh # prints PATCHED / NOT PATCHED
tests/verify.sh 在 16 MB 内存限制下运行一个 CLI 进程,并检查最小缓解措施的可观察行为:内存耗尽时,进程以代码 1 退出,且不运行关闭函数(未打补丁的 PHP 以 255 退出并运行它们)。
要确认正在运行的 PHP-FPM 使用新二进制文件:
p=$(pgrep -o -f 'php-fpm: master'); sha256sum /proc/$p/exe /usr/sbin/php-fpm # hashes must match
与上游提交 712e60f9ed(“Avoid state corruption via bailout”,分支 PHP-7.4-CVE-2026-109618-109619)采用相同的设计:
_exit(1) 终止进程;PHP-FPM / Apache 会启动新的 worker。对于“Possible integer overflow in memory allocation”错误同样适用。Content-Disposition 和 Content-Type 部分头,并忽略重复项,因此小请求不再能让 PHP 分配大量内存。session.upload_progress 被禁用(CVE-2026-109619 的已确认触发源)。modules_activated、执行器异常/错误处理状态、链表头),因此后续请求无法观察到已释放的状态。各文件的详细说明及每个移植的实现方式:docs/PROVENANCE.md。 测试结果:docs/TESTING.md。
memory_limit 的请求会终止其 worker 进程;使用 mod_php 时,客户端看到的是连接被断开,而非 HTTP 500 页面;register_shutdown_function() 回调不会执行;session.upload_progress 不再报告进度。7.3.33-22 源码。如果你当前运行的是 Remi 最后的 EL7 二进制包(7.3.33-14),你还会获得 Remi 从 -15 到 -22 的安全回溯补丁(CVE-2024-4577、CVE-2024-8925/8926/8927、CVE-2024-8929、CVE-2024-11233/11234/11236、CVE-2025-14178、CVE-2026-6735、CVE-2026-14355、CVE-2026-7260、CVE-2026-17543 等)。amazonlinux:2018.03 镜像中完成,要求 openssl ≥ 1.0.2k(libcrypto.so.10(OPENSSL_1.0.2))。仍使用 openssl 1.0.1k 的主机必须先通过 amzn-updates 升级 openssl。由作者于 2026-10-22 在生产环境构建并部署(CentOS 7 / PHP-FPM Web 服务器、Amazon Linux 2 和 1 / mod_php)。欢迎提交 issue 和 pull request;不提供支持承诺。
这些补丁修改 PHP 源代码,依据 PHP License v3.01 分发。构建脚本和文档采用 MIT 许可证。参见 LICENSE。“PHP”是 PHP Group 的商标;本项目未获其认可。
本软件按“原样”提供,不附带任何形式的保证。请在生产环境之外进行测试,并保留回滚路径(yum downgrade 或磁盘快照)。