PHP远程代码执行漏洞预警(CVE-2019-11043)
字数 1315 2025-08-18 11:39:04

PHP远程代码执行漏洞(CVE-2019-11043)技术分析与防护指南

漏洞概述

CVE-2019-11043是一个存在于PHP-FPM组件中的远程代码执行漏洞,由PHP官方于2019年9月26日披露。该漏洞源于PHP-FPM的fpm_main.c文件中env_path_info的下溢问题,攻击者可利用此漏洞在特定配置环境下实现远程代码执行。

受影响组件

PHP-FPM简介

PHP-FPM(FastCGI Process Manager)是PHP的FastCGI实现,具有以下特点:

  • 提供更好的PHP进程管理方式
  • 有效控制内存和进程
  • 支持平滑重载PHP配置
  • 适用于各种规模站点,特别是高流量网站

版本历史

  • PHP 5.3.3之前:PHP-FPM作为补丁包存在,需手动集成到PHP源代码
  • PHP 5.3.3及之后:PHP-FPM已集成到官方发行版中

漏洞技术细节

漏洞根源

漏洞位于sapi/fpm/fpm/fpm_main.c文件的第1140行,具体问题为:

  1. 代码包含指针运算(pointer arithmetics),假设env_path_info的前缀等于PHP脚本路径
  2. 但代码未验证这一假设是否成立
  3. 缺少检查会导致path_info变量中的指针无效

触发条件

需要满足以下配置环境:

  • Nginx + PHP-FPM组合
  • 使用特定配置(如下所示)

攻击原理

  1. 攻击者使用换行符(%0a编码)破坏fastcgi_split_path_info指令中的正则表达式
  2. 正则表达式损坏导致空PATH_INFO,从而触发漏洞
  3. 后续代码将path_info[0]设为0,然后调用FCGI_PUTENV
  4. 通过精心构造的URL路径长度和查询字符串,使path_info精确指向_fcgi_data_seg结构的第一个字节
  5. 攻击者可创建伪PHP_VALUE fcgi变量,通过特定配置值实现代码执行

受影响配置

漏洞影响使用以下Nginx配置的环境:

location ~ [^/]\.php(/|$) {
    fastcgi_split_path_info ^(.+?\.php)(/.*)$;
    fastcgi_param PATH_INFO $fastcgi_path_info;
    fastcgi_pass   php:9000;
    ...
}

修复方案

临时解决方案

如果业务不需要相关配置,建议删除以下配置项:

  • fastcgi_split_path_info
  • PATH_INFO相关设置

官方修复

  1. 升级到PHP官方最新版本
    • 下载地址:https://github.com/php/php-src
  2. 应用2019年9月26日后的安全更新

防护产品方案

深信服解决方案

  1. 下一代防火墙用户:开启安全防御模块
  2. 云盾用户:已自动更新防护规则,无需手动操作

参考链接

  1. PHP官方漏洞公告:https://bugs.php.net/bug.php?id=78599
  2. PHP源代码仓库:https://github.com/php/php-src

时间线

  • 2019年9月26日:PHP官方发布漏洞公告
  • 2019年10月22日:PoC公开
  • 2019年11月5日:FreeBuf发布预警信息

总结

CVE-2019-11043是一个高危的PHP-FPM远程代码执行漏洞,影响广泛使用的Nginx+PHP-FPM组合环境。管理员应及时检查服务器配置,按照上述方案进行修复或防护,以避免遭受攻击。

PHP远程代码执行漏洞(CVE-2019-11043)技术分析与防护指南 漏洞概述 CVE-2019-11043是一个存在于PHP-FPM组件中的远程代码执行漏洞,由PHP官方于2019年9月26日披露。该漏洞源于PHP-FPM的 fpm_main.c 文件中 env_path_info 的下溢问题,攻击者可利用此漏洞在特定配置环境下实现远程代码执行。 受影响组件 PHP-FPM简介 PHP-FPM(FastCGI Process Manager)是PHP的FastCGI实现,具有以下特点: 提供更好的PHP进程管理方式 有效控制内存和进程 支持平滑重载PHP配置 适用于各种规模站点,特别是高流量网站 版本历史 : PHP 5.3.3之前:PHP-FPM作为补丁包存在,需手动集成到PHP源代码 PHP 5.3.3及之后:PHP-FPM已集成到官方发行版中 漏洞技术细节 漏洞根源 漏洞位于 sapi/fpm/fpm/fpm_main.c 文件的第1140行,具体问题为: 代码包含指针运算(pointer arithmetics),假设 env_path_info 的前缀等于PHP脚本路径 但代码未验证这一假设是否成立 缺少检查会导致 path_info 变量中的指针无效 触发条件 需要满足以下配置环境: Nginx + PHP-FPM组合 使用特定配置(如下所示) 攻击原理 攻击者使用换行符( %0a 编码)破坏 fastcgi_split_path_info 指令中的正则表达式 正则表达式损坏导致空 PATH_INFO ,从而触发漏洞 后续代码将 path_info[0] 设为0,然后调用 FCGI_PUTENV 通过精心构造的URL路径长度和查询字符串,使 path_info 精确指向 _fcgi_data_seg 结构的第一个字节 攻击者可创建伪 PHP_VALUE fcgi变量,通过特定配置值实现代码执行 受影响配置 漏洞影响使用以下Nginx配置的环境: 修复方案 临时解决方案 如果业务不需要相关配置,建议删除以下配置项: fastcgi_split_path_info PATH_INFO 相关设置 官方修复 升级到PHP官方最新版本 下载地址:https://github.com/php/php-src 应用2019年9月26日后的安全更新 防护产品方案 深信服解决方案 : 下一代防火墙用户:开启安全防御模块 云盾用户:已自动更新防护规则,无需手动操作 参考链接 PHP官方漏洞公告:https://bugs.php.net/bug.php?id=78599 PHP源代码仓库:https://github.com/php/php-src 时间线 2019年9月26日:PHP官方发布漏洞公告 2019年10月22日:PoC公开 2019年11月5日:FreeBuf发布预警信息 总结 CVE-2019-11043是一个高危的PHP-FPM远程代码执行漏洞,影响广泛使用的Nginx+PHP-FPM组合环境。管理员应及时检查服务器配置,按照上述方案进行修复或防护,以避免遭受攻击。