解决PHP的 CVE-2026-109618(内存耗尽处理缺陷)与 CVE-2026-109619(释放后使用缺陷)的问题;
下载项目到本地:(项目下载链接在文末)

准备:因为我的项目是php7.1,于是先把项目的php7.1.30升级到php7.1.33(注意右边的版本码)


把php7.1.33的补丁文件上传到服务器的**"/root/buding/php-7.1-CVE-2026-109618-109619.patch"**中去;
第一步测试:patch -p1 --dry-run < "/root/buding/php-7.1-CVE-2026-109618-109619.patch"

都通过了
第二步执行:patch -p1 < "/root/buding/php-7.1-CVE-2026-109618-109619.patch"

第三步:make clean 忘记截图了
第四步 找到之前用过的参数:./config.nice

第五步:make -j$(nproc) && make install 大概10分钟左右,cpu会跑满

运行代码:
php
<?php
// 1. 先随便输出一点东西,证明 PHP 活着
echo "【1】PHP 正常运行中<br>";
// 2. 设置 10M 内存限制
ini_set('memory_limit', '10M');
// 3. 尝试分配 20M 内存(必定触发 OOM)
echo "【2】准备开始吃内存...<br>";
$a = str_repeat('1', 1024 * 1024 * 20);
// 4. 如果补丁没生效,PHP 会报错中断,你绝对看不到下面这句
echo "【3】如果你在浏览器看到了这句话,说明内存分配成功了(补丁绝对没生效,或者限制没起作用)<br>";
效果对比 :这是重启php7.1.33前的:

这是重启php7.1.33后的:

在标准的部署下:
PHP-FPM 的子进程在分配 20M 内存时触发
_exit(1),瞬间死亡。它死得太快,连
HTTP/1.1 500 Internal Server Error的响应头都没来得及发给 Nginx。Nginx 发现后端连接突然断了,就会在 Nginx 的错误日志里记录
upstream prematurely closed connection。Nginx 最终给浏览器返回
502 Bad Gateway。
出现502表示补丁打上了
以上所有运行的命令:
bash
cd /www/server/php/71/src
patch -p1 --dry-run < "/root/buding/php-7.1-CVE-2026-109618-109619.patch"
没问题后再执行下面的
patch -p1 < "/root/buding/php-7.1-CVE-2026-109618-109619.patch"
make clean
./config.nice
make -j$(nproc) && make install
#最后在重启php才会生效
面对【CVE-2026-109618与CVE-2026-109619】,PHP版本太老又不太好升级的朋友可以试试这个方法。
项目链接:https://github.com/vperetti/php-cve-2026-109618-109619-backports
这里是补丁的解读,有兴趣的可以看看:CVE-2026-109618 和 CVE-2026-109619的修复补丁解读-CSDN博客