php2shell漏洞(CVE-2026-109618/109619)在Ubuntu上需手动升级PHP至8.2.35/8.3.36/8.4.27/8.5.12并重启服务,仅apt upgrade不升级主版本,且必须添加ondrej/php PPA源、验证Web运行版本、清理worker内存残留。

php2shell 漏洞(CVE-2026-109618 / CVE-2026-109619)已在 Ubuntu 上确认可利用,**仅靠 apt upgrade 不会自动升级 PHP 主版本**——这是最常踩的坑。你当前的 php -v 显示 8.2.34?那它就在攻击射程内,必须手动指定目标版本并重启服务。
确认当前 PHP 版本和实际运行路径
别信 which php,Web 请求走的是 Web 服务器加载的 PHP 二进制或 FPM socket。先查清楚你真正用的是哪个:
- 终端执行
php -v,看输出是否低于8.2.35、8.3.36、8.4.27或8.5.12 - 执行
php --ini,确认Loaded Configuration File路径,避免配置残留干扰 - 如果是 PHP-FPM,查正在运行的进程:
ps aux | grep php-fpm,注意--prefix或实际二进制路径 - 如果是 Apache +
libapache2-mod-php,执行a2query -m php确认模块是否启用
Ubuntu 使用 APT 升级到修复版本(8.2.35 / 8.3.36 / 8.4.27 / 8.5.12)
Ubuntu 官方源默认不提供最新 PHP 主版本,必须添加 Ondřej Surý 的 PPA 才能获取修复包。跳过这步,apt install php 仍会装旧版。
- 执行
sudo apt update && sudo apt install software-properties-common - 添加 PPA:
sudo add-apt-repository ppa:ondrej/php(如提示 key 错误,加-y参数重试) - 再次更新索引:
sudo apt update - 安装对应修复版本(按需选其一):
• PHP 8.2:sudo apt install php8.2 php8.2-cli php8.2-fpm php8.2-mysql php8.2-curl php8.2-gd php8.2-mbstring php8.2-xml php8.2-zip
• PHP 8.3:sudo apt install php8.3 php8.3-cli php8.3-fpm php8.3-mysql php8.3-curl php8.3-gd php8.3-mbstring php8.3-xml php8.3-zip
• PHP 8.4:sudo apt install php8.4 php8.4-cli php8.4-fpm php8.4-mysql php8.4-curl php8.4-gd php8.4-mbstring php8.4-xml php8.4-zip
• PHP 8.5:sudo apt install php8.5 php8.5-cli php8.5-fpm php8.5-mysql php8.5-curl php8.5-gd php8.5-mbstring php8.5-xml php8.5-zip - 切换 CLI 默认版本(可选):
sudo update-alternatives --config php,选新版本编号
关键:重启服务 + 清理 worker 内存残留
补丁生效 ≠ 漏洞消失。CVE-2026-109619 的机制依赖 worker 进程复用时的内存状态残留,**不重启等于没修**。
立即学习“PHP免费学习笔记(深入)”;
- 若用 PHP-FPM:
sudo systemctl restart php8.2-fpm(把8.2替换为你实际安装的版本) - 若用 Apache:
sudo systemctl restart apache2(确保libapache2-mod-php8.2已安装且模块启用) - 若用 Nginx + PHP-FPM:
sudo systemctl restart php8.2-fpm && sudo systemctl reload nginx - 检查进程是否已更新:
ps aux | grep php-fpm | head -n3,确认路径含8.2.35等字样 - 强制清空所有活跃 worker(尤其高负载环境):
sudo pkill -f "php-fpm: master"再systemctl start,避免旧进程继续响应请求
验证是否真正修复
别只看 php -v 输出。漏洞在 Web 层触发,必须模拟 HTTP 请求验证运行时行为。
- 创建一个测试脚本
/var/www/html/version.php,内容为<?php echo PHP_VERSION; ?>,通过浏览器或curl http://your-server/version.php访问,确认返回值是修复版本号 - 检查
phpinfo()页面中Server API行,确认是FPM/Cgi或Apache 2.0 Handler,且版本一致 - 运行
sudo ss -tlnp | grep :9000(或你配置的 FPM 端口),确认监听进程属于新安装的 PHP 版本路径 - 如果之前有自定义
php.ini,务必检查扩展路径(extension_dir)是否指向新版目录,否则可能因扩展加载失败导致降级回旧二进制
升级不是终点,而是起点。PHP 8.2.35 和后续修复版本只是堵住了两个特定内存状态路径,但它们暴露出的问题更深层:worker 进程长期不重启、配置与二进制版本错配、以及对 php -v 的盲目信任。这些才是下次漏洞来临时,真正决定你服务器生死的细节。



















