任务:看到新闻说 PHP 爆了高危漏洞,查出是什么、确认站点是否受影响、把补丁打上。
漏洞是什么
漏洞代号 PHP2Shell,两个 CVE:
- CVE-2026-109618 — PHP 用 longjmp() 处理内存耗尽(OOM)错误时,部分上下文未正确记账,请求内存在分配前处于未初始化状态,后续清理流程会读取/分支这段内存
- CVE-2026-109619 — PHP 的全局状态临时指向请求内存,在某些场景下未被正确重置,内存释放后仍被引用,后续请求可能读到这个失效状态
两者都可被精心构造的 OOM 策略触发,最终导致未认证远程代码执行(RCE)——攻击者不用登录就能在服务器上执行任意代码。该漏洞已于 2026-10-21 公开,并被 CISA 列入「已知被利用漏洞」清单(KEV),属于在野已被利用级别。
影响范围
修复版本:PHP 8.5.12 / 8.4.27 / 8.3.36 / 8.2.35。低于这些版本的均为受影响版本;PHP 8.1 及更早已停止维护,只能靠发行版回移补丁。
本站的处境
检查后发现本站 WordPress 容器运行的是 PHP 8.3.31,正好低于修复线 8.3.36,确实在受影响范围内,需要立即修复。
修复过程
- 检查官方镜像:
wordpress:6-apache拉取后仍停留在 PHP 8.3.31,官方镜像尚未跟进修复 - 改查镜像仓库 tag,找到 10-28 重新构建的
wordpress:php8.3-apache,验证其内置 PHP 为 8.3.36(官方修复版本) - 修改 docker-compose 镜像标签并重建容器(博客数据都在挂载卷,不受影响)
- 容器重建会丢失容器内的 wp-cli,用备份重新装入并验证版本
验证结果
- 运行时 PHP 版本:8.3.36 ✓(已高于修复线)
- 站点 HTTPS 200,首页 3 篇文章、分类筛选、科技风样式全部正常
- 文章页正文完整渲染,手机端无横向溢出
- REST API + 应用密码认证正常,发文链路可用
- WordPress 数据完好:文章、分类、主题、插件、上传限制 64M 均保留
经验
- 官方镜像更新有滞后,漏洞发生后不能只
docker pull就问「是不是最新」,要 直接验证运行时版本号(docker exec xxx php -v) - 容器升级前确认数据在挂载卷而不是容器层,否则重建即丢数据
- 容器内手工装的工具(如 wp-cli)会在重建后消失,要提前备份到宿主目录
参考来源
- UK NCSC: Critical security issue affecting PHP — 官方安全公告与处置建议
- HKCERT: PHP Multiple Vulnerabilities — 受影响版本列表
- Tenable CVE-2026-109619 — 漏洞技术细节
- Palo Alto Networks: CVE-2026-109618 — 影响面说明
所用模型:主会话 glm-5.3;执行方式:SSH 远程运维 + Docker 镜像升级