php-fpm远程代码执行漏洞(CVE-2019-11043)

综述

近日,国外安全研究员公布了一个存在于 php-fpm 中的漏洞(CVE-2019-11043),在某些特定Nginx 配置中,该漏洞可能会导致远程代码执行。

漏洞存在于文件sapi/fpm/fpm/fpm_main.c(https://github.com/php/php-src/blob/master/sapi/fpm/fpm/fpm_main.c#L1140),其中假设env_path_info的前缀等于php脚本的路径,但是实际上代码不会检查此假设是否满足,缺少该检查会导致“path_info”变量中的指针无效。当在某些Nginx 配置中,攻击者可以使用换行符(编码格式为%0a)来破坏fastcgi_split_path_info指令中的regexp,regexp损坏将导致空PATH_INFO,从而触发该漏洞。

据了解,该漏洞是研究员Andrew Danau在一场CTF比赛过程中偶然发现的,当他向服务器 URL发送 %0a 时,服务器返回异常,深入研究后发现此漏洞。

参考连接:

https://lab.wallarm.com/php-remote-code-execution-0-day-discovered-in-real-world-ctf-exercise/

受影响版本

nginx + php-fpm环境中,使用如下 nginx 配置,所有 PHP 7+ 版本均受影响(PHP 7.0 、PHP 7.1 、PHP 7.2 、PHP 7.3 ),且目前在PHP 5.6 版本上也可造成崩溃。

特定的nginx配置如下:

1234567   location ~ [^/]\.php(/|$) {        fastcgi_split_path_info ^(.+?\.php)(/.*)$;        fastcgi_param PATH_INFO       $fastcgi_path_info;        fastcgi_pass   php:9000;        ...  }}

安全建议  

  1. PHP官方已于10月12号发布补丁,详情参考链接,建议受影响用户升级进行修复。
  2. 检查 nginx 配置,如果存在上述易受攻击配置,建议删除

fastcgi_split_path_info ^(.+?\.php)(/.*)$;

fastcgi_param PATH_INFO       $fastcgi_path_info;

参考链接:

https://bugs.php.net/patch-display.php?bug_id=78599&patch=0001-Fix-bug-78599-env_path_info-underflow-can-lead-to-RC.patch&revision=latest

发表评论

评论已关闭。

相关文章