【漏洞通告】PHP-FPM在Nginx特定配置下任意代码执行漏洞(CVE-2019-11043)

漏洞描述

PHP-FPM(FastCGI Process Manager:FastCGI进程管理器)是一个PHPFastCGI管理器,对于PHP 5.3.3之前的php来说,是一个补丁包 [1]  ,旨在将FastCGI进程管理整合进PHP包中。

在 https://github.com/php/php-src/blob/master/sapi/fpm/fpm/fpm_main.c#L1150 中由于\n(%0a)的传入导致nginx传递给php-fpm的PATH_INFO为空。进而导致可以通过FCGI_PUTENV与PHP_VALUE相结合,修改当前的php-fpm进程中的php配置。在特殊构造的配置生效的情况下可以触发任意代码执行。但由于是配置文件的开放性,还请使用 nginx+php-fpm 的服务管理员/运维人员及时做好自查自检工作。

漏洞编号

CVE-2019-11043

漏洞危害

在 nginx 配置不当的情况下 php-fpm 可导致远程代码执行的漏洞更新。

漏洞等级

中危
受影响范围

完全复制Nginx官方给出的php-fpm示例配置的用户受到此漏洞影响。

修复方案

  1. 修改 nginx 配配置文件中fastcgi_split_path_info的正则表达式,不允许.php之后传入不可显字符
  2. 暂停使用 nginx+php-fpm 服务
  3. 删除如下配置

fastcgi_split_path_info ^(.+?\.php)(/.*)$;

fastcgi_param PATH_INFO       $fastcgi_path_info;