漏洞背景
2019年10月23日,PHP 官方发布了在 nginx 配置不当的情况下php-fpm 可导致远程代码执行的漏洞更新。
此漏洞是由国外安全研究员 Andrew Danau 在9 月14日至18日举办的Real World CTF 中解决一道CTF题目时发现的,向目标服务器URL发送%0a符号时,服务返回异常,疑似存在漏洞。
漏洞影响版本
PHP 7.0 版本
PHP 7.1 版本
PHP 7.2 版本
PHP 7.3 版本
Nginx + php-fpm 的服务器,在使用如下配置的情况下,都可能存在远程代码执行漏洞。
location ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass php:9000;
...
}
}
漏洞成因
因为“fpm_main.c”文件的第1150行代码中由于\n(%0a)的传入导致nginx传递给php-fpm的PATH_INFO为空。
进而导致可以通过FCGI_PUTENV与PHP_VALUE相结合,修改当前的php-fpm进程中的php配置,在特殊构造的配置生效的情况下可以触发任意代码执行。