PHP 远程代码执行缝隙安全公告

颁布功夫 2019-10-24

缝隙编号和级别


CVE编号:CVE-2019-11043,,,,,,,,危险级别:高危,,,,,,,,CVSS分值:官方未评定


影响版本


当Nginx + php-fpm 的服务器有如下配置的时辰,,,,,,,,城市出现RCE缝隙


  location ~ [^/]\.php(/|$) {

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

       fastcgi_param PATH_INFO       $fastcgi_path_info;

       fastcgi_pass   php:9000;

       ...

 }

}


当启用了上述 Nginx 配置后,,,,,,,,以下 PHP 版本受本次缝隙影响,,,,,,,,另表,,,,,,,,PHP 5.6版本也受此缝隙影响,,,,,,,,但目前只能Crash,,,,,,,,不成以远程代码执行:


PHP 7.0 版本

PHP 7.1 版本

PHP 7.2 版本

PHP 7.3 版本


缝隙概述


PHP-FPM(FastCGI流程治理器)是另一种PHP FastCGI实现,,,,,,,,拥有一些其他职能,,,,,,,,可用于各类规模的站点,,,,,,,,尤其是忙乱的站点。。。。。。


对于PHP 5.3.3之前的php来说,,,,,,,,PHP-FPM是一个补丁包,,,,,,,,旨在将FastCGI过程治理整合进PHP包中。。。。。。若是你使用的是PHP 5.3.3之前的PHP的话,,,,,,,,就必须将它patch到你的PHP源代码中,,,,,,,,在编译装置PHP后能力够使用。。。。。。而PHP 5.3.3已经集成php-fpm了,,,,,,,,不再是第三方的包了。。。。。。PHP-FPM提供了更好的PHP过程治理方式,,,,,,,,能够有效节造内存和过程、能够滑润沉载PHP配置。。。。。。


在9 月 14 日至 18 进行的 Real World CTF 中,,,,,,,,国表安全钻研员 Andrew Danau 在解决一路 CTF 标题时发现,,,,,,,,向指标服务器 URL 发送 %0a 符号时,,,,,,,,服务返回异常,,,,,,,,疑似存在缝隙。。。。。。


9 月 26 日,,,,,,,,PHP 官方颁布缝隙公告,,,,,,,,其中指出:使用 Nginx + php-fpm 的服务器,,,,,,,,在部门配置下,,,,,,,,存在远程代码执行缝隙。。。。。。并且该配置已被宽泛使用,,,,,,,,风险较大。。。。。。


Nginx 上 fastcgi_split_path_info 在处置带有 %0a 的要求时,,,,,,,,会由于遇到换行符 \n 导致 PATH_INFO 为空。。。。。。而 php-fpm 在处置 PATH_INFO 为空的情况下,,,,,,,,存在逻辑缺点。。。。。。攻击者通过精心的机关和利用,,,,,,,,能够导致远程代码执行。。。。。。


缝隙验证


POC:https://github.com/neex/phuip-fpizdam。。。。。。


建复建议


PHP已于10月12号颁布该缝隙补丁,,,,,,,,请参考以下链接装置补�。。。。。。�


https://bugs.php.net/patch-display.php?bug_id=78599&patch=0001-Fix-bug-78599-env_path_info-underflow-can-lead-to-RC.patch&revision=latest


由于缝隙利用必要Nginx+php-fpm环境,,,,,,,,用户默认装置的配置不受影响,,,,,,,,为确保安全,,,,,,,,建议您查抄本地 Nginx 配置文件

CentOS默认目录为/etc/nginx/nginx.conf


确认是否存在上述风险配置,,,,,,,,若是存在,,,,,,,,建议您找到并删除如下配置项:


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

fastcgi_param PATH_INFO       $fastcgi_path_info;


参考链接


https://github.com/neex/phuip-fpizdam