PHP-FPM 在特定 NGX 配置下存在远程代码执行漏洞(CVE-2019-11043)
描述
在 NGX 配置项存在 fastcgi_split_path_info
参数时在处理带有 %0a
的请求时遇到换行符 \n
会导致 PHP 的 PATH_INFO
参数为空,进而导致特定的攻击请求会修改 PHP-FPM 进程中的相关环境配置,在特殊配置情况下可导致远程代码执行漏洞。
实例
在类似以下配置字段时即存在漏洞
location ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass php:9000;
...
}
}
因为 APACHE2 服务器 PATH_INFO 的支持度较完善,因此不存在此漏洞,请 PHP-FPM & NGX 用户排查此段配置。
修复
请更新至最新版源码进行重新编译(强烈建议),若无法进行重新编译/安装,可使用以下方式进行暂时封堵。
在每个 PHP 的判断 location
前添加以下一行配置
rewrite ^(.*?)\n $1; # 修复 CVE-2019-11043 漏洞(只添加此行即可!!!)
location ~ \.php(/|$) {
...
fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
...
}
小贴士:在检测到存在 \n 时进行重写,清除参数。
测试
可按照 PHP 官网的讨论进行复测。
附录
参考链接
- 【漏洞预警】PHP-FPM 在特定 NGINX 配置下远程代码执行漏洞(CVE-2019-11043) - 阿里云
- env_path_info underflow in fpm_main.c can lead to RCE - PHP
本文由 柒 创作,采用 知识共享署名4.0
国际许可协议进行许可。
转载本站文章前请注明出处,文章作者保留所有权限。
最后编辑时间: 2019-10-24 14:55 PM
这个貌似阿里云也提示了