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行,具体问题为:
- 代码包含指针运算(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_VALUEfcgi变量,通过特定配置值实现代码执行
受影响配置
漏洞影响使用以下Nginx配置的环境:
location ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass php:9000;
...
}
修复方案
临时解决方案
如果业务不需要相关配置,建议删除以下配置项:
fastcgi_split_path_infoPATH_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组合环境。管理员应及时检查服务器配置,按照上述方案进行修复或防护,以避免遭受攻击。