PHP远程代码执行漏洞CVE-2019-11043分析
CVE-2019-11043是一种2019年出现的PHP远程代码执行漏洞
Nginx上fastcgi_split_path_info在处理带有 %0a 的请求时,会因为遇到换行符 \n 导致PATH_INFO为空,最终可导致任意代码执行。
利用条件
PHP版本7及fastcgi协议
PHP7以上,使用fpm形式处理请求,需要使用fastcgi协议,并且利用nginx的正则实现pathinfo和filename分离,例如:inidex.php/article/id/234
。
正常情况下,PHP会使用自带的cgi.fix_pathinfo
解析请求中的script_name和pathinfo,以前由于fake.jpg/foo.php
这样的请求导致任意代码执行,现在有选项security.limit_extensions
限制仅php文件可以执行。
nginx正则分离pathinfo
不过上述pathinfo漏洞修复前,普遍采用nginx的正则进行pathinfo分离。如下:
location ~ [^/]\.php(/|$) {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
fas