大工网安告[2026035]
一、 情况分析
PHP 是一种广泛使用的开源服务器端脚本语言,主要运行于 Web 服务器端,支持 Apache mod_php、PHP-FPM(配合 Nginx、Apache mod_proxy_fcgi)、FrankenPHP、LiteSpeed LSAPI 等多种部署方式。W3Techs 统计显示,全球约四分之三的网站使用 PHP 作为服务器 端编程语言,WordPress、Drupal、Joomla、MediaWiki、Magento、phpMyAdmin、Nextcloud、 Laravel、Symfony、WHMCS 等主流应用均依赖 PHP。
近日,监测到官方修复PHP 远程代码执行漏洞(CVE-2026-109618、 CVE-2026-109619),两个漏洞均与 PHP 请求生命周期边界上的状态管理缺陷有关: CVE-2026-109618 利用内存耗尽(OOM)时的 longjmp() 提前退出,使尚未完成初始化的请求内存在 requestshutdown 阶段被错误消费;CVE-2026-109619 利用 worker 全局状态在请求结束后未正确重置,使后续请求在正常初始化之前访问已释放的请求内存。攻击者无需认证,通过构造恶意 HTTP 请求即可触发释放后重用(UAF),进而实现内存泄露和远程代码执行。
威胁类型:代码执行。
技术类型:释放后重用(UAF)、内存 破坏、OOM 状态破坏。
危害描述:可导致无需认证的堆UAF、内存泄露和远程代码执行,攻击者以 Webworker权限执行任意命令,写入WebShell、窃取凭据和业务 数据、横向移动并植入持久化后门。
二、 影响版本
PHP<8.2.35
PHP<8.3.36
PHP<8.4.27
PHP<8.5.12
仍在维护的分支:
PHP8.5、8.4、8.3仍处于现行维护期,应优先升级到对应修复版本或更高版本。
8.2.35是当前可用的修复版本,也是8.2分支最后的升级时间窗口之一;建议尽快规划升级到8.3或更高版本。
已停止维护的分支:
PHP8.1、8.0、7.4及更早版本已停止官方支持,PHP官方不再发布修复版本。 PHP≤7.3/5.x同样已停止维护,官方不提供修复版本,应优先升级。
三、 处置建议
修复解决方案(含漏洞补丁):
官方已发布安全补丁,请及时更新至最新版本:
PHP 8.5.12
PHP 8.4.27
PHP 8.3.36
PHP 8.2.35
1. 升级后必须重启 Apache、PHP-FPM 及所有常驻 worker,确保旧进程不再处理请求;仅替换二进制而不重启进程不能消除风险。
2. 容器环境应重新构建镜像,避免沿用包含旧 PHP 的 layer;Kubernetes 环境应 滚动重启所有 Pod,并确认没有旧 ReplicaSet 继续服务。
3. 发行版仓库(Ubuntu、Debian、RHEL、Alpine 等)和集成环境(宝塔、phpStudy、 XAMPP、Docker 官方镜像等)可能存在同步延迟,请以 `php-v`、`php-fpm-v` 的实际 输出为准,不要仅核对包管理器版本号。
4. PHP 8.1 及更早版本已停止支持,官方不再提供补丁,建议迁移至 PHP8.2 或更高版本;若使用发行版长期支持分支,请以厂商公告为准。
注意:不要使用 RLIMIT_AS 或 RLIMIT_DATA 作为缓解措施。这些限制会导致 mmap() 失败,从而触发 CVE-2026-109618 所依赖的 longjmp() 路径。
临时缓解措施:
暂时无法升级,可采取以下缓解措施并重启全部工作进程。
1、关闭 upload progress
session.upload_progress.enabled = off
FPM pool:
php_admin_flag[session.upload_progress.enabled] = off
2.关闭 fatal backtrace
fatal_error_backtraces = 0
只阻断 109619 已确认的 backtrace 路径,不影响其他变体。
3.限制请求形态
memory_limit = -1
post_max_size = 8M ; 不需要上传时;需要上传可设 32M
upload_max_filesize = 8M ; 必须小于 post_max_size
max_input_vars = 200 ; 默认 1000,按业务调整
max_input_nesting_level = 10 ; 默认 64
max_multipart_body_parts = 20 ; PHP 8.1+,默认可能较大
max_file_uploads = 5 ; 默认 20
4.阻断 multipart/form-data (适用于不需要上传的站点/路径)
Nginx:
map $http_content_type $mp_block {
default 0;
"~*multipart/form-data" 1;
}
server {
if ($mp_block) { return 403; }
}
Apache:
RewriteEngine On
RewriteCond %{HTTP:Content-Type} multipart/form-data [NC]
RewriteRule ^ - [F]
Caddy:
@multipart header Content-Type *multipart/form-data*
respond @multipart 403