2019年10月23日,php官方发布了在 Nginx 配置不当的情况下 php-fpm 可导致远程代码执行的漏洞。但由于是配置文件的开放性,还请使用nginx+php-fpm 的服务管理员/运维人员及时做好自查自检工作。
【漏洞详情】
PHP 官方发布漏洞通告,提到 Nginx 与 php-fpm 服务器上存在的一处高危漏洞,由于Nginx的 fastcgi_split_path_info 模块在处理带 %0a 的请求时,对换行符 \n 处置不慎导致将 PATH_INFO 置为空,从而导致 php-fpm 组件在处理 PATH_INFO 时存在漏洞,可被攻击者利用进行代码执行攻击。目前开源社区已有漏洞PoC公开。
注:完全复制Nginx官方给出的php-fpm示例配置的用户受到此漏洞影响
【代码示例如下】
```
location ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass php:9000;
...
}
}
```
【修复建议】
修改 nginx 配配置文件中fastcgi_split_path_info的正则表达式,不允许.php之后传入不可显字符暂停使用 nginx+php-fpm 服务
删除如下配置:
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
【漏洞参考】
1)官方更新通告:https://bugs.php.net/bug.php?id=78599
2)开源社区介绍:https://github.com/neex/phuip-fpizdam/