<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>程默的博客 &#187; CVE-2026-109619</title>
	<atom:link href="https://blog.chacuo.net/tag/cve-2026-109619/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.chacuo.net</link>
	<description>web原理、web架构、web安全、web性能、服务器性能、服务器架构、服务器安全;你不能预知明天，但你可以利用今天。你不能样样顺利，但你可以事事尽力!</description>
	<lastBuildDate>Fri, 23 Oct 2026 12:17:40 +0000</lastBuildDate>
	<language>zh-CN</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>PHP 两个 RCE 漏洞的引擎根因与旧版补丁实践</title>
		<link>https://blog.chacuo.net/1827.html</link>
		<comments>https://blog.chacuo.net/1827.html#comments</comments>
		<pubDate>Fri, 23 Oct 2026 12:17:40 +0000</pubDate>
		<dc:creator>程默</dc:creator>
				<category><![CDATA[ai]]></category>
		<category><![CDATA[CVE-2026-109618]]></category>
		<category><![CDATA[CVE-2026-109619]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[源码分析]]></category>
		<category><![CDATA[漏洞修复]]></category>

		<guid isPermaLink="false">https://blog.chacuo.net/?p=1827</guid>
		<description><![CDATA[# PHP 两个 RCE 漏洞的引擎根因与旧版补丁实践 PHP 的 RCE 安全 &#8230; <a href="https://blog.chacuo.net/1827.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p># PHP 两个 RCE 漏洞的引擎根因与旧版补丁实践</p>
<p>PHP 的 RCE 安全公告出来后，很多人会先去检查 CMS 插件、框架版本和接口参数。这次问题的落点更靠下：两个漏洞都在 PHP 引擎处理请求状态的路径里，业务层多加几条校验不能代替引擎修复。</p>
<p>2026 年 10 月 21 日，PHP 官方发布了 <strong>CVE-2026-109618</strong> 和 <strong>CVE-2026-109619</strong> 的修复版本。官方要求所有对外处理 Web 请求的 PHP 部署核对更新，包括 PHP-FPM、Apache `mod_php`、`php-cgi`、FrankenPHP 和 LiteSpeed。不同 SAPI 的实际可达路径仍有差异，不能把某一种环境的演示直接套到所有部署上。</p>
<p>处理顺序很明确：<strong>先确认线上实际运行的 PHP，再使用官方修复版或供应商验证过的回移包。</strong>旧分支静态源码里看到相似路径，只能说明需要继续分析，不能写成官方确认受影响；补丁能应用也不等于漏洞已经修复。</p>
<p><img style="width:80%" src="http://blog.chacuo.net/wp-content/uploads/2026/10/wpid-php_vuln_engine_layer.png" alt="PHP 漏洞位于引擎请求处理层"></p>
<h2>一、从一次 OOM 异常，追到两个引擎漏洞</h2>
<p>PHP Foundation 的公开复盘提到，2024 年外部安全审计期间，PHP 核心开发者在处理 OOM（内存不足）相关问题时，已经注意到请求状态可能在异常退出后留下隐患。当时还没有找到明确的远程利用路径。</p>
<p>到了 2026 年，Calif 团队在 OpenAI 的 Patch the Planet 项目中借助 <strong>GPT-5.6 Sol</strong> 找到了关键缺陷。OpenAI 也独立报告了同根因问题，并补充了攻击路径；Wiz 则独立报告了两项漏洞。之后由 PHP 维护者主导修复和发布。</p>
<p>这里需要把归因说准确：不是“AI 单独发现并修复了 PHP 的两个漏洞”。公开资料确认的是研究团队、OpenAI、Wiz 与 PHP 维护者分别参与了发现、验证、披露协调和修复。AI 帮助研究人员缩短了代码审查和路径分析时间，最终修复仍由 PHP 维护者完成。</p>
<h2>二、两个根因，用请求生命周期解释</h2>
<h3>CVE-2026-109618：内存不够时，PHP 还在清理半成品</h3>
<p>PHP 处理请求时，会逐步初始化表单、上传文件和内部请求状态。如果内存分配恰好在初始化过程中失败，PHP 会通过 bailout 跳出当前流程；但某些路径上的请求清理仍可能继续，把没有初始化完整的数据当成正常对象处理。</p>
<p>可以把它想成：一张表格才填到一半，程序突然中断，后续清理却按“整张表已经填好”来读取。错误的状态处理可能造成内存破坏，并在特定条件下进一步导致代码执行。</p>
<p>官方公告列举的 OOM 触发因素包括 multipart 请求结构复杂、单个 part 的头部过多，以及空文件控件仍产生元数据等。风险不只取决于请求体总大小；经过解析后，内部对象占用的内存可能明显大于线上数据本身。</p>
<h3>CVE-2026-109619：上一个请求留下的状态，被下一个请求读到了</h3>
<p>PHP-FPM 等长驻 Worker 会连续处理多个请求。请求结束时，请求专属内存会释放；如果某个全局状态仍然指向这块内存，下一个请求可能在正常初始化清空它之前读到旧指针。</p>
<p>这类似于上一位用户用完房间后，房间已经清空，但门牌簿上仍留着旧地址。下一位用户按门牌簿走过去，拿到的却是已经失效的东西。</p>
<p>利用通常需要“前一个请求留下状态”和“后一个请求在初始化前读取状态”两段条件配合。PHP 官方通告说明了上传进度等具体路径；PHP 8.5 的 fatal error backtrace 也涉及一条特定路径。不能简单地把它概括成“所有 FPM 请求都会被同一种方式利用”。</p>
<h2>三、影响版本、CVE 与证据边界</h2>
<p>先区分三种证据：PHP 官方公告列出的受影响范围、PHP 官方为旧维护分支提供的回移补丁，以及我对历史源码样本做的静态比对。它们不是同一层级的结论。</p>
<table style="border-collapse:collapse;border:1px solid #d0d0d0;width:100%;margin:10px 0;">
<tr>
<th style="background:#4a90d9;color:#fff;padding:10px 12px;border:1px solid #3a7bc8;text-align:left;font-weight:600;">版本范围或源码样本</th>
<th style="background:#4a90d9;color:#fff;padding:10px 12px;border:1px solid #3a7bc8;text-align:left;font-weight:600;">CVE-2026-109618</th>
<th style="background:#4a90d9;color:#fff;padding:10px 12px;border:1px solid #3a7bc8;text-align:left;font-weight:600;">CVE-2026-109619</th>
<th style="background:#4a90d9;color:#fff;padding:10px 12px;border:1px solid #3a7bc8;text-align:left;font-weight:600;">建议处理</th>
</tr>
<tr>
<td style="padding:8px 12px;border:1px solid #e0e0e0;">PHP 8.2.x，低于 8.2.35</td>
<td style="padding:8px 12px;border:1px solid #e0e0e0;">官方公告影响范围</td>
<td style="padding:8px 12px;border:1px solid #e0e0e0;">官方公告影响范围</td>
<td style="padding:8px 12px;border:1px solid #e0e0e0;">升级到 8.2.35 或该分支更新的修复版</td>
</tr>
<tr>
<td style="padding:8px 12px;border:1px solid #e0e0e0;background:#f4f6f8;">PHP 8.3.x，低于 8.3.36</td>
<td style="padding:8px 12px;border:1px solid #e0e0e0;background:#f4f6f8;">官方公告影响范围</td>
<td style="padding:8px 12px;border:1px solid #e0e0e0;background:#f4f6f8;">官方公告影响范围</td>
<td style="padding:8px 12px;border:1px solid #e0e0e0;background:#f4f6f8;">升级到 8.3.36 或该分支更新的修复版</td>
</tr>
<tr>
<td style="padding:8px 12px;border:1px solid #e0e0e0;">PHP 8.4.x，低于 8.4.27</td>
<td style="padding:8px 12px;border:1px solid #e0e0e0;">官方公告影响范围</td>
<td style="padding:8px 12px;border:1px solid #e0e0e0;">官方公告影响范围</td>
<td style="padding:8px 12px;border:1px solid #e0e0e0;">升级到 8.4.27 或该分支更新的修复版</td>
</tr>
<tr>
<td style="padding:8px 12px;border:1px solid #e0e0e0;background:#f4f6f8;">PHP 8.5.x，低于 8.5.12</td>
<td style="padding:8px 12px;border:1px solid #e0e0e0;background:#f4f6f8;">官方公告影响范围</td>
<td style="padding:8px 12px;border:1px solid #e0e0e0;background:#f4f6f8;">官方公告影响范围</td>
<td style="padding:8px 12px;border:1px solid #e0e0e0;background:#f4f6f8;">升级到 8.5.12 或该分支更新的修复版</td>
</tr>
<tr>
<td style="padding:8px 12px;border:1px solid #e0e0e0;">PHP 7.4、8.0、8.1</td>
<td style="padding:8px 12px;border:1px solid #e0e0e0;">PHP 官方发布了对应源码回移补丁</td>
<td style="padding:8px 12px;border:1px solid #e0e0e0;">PHP 官方发布了对应源码回移补丁</td>
<td style="padding:8px 12px;border:1px solid #e0e0e0;">优先使用发行版、云厂商或维护方已验证的补丁包；否则严格按目标源码审查和测试</td>
</tr>
<tr>
<td style="padding:8px 12px;border:1px solid #e0e0e0;background:#f4f6f8;">PHP 5.4–7.3 的本次指定末版样本</td>
<td style="padding:8px 12px;border:1px solid #e0e0e0;background:#f4f6f8;">静态检查发现相同类别的 OOM 路径</td>
<td style="padding:8px 12px;border:1px solid #e0e0e0;background:#f4f6f8;">静态检查发现上传进度等相关状态路径</td>
<td style="padding:8px 12px;border:1px solid #e0e0e0;background:#f4f6f8;">研究报告中的补丁是本地候选缓解，不是 PHP 官方回移，也未编译或运行验证</td>
</tr>
<tr>
<td style="padding:8px 12px;border:1px solid #e0e0e0;">PHP 5.3.0、5.3.29</td>
<td style="padding:8px 12px;border:1px solid #e0e0e0;">Apache 2 `mod_php` 源码存在同类 OOM bailout 后继续清理的路径</td>
<td style="padding:8px 12px;border:1px solid #e0e0e0;">本次样本未证实对应的前请求生产者与后请求消费者组合</td>
<td style="padding:8px 12px;border:1px solid #e0e0e0;">不能写成官方确认受影响，也不能据此断言安全；5.3.0 本身没有内置 FPM</td>
</tr>
</table>
<p>表中 5.3–7.3 的内容来自本次指定源码版本的静态分析。它说明这些源码里存在需要继续处理的路径，不代表 PHP 官方逐个版本确认了 CVE，也不代表已经实测出 RCE。PHP 5.3.0 的 Apache2handler 路径与 CVE-2026-109618 同类；CVE-2026-109619 在 PHP 5.3 样本中尚未证实。</p>
<p>PHP 官方公告还指出，PHP 8.1 及更早版本已经不再获得 PHP 项目的常规更新；部分 Linux 发行版、LTS 或托管服务商可能提供自己的回移包。不要只看版本号，最好同时核对包的发行方、更新说明和实际运行构建。</p>
<h2>四、Apache、Nginx、FPM 改变的是路径，不是根因</h2>
<p>漏洞根因在 PHP 引擎，不在 Apache、Nginx、WordPress、框架或业务代码。升级业务代码、加输入校验、隐藏错误信息，都不能替代 PHP 补丁。</p>
<p>但这不等于 SAPI 完全无关。PHP 官方将处理 Web 请求的多种 SAPI 都列为需要关注的部署；官方复盘指出，风险最高且展示出未认证请求在应用代码运行前触发路径的是 Apache `mod_php`。PHP-FPM 也存在需要处理的路径，部分路径依赖具体应用流程、请求状态和同一个 Worker 后续处理请求的条件。</p>
<p>所以更准确的说法是：<strong>漏洞属于 PHP 软件层，不由业务代码写得好不好决定；实际可达路径和利用条件会受 SAPI、模块、配置与应用流程影响。切换 Nginx、FPM 或其他 Web 架构，不等于修复。</strong></p>
<p><img style="width:80%" src="http://blog.chacuo.net/wp-content/uploads/2026/10/wpid-nginx_php_fpm_runtime_architecture1.png" alt="Nginx 通过 FastCGI 把 PHP 请求交给 PHP-FPM"></p>
<h2>五、优先升级；无法马上升级时分层缓解</h2>
<h3>1. 首选官方修复版或供应商补丁</h3>
<p>PHP 官方当前给出的修复版本是 8.2.35、8.3.36、8.4.27 和 8.5.12。若使用 Linux 发行版、云主机、容器镜像或面板托管的 PHP，先确认供应商是否已提供对应安全更新。升级后重启相关 PHP Worker，并确认网站实际运行的构建已改变。</p>
<p>`php -v` 查看的是当前命令行调用到的 PHP，不一定是网站正在使用的 FPM 版本。还要盘点 Web 服务器、FPM pool、容器和多个 PHP 安装目录，避免只升级了 CLI，线上仍连着旧 Worker。</p>
<h3>2. 只能临时缓解时，按实际版本和业务调整</h3>
<p>PHP 官方给出的若干措施只能降低特定路径的风险，不能让未修复构建变成安全版本。下面是一个 <strong>PHP-FPM pool</strong> 配置示例，不能不看业务就整段照抄：</p>
<pre style="background:#f6f8fa !important;color:#1f2937 !important;border:1px solid #d1d5db;border-radius:8px;padding:14px 16px;overflow-x:auto;font-size:14px;line-height:1.65;white-space:pre-wrap;font-weight:400 !important;-webkit-font-smoothing:antialiased;"><code style="display:block;background:transparent !important;background-color:transparent !important;color:#1f2937 !important;line-height:1.65;font-weight:400 !important;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,monospace;">; 放在现有 FPM pool（例如 [www]）中；数值按业务和机器资源调整<br />php_admin_value[memory_limit] = -1<br />; 这里按需要上传文件的站点举例；无上传业务时可按官方建议收紧到 8M<br />php_admin_value[post_max_size] = 32M<br />php_admin_value[upload_max_filesize] = 30M<br />php_admin_value[max_input_nesting_level] = 32<br /><br />; PHP 5.4 及以上；关闭一条上传进度相关路径<br />php_admin_value[session.upload_progress.enabled] = 0<br /><br />; PHP 8.0 及以上；限制 multipart part 数，不限制每个 part 的头部数量<br />php_admin_value[max_multipart_body_parts] = 256<br /><br />; 仅 PHP 8.5 适用<br />php_admin_flag[fatal_error_backtraces] = off<br /><br />; 可选：减少单个 Worker 连续处理请求的数量，性能会受影响<br />pm.max_requests = 1</code></pre>
<p>需要特别注意：</p>
<ul>
<li>`memory_limit = -1` 会取消 PHP 层的内存上限，必须同时评估容器或主机的系统内存边界；不应在没有资源隔离的机器上盲目启用。</li>
<li>无上传业务时，可把 `post_max_size` 收紧到 8M；确需上传时再按业务设定请求体上限，并保持 `upload_max_filesize` 小于 `post_max_size`。请求体字节数不等于解析后的内存占用。</li>
</ul>
<ul>
<li>`max_multipart_body_parts` 只限制 part 数，不等于限制每个 part 的头部数量；它也不是完整修复。</li>
<li>`session.upload_progress.enabled` 只适用于具有该功能的版本；PHP 5.3 没有这项设置。</li>
</ul>
<ul>
<li>`pm.max_requests = 1` 会增加 Worker 回收频率，只是减少跨请求复用机会，挡不住单个请求造成的 OOM。</li>
<li>如果服务完全不需要文件上传，可以在 Web 服务器或 WAF 层拒绝 multipart 请求；这样会影响所有依赖 multipart 的表单和 API。保留上传业务时，应先梳理真实需求再限制请求体、part 数、头部数量和嵌套深度。</li>
</ul>
<h3>业务不接收文件：在 Nginx 拒绝 multipart</h3>
<p>只有确认站点的 PHP 接口都不依赖文件上传时，才考虑在实际转发到 PHP-FPM 的 `location` 中拒绝 `multipart/form-data`。下面的配置要合并进现有 PHP 入口，不要另建一个重复的 `location`：</p>
<pre style="background:#f6f8fa !important;color:#1f2937 !important;border:1px solid #d1d5db;border-radius:8px;padding:14px 16px;overflow-x:auto;font-size:14px;line-height:1.65;white-space:pre-wrap;font-weight:400 !important;-webkit-font-smoothing:antialiased;"><code style="display:block;background:transparent !important;background-color:transparent !important;color:#1f2937 !important;line-height:1.65;font-weight:400 !important;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,monospace;">location ~ \.php$ {<br />    # 本站不接收文件；拒绝 multipart 表单<br />    client_max_body_size 8m;<br />    if ($http_content_type ~* &quot;^[[:space:]]*multipart/form-data($|[;,[:space:]])&quot;) {<br />        return 415;<br />    }<br /><br />    try_files $uri =404;<br />    include fastcgi_params;<br />    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;<br />    fastcgi_pass unix:/run/php/php-fpm.sock;<br />}</code></pre>
<p>把 PHP-FPM socket 换成实际路径，确认没有其他 PHP 转发入口绕过规则，再运行 `nginx -t`。这会让依赖 multipart 的上传表单和 API 失效；它只拦一类请求，不是 PHP 补丁，也不覆盖其他 OOM 或跨请求状态路径。</p>
<p>如果当前公网服务无法及时打补丁或确认供应商修复，可先把受影响入口限制到可信网络，必要时临时下线该服务，等修复、重启和验证完成后再恢复。PHP 补丁发布前，荷兰政府曾预防性关闭部分政府网站；这类下线是应急止损，不是修复本身。现在官方修复版已经发布，优先完成升级。</p>
<h3>3. 老版本自研回移：先追源码，再做验证</h3>
<p>旧版本不要直接拿最新分支的补丁硬套。每个分支的请求生命周期、SAPI 行为和内存所有权都可能不同。本次研究中的 5.3–7.3 补丁只是静态分析后的候选缓解方案，未编译、未跑 PHPT，也未做 FPM、Nginx 或 Apache 实测，不能直接作为生产级补丁推荐。</p>
<p>相对稳妥的过程是：</p>
<ul>
<li>固定目标 PHP 的精确版本和源码，记录原始编译参数、SAPI、扩展与系统库。</li>
<li>分别梳理 OOM、请求初始化/关闭、bailout、multipart、上传进度、Worker 回收和全局状态的生命周期。</li>
</ul>
<ul>
<li>将官方修复提交与目标分支逐个函数对照，先说明旧代码为何会进入危险清理，再设计最小改动；不能只把 `zend_bailout()` 换成 `exit()` 就当成修复。</li>
<li>对补丁做上下文检查和代码审查，确认不会误杀 FPM master、破坏 ABI 或留下新的清理路径。</li>
</ul>
<ul>
<li>在隔离环境编译，运行 PHP 自带测试，再按目标 SAPI 做连续请求、Worker 重启、上传和扩展兼容性回归。</li>
<li>把“补丁能应用”“编译成功”“测试通过”分别记录。只有覆盖目标环境的安全验证完成后，才能讨论上线；单项通过不等于完整安全证明。</li>
</ul>
<h2>六、用 AI 辅助源码分析，先把提示词边界说清楚</h2>
<p>如果你也想用 Codex 辅助做 PHP 漏洞源码排查，可以看看我做的<a href="https://github.com/yunshudev/codex" target="_blank">云枢 Codex 助手桌面版</a>。这次分析中，我用它辅助梳理请求初始化、OOM bailout 和清理路径，再把线索逐项对照官方公告与修复提交。MotoAgent 则可以把公告核对、历史代码比较和补丁复核拆成不同 Agent 任务。工具提供的是分析线索，结论仍要回到源码证据和目标环境测试。</p>
<p>AI 可以协助追代码、对照补丁和起草差异，但不能只凭新版文件名或网上的补丁生成一个“看起来能用”的 diff。下面这段提示词可以作为旧版防御性回移的起点。把版本和源码路径替换成真实值，并在隔离副本里工作：</p>
<pre style="background:#f6f8fa !important;color:#1f2937 !important;border:1px solid #d1d5db;border-radius:8px;padding:14px 16px;overflow-x:auto;font-size:14px;line-height:1.65;white-space:pre-wrap;font-weight:400 !important;-webkit-font-smoothing:antialiased;"><code style="display:block;background:transparent !important;background-color:transparent !important;color:#1f2937 !important;line-height:1.65;font-weight:400 !important;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,monospace;">你是 PHP 源码安全维护者。请只为 PHP [精确版本] 做防御性补丁研究。<br /><br />目标源码目录：[绝对路径]<br />目标部署 SAPI：[Apache mod_php / PHP-FPM / php-cgi / 其他]<br />原始编译参数、扩展和系统库：[逐项填写]<br />官方资料：<br />- https://www.php.net/archive/2026.php#2026-10-21-5<br />- https://github.com/php/php-src/security/advisories/GHSA-w8hw-w9fx-j79w<br />- https://github.com/php/php-src/security/advisories/GHSA-6wmf-4rv5-p3rp<br />- https://github.com/php/php-src/commit/31c0ea7d7ff1d1fccb6492e52dab544011628065<br /><br />请遵守以下要求：<br />1. 先检查目标版本的真实源码，不得套用新版行号。逐项追踪 OOM 处理、请求启动与关闭、SAPI 生命周期、FPM worker 退出、multipart 解析、session 上传进度、fatal/error 状态和相关全局状态；列出文件、函数和代码位置。<br />2. 分开分析 CVE-2026-109618 与 CVE-2026-109619。官方未确认或源码证据不足的路径标记为“未证实”，不得把静态路径推断写成已验证 RCE。<br />3. 先解释目标版本为何进入危险状态，再提出最小改动。遵守该版本的内存所有权、ABI 和 SAPI 约定；不得只把 zend_bailout() 改成 exit/_exit，也不得误杀 FPM master。<br />4. 只有在完整阅读相关源码后，才输出能对应目标版本的 unified diff。每个 hunk 都必须能在目标源码中定位。若无法证明改动安全，请说明无法产出生产级补丁，不要猜代码。<br />5. 逐条解释补丁如何改变状态生命周期、功能变化、Worker 重启或拒绝服务影响、ABI 风险，以及仍未覆盖的路径。<br />6. 提供补丁应用检查、编译、PHP 自带回归测试，以及目标 SAPI 连续请求和 Worker 回收的验证计划。不得生成攻击 payload、shellcode 或针对真实目标的攻击步骤。<br />7. 明确区分“补丁可以应用”“编译成功”“测试通过”和“漏洞已修复”。不要把任何单项检查说成生产安全证明；列出仍需人工代码审查、完整回归和供应商安全审查的事项。</code></pre>
<p>AI 给出的差异仍要由熟悉 PHP 内核的人审查。尤其对停止维护的分支，补丁还可能带来兼容性、崩溃或新的拒绝服务风险。</p>
<h2>七、结论</h2>
<p>问题不在 WordPress 插件、框架校验或某段业务代码，而在 PHP 引擎管理请求状态的方式。先确认网站实际运行的 PHP 构建，再按官方修复版或供应商回移包处理；旧版本则把源码分析、补丁应用、编译和目标 SAPI 回归分开验证。</p>
<p>如果你维护的是 PHP 服务，建议先记下四项：<strong>实际版本、补丁来源、Web SAPI、所有 Worker 是否已重启。</strong> 这比只看一次 `php -v` 更接近真实风险。</p>
<h2>参考资料</h2>
<ul>
<li><a href="https://www.php.net/archive/2026.php#2026-10-21-5" target="_blank">PHP 官方安全公告与修复版本</a></li>
<li><a href="https://github.com/php/php-src/security/advisories/GHSA-w8hw-w9fx-j79w" target="_blank">CVE-2026-109618：RCE via OOM corruption</a></li>
</ul>
<ul>
<li><a href="https://github.com/php/php-src/security/advisories/GHSA-6wmf-4rv5-p3rp" target="_blank">CVE-2026-109619：RCE via stale global state</a></li>
<li><a href="https://github.com/php/php-src/commit/31c0ea7d7ff1d1fccb6492e52dab544011628065" target="_blank">PHP 官方修复提交</a></li>
</ul>
<ul>
<li><a href="https://www.php.net/manual/en/install.fpm.configuration.php" target="_blank">PHP-FPM pool 配置说明</a></li>
<li><a href="https://nginx.org/en/docs/http/ngx_http_map_module.html" target="_blank">Nginx map 模块文档</a></li>
</ul>
<ul>
<li><a href="https://nginx.org/en/docs/http/ngx_http_core_module.html" target="_blank">Nginx HTTP 核心模块文档</a></li>
<li><a href="https://thephp.foundation/blog/2026/10/21/todays-php-security-release-and-how-were-strengthening-php-security/" target="_blank">PHP Foundation：本次安全发布与漏洞发现经过</a></li>
</ul>
<ul>
<li><a href="https://openai.com/index/coordinated-disclosure-of-critical-vulnerabilities/" target="_blank">OpenAI：Patch the Planet 与 PHP 漏洞协作披露</a></li>
<li><a href="https://www.rijksoverheid.nl/actueel/nieuws/2026/10/21/aantal-websites-rijksoverheid-preventief-offline-na-kwetsbaarheden-php" target="_blank">荷兰政府：部分政府网站预防性下线</a></li>
</ul>
<ul>
<li>作者对 PHP 历史版本源码的静态比对（非 PHP 官方逐版本影响确认，未编译或运行验证）</li>
</ul>
<p><strong>证据边界：</strong> 历史版本部分是对本地指定源码样本的静态检查。研究报告记录的补丁通过了 `git apply &#8211;check`，但未编译 PHP、未运行 PHPT、PoC 或目标 Web SAPI 实测；不能将其表述为已验证的生产修复。</p>
]]></content:encoded>
			<wfw:commentRss>https://blog.chacuo.net/1827.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
