PHP 两个 9.2 分远程执行漏洞详解:WordPress 站长请立刻自查升级

PHP 两个 9.2 分远程执行漏洞详解:WordPress 站长请立刻自查升级

一、发生了什么

10 月 21 日 13:30(UTC),PHP 官方一口气发布了四个安全版本:8.5.12、8.4.27、8.3.36 与 8.2.35,一次性修复了两个可被未授权远程利用的代码执行漏洞。由于影响面横跨几乎所有跑在 PHP 之上的 Web 应用,社区给它起了个代号——「PHP2Shell」。

两个漏洞编号分别是 CVE-2026-109618 与 CVE-2026-109619,CVSS 评分均为 9.2,属于「严重」级别。更值得玩味的是发现链路:据多方复盘,这两个潜伏多年的底层缺陷,最初是由 AI(OpenAI 的 GPT-5.6 Sol)在分析 PHP 源码时辅助定位出来的——这也让「AI 挖内核级老洞」第一次成为一个公开事件的一部分。

二、它到底有多危险

多数人听到「远程代码执行」会下意识以为需要登录、需要上传、需要特定插件配合。但这次还真不是:一个未认证的请求就足以触发攻击,而且发生在任何应用代码运行之前。你不用装任何有问题的组件,也不需要攻击者拿到后台——只要底层 PHP 没过补丁,就处于打击范围内。

官方把 mod_php 列为最高风险配置,PHP-FPM、php-cgi、FrankenPHP、LiteSpeed 同样无一幸免。

三、两个漏洞的技术原理

CVE-2026-109618:越界内存处理触发「释放未初始化内存」

PHP 用 memory_limit 限制单个请求的内存占用,超限时通过 longjmp() 直接中断请求并抛出 OOM。问题在于,这个中断可能发生在请求数据只初始化到一半的时刻——最典型的场景是解析 multipart/form-data 的文件上传。

此时请求清理流程会把这份「半生不熟」的数据当成有效数据,试图 free 一块从未被正确初始化的内存;而那块内存里,可能还残留着攻击者通过早前分配控制的数据。于是「释放残留数据 + 后续再访问」,一步步演变成内存破坏,最终通向远程代码执行。

CVE-2026-109619:跨请求残留的「幽灵全局状态」

第二个漏洞更隐蔽:请求自身拥有的内部状态,在其底层内存被释放后仍可能存活(比如发生致命错误之后)。同一个 worker 处理的下一个请求,可能在正常初始化把它重置之前,就先使用了这份过期状态。

攻击者只需要先制造一次致命错误,再精心构造后续请求,就能把这份残留状态变成武器。这类漏洞难就难在它藏在 PHP 运行时最底层的生命周期管理里,而不是某个应用或框架的业务逻辑里——常规代码审计根本看不到。

四、影响范围

以下版本之前的正式分支全部受影响:

  • PHP 8.2.x < 8.2.35
  • PHP 8.3.x < 8.3.36
  • PHP 8.4.x < 8.4.27
  • PHP 8.5.x < 8.5.12

8.1 及更老的 EOL 分支同样受影响,但官方不再主动修复,仅对 7.4 / 8.0 / 8.1 提供了源码级的最小补丁。换句话说,WordPress、Drupal、Joomla、Laravel、Nextcloud、phpMyAdmin、MediaWiki 这类跑在 PHP 上的系统,只要底层 PHP 没补,就全都处在风险里。

五、自查三步走

别只看网页正不正常——那没用,漏洞在运行时层。学运维,直接对版本:

php -v
php-fpm -v        # 或 php-fpm8.3 -v 等具体版本号

注意:CLI 与 Web 服务很可能跑着不同的 PHP 版本,务必确认 Web 实际使用的那一份。宝塔 / LNMP / 云镜像用户,直接看面板里「网站—PHP 版本」和当前实际运行的版本号。

六、修复与临时缓解

彻底解决只有一条路:升级到 8.5.12 / 8.4.27 / 8.3.36 / 8.2.35。用发行版源的,各家 Linux 发行版已提前拿到补丁,直接更新系统包更省事。

如果暂时无法升级,至少先做这几件事缩小攻击面:

  • CVE-2026-109618:把 memory_limit 设为 -1(用 php_admin_value 确保应用无法覆盖回去),并压低 post_max_size 与 upload_max_filesize;
  • CVE-2026-109619:设置 session.upload_progress.enabled=0 并重启所有 worker;PHP 8.5 上再补一条 fatal_error_backtraces=0;
  • 在 FPM 池里设 pm.max_requests=1(mod_php 对应 MaxRequestsPerChild=1),阻断跨请求状态传递;
  • 用 WAF 拦截异常的 multipart/form-data 请求,并持续留意 PHP 进程异常退出与陌生进程创建。

再次强调:缓解措施只能缩小攻击面,不能替代升级。趁着还没被扫到,尽快动手。

七、一点个人想法

这次事件最值得咀嚼的,其实不只是漏洞本身,而是「发现链路」的迁移:从人工审计、fuzzing,到如今由大模型在海量源码里定位出潜伏多年的内存管理缺陷。当 AI 把「找漏洞」的边际成本打下来,防御方和攻击方的响应窗口会被一起压缩。

对站长来说,结论很直白:「及时更新」正从可选项变成一种生存技能。毕竟这一次,替你站岗的不是某个安全公司的人工研究员,而是先于你一步跑完源码的一行行模型推理。

延伸阅读

© 版权声明
THE END
喜欢就支持一下吧
点赞6085 分享
评论 抢沙发
头像/SUENCA
欢迎您留下宝贵的见解!
提交
头像/SUENCA

昵称

取消
昵称表情代码图片快捷回复

    暂无评论内容