新的PHP漏洞可能使攻击者入侵在Nginx服务器上运行的站点
如果您正在NGINX服务器上运行任何基于PHP的网站,并且启用了PHP-FPM功能以提高性能,请当心一个新公开的漏洞,该漏洞可能允许未经授权的攻击者远程入侵您的网站服务器。
该漏洞跟踪为CVE-2019-11043,影响具有某些PHP-FPM配置的网站,可以很容易的利用该漏洞的概念验证(PoC)漏洞进行利用公开发布。
PHP-FPM是另一种PHP FastCGI实现,可为用PHP编程语言编写的脚本提供高级且高效的处理。
主要漏洞是PHP-FPM模块中的“ env_path_info”下溢内存损坏问题,并将其与其他问题链接在一起可能使攻击者能够在易受攻击的Web服务器上远程执行任意代码。
哪些基于PHP的网站容易受到黑客的攻击?
尽管公开发布的PoC漏洞专门针对运行PHP 7+版本的易受攻击的服务器,但PHP-FPM下溢错误也影响早期的PHP版本,并且可以采用其他方式进行武器化。
简而言之,如果存在以下情况,则网站容易受到攻击:
NGINX配置为将PHP页面请求转发到PHP-FPM处理器。
fastcgi_split_path_info指令存在于配置中,并且包含以'^'符号开头和以'$'符号结尾的正则表达式。
PATH_INFO变量是使用fastcgi_param指令定义的。
没有诸如try_files $ uri = 404或if(-f $ uri)之类的检查来确定文件是否存在。
fastcgi_split_path_info指令用于将PHP网页的URL分为两部分,一个值帮助PHP-FPM引擎学习脚本名称,另一个帮助值包含其路径信息。
PoC RCE如何利用PHP FPM进行工作?
根据研究人员的说法,定义fastcgi_split_path_info伪指令的示例正则表达式可以如图所示通过使用换行符进行操作,以使split函数最终将路径信息设置为空。
接下来,由于FPM代码中有一个算术指针,错误地假定env_path_info的前缀等于php脚本的路径,而没有实际验证服务器上文件的存在,因此攻击者可以利用此问题来覆盖数据通过请求目标网站的特制URL在内存中存储。
在后台,PoC漏洞[ 1 (PHuiP-FPizdaM)2 ]研究人员发布了这两个问题的链,以操纵内存并添加自定义php.ini值,如屏幕快照所示,位于PHP-FPM配置文件中。目标服务器,使攻击者可以使用Web Shell执行任意代码。
使用URL路径和查询字符串的精心选择的长度,攻击者可以使path_info精确指向_fcgi_data_seg结构的第一个字节。在其中放置零将向后移动`char * pos`字段,然后跟随FCGI_PUTENV覆盖一些数据(包括其他快速cgi变量)和脚本路径。
使用这种技术,我能够创建一个伪造的PHP_VALUE fcgi变量,然后使用一系列精心选择的配置值来执行代码。
PHP 7更新发布以修补FPM缺陷
如上所述,成功利用先决条件的清单并不罕见,因为一些Web托管提供商正在使用易受攻击的配置,并且许多PHP FPM教程的一部分可在Internet上获得这些配置。
因此,强烈建议用户将PHP更新到最新的PHP 7.3.11和PHP 7.2.24。