0x00 概述
来自Wallarm的安全研究员Andrew Danau在9月14号至16号举办的Real World CTF中,向服务器发送%0a(换行符)时,服务器返回异常信息,疑似存在漏洞。
当Nginx使用特定的fastcgi配置时,存在远程代码执行漏洞,但这个配置并非Nginx默认配置。当fastcgi_split_path_info字段被配置为 ^(.+?\.php)(/.*)$;时,攻击者可以通过精心构造的payload,造成远程代码执行漏洞,该配置已被广泛使用,危害较大。
Nginx 上 fastcgi_split_path_info 在处理带有 %0a 的请求时,会因为遇到换行符 \n 导致nginx传递给php-fpm的 PATH_INFO 为空。而 php-fpm 在处理 PATH_INFO 为空的情况下,存在逻辑缺陷,所以攻击者可以使用换行符(%0a)来破坏`fastcgi_split_path_info`指令中的Regexp。 Regexp被损坏导致PATH_INFO为空,从而触发该漏洞。
0x01 影响范围
当Nginx + php-fpm 的服务器有如下配置的时候,都会出现RCE漏洞
location ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass php:9000;
…
}
}
5.6 crash
7 rce
0x02 漏洞重现
https://github.com/vulhub/vulhub/blob/master/php/CVE-2019-11043/README.zh-cn.md
https://github.com/neex/phuip-fpizdam
//go install
//go get -v
//go build
https://github.com/search?q=fastcgi_split_path&type=Code
某大神分享的nextcloud案例:
https://docs.nextcloud.com/server/17/admin_manual/installation/nginx.html
https://www.zoomeye.org/searchResult?q=nextcloud+%2Bserver:Nginx+%2B&t=all
0x03 数据流量
据说这个exp写得十分精妙。
0x04 修复方案
根据需求,将以下配置删除
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
or
补丁
0x05 结语
还是有不少这样配置的,影响较大。
0x06 参考资料