经验笔记

PHP2Shell 补丁装了不算完:手机上把确认、升包、重启 worker 一次做完

PHP 官方 10-21 已发 8.5.12/8.4.27/8.3.36/8.2.35。先确认你在不在射程,再升包并重启 php-fpm/apache,最后 php -v——包升了 worker 没换,仍是旧代码。

lxy-jason · 发布于 · 修订于

Markdown 原文 · 结构化正文

据 PHP 官方新闻档(php.net/archive/2026.php,2026-10-21):PHP 8.5.12、8.4.27、8.3.36、8.2.35 修复两枚可导致未认证远程代码执行的严重漏洞——CVE-2026-109618、CVE-2026-109619(社区常称 PHP2Shell;官方预告与安全公告口径为 CVSS v4.0 9.2)。同日 CISA 发告警(cisa.gov … critical-vulnerabilities-php…),敦促立刻打补丁;并写明截至发布时尚未观察到利用,但未补丁仍构成风险。

官方写明:所有对外提供 Web 请求的 PHP 安装都在讨论范围内,包括 PHP-FPM、Apache mod_php、php-cgi、FrankenPHP、LiteSpeed;其中 mod_php 风险最高。修复线以下、尤其是仍在对外服务的版本,才是「在射程里」——百度热搜里「全球 70% 网站都危险了」是舆情标题,不等于你的站点一定可被利用;暴露面扫描数字同样不等同可利用。个人站长更需要的是几分钟确认,而不是跟风关站。

完整修复只有升级;官方也列了若干 ini / 池级权宜(如暂时关掉 session.upload_progress),那只是赶不上升级时的缓冲,不能当安全终点。若短期升不了,或仍停在 PHP 8.1 及更早且没有发行版回移包,CISA 建议把仍对外的 PHP 系统先下线,直到能打上补丁——这和「先确认再决定」并不矛盾:确认自己不在对外服务路径上,本身就是一种处置。

四步:确认 → 升包 → 重启 worker → 再查版本

下面按「先搞清自己在不在射程,再把补丁打完」写。命令按常见发行版示意;包名、服务名以你机器上的为准,云镜像/自编译要看自己的安装来源。

# 1) 确认:当前版本是否早于修复线
php -v
# 修复线(官方 2026-10-21):8.5.12 / 8.4.27 / 8.3.36 / 8.2.35
# 同主版本号低于上述即需升级;8.1 及更早无上游发行版,看发行版/LTS 回移或升级到受支持主版本
# 2) 确认:SAPI 与安装来源(决定重启哪个服务、从哪升包)
php -i | grep -E 'Server API|Loaded Configuration File'
# 常见:FPM/FastCGI → 重启 php*-fpm;Apache 2.0 Handler → 重启 apache2/httpd
command -v php-fpm || true
# Debian/Ubuntu 也可看:dpkg -l 'php*' | head
# RHEL 系也可看:rpm -q php php-fpm 2>/dev/null
# 3) 升包(二选一,按发行版;升完必须重启 worker)
# Debian / Ubuntu:
sudo apt update && sudo apt install --only-upgrade 'php*'
# 若用发行版/ondrej 等源,以该源公告的修复包名为准

# RHEL / Alma / Rocky 等:
sudo dnf update 'php*'
# 较旧环境可用:sudo yum update 'php*'
# 4) 重启 worker,再复核——包升了、进程没换 = 仍在旧代码上
# FPM(服务名因版本而异,先 list 再 restart):
systemctl list-units --type=service 'php*fpm*' --no-pager
sudo systemctl restart php8.3-fpm   # 示例:按上一步实际服务名改
# 或:sudo systemctl restart php-fpm

# Apache + mod_php:
# Debian/Ubuntu: sudo systemctl restart apache2
# RHEL 系:      sudo systemctl restart httpd

php -v
# 确认已落入 8.5.12 / 8.4.27 / 8.3.36 / 8.2.35(或发行版已回移的等价修复包)

多机时同一套动作逐台重复即可:先确认、再升、再重启、再 php -v。容器或编排环境还要确认跑请求的那个镜像/进程已经换新,而不只是宿主机包装上了。

人在地铁上,新闻已经刷到「先下线」

刷到这条时,人多半不在机房:通勤、吃饭、出差。多国机构选择预防性下线,是他们的风险口径;个人站、小业务站更常见的决策是——先花几分钟确认自己在不在射程,再决定升还是临时缓冲。等坐回工位再查,窗口往往已经空转过去。

我给自己留的入口是微信搜 OrcaTerm:小程序即开即用,主机列表和登录配置与 PC / Web 云端同步,不用临时翻密码本。连上之后,用说人话的方式让 AI 把上面四步写成命令并在终端回显,例如:

  • 这台机器 php -v 是多少,有没有到修复线
  • 现在是 FPM 还是 Apache mod_php,该重启哪个服务
  • 按发行版写出升包命令,升完再重启,最后再跑一次 php -v

需要把一段输出丢回值班群时,可以在小程序里把文件取下来再经微信转出去。

边界说清楚:OrcaTerm 缩短的是「人不在电脑前也能立刻上机确认并打完」的空窗;它不是 WAF,也不能替你防 RCE,更不能代替官方补丁。临时 ini 权宜、是否下线对外入口,责任仍在人;php.net 安全公告与 CISA 告警才是处置口径的一手源。

升完再查一遍版本

官方口径可以收成三句:

  1. 先确认是否在射程——版本是否早于 8.5.12 / 8.4.27 / 8.3.36 / 8.2.35;SAPI 与安装来源搞清楚。
  2. 升包之后必须重启 worker——再 php -v;包升了进程没换,仍是旧代码。
  3. 入口要在口袋里——热点刷到时人往往不在工位;手机能开的 SSH,比「等回家开电脑」短一个数量级。

微信搜「OrcaTerm」,官网:https://orcaterm.com/

来源

机器入口