PHP-fpm 漏洞允许在服务器上远程执行代码

可用的 PHP 7.3.11、7.1.33 和 7.2.24 的修正版本,其中 被淘汰 危急 漏洞 PHP-FPM(FastCGI 进程管理器)扩展中的 (CVE-2019-11043),它允许您在系统上远程执行代码。 攻击使用PHP-FPM结合Nginx运行PHP脚本的服务器,已经公开 工作的 开发.

在 nginx 配置中可能会发生攻击,其中通过使用“fastcgi_split_path_info”分隔 URL 的各个部分并定义 PATH_INFO 环境变量来转发到 PHP-FPM,但没有首先使用“try_files $fastcgi_script_name”检查文件是否存在指令或“if (!-f $) document_root$fastcgi_script_name)”。 问题还在于 表现出来 在为 NextCloud 平台提供的设置中。 例如,具有如下结构的配置:

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

您可以在以下页面上跟踪分发包中问题的解决情况: Debian, RHEL, Ubuntu, SUSE/开放SUSE, FreeBSD的, , Fedora。 作为解决方法,您可以在“fastcgi_split_path_info”行之后添加对所请求的 PHP 文件是否存在的检查:

try_files $fastcgi_script_name =404;

该问题是由于操作文件中的指针时出现错误引起的 sapi/fpm/fpm/fpm_main.c。 分配指针时,假定 PATH_INFO 环境变量的值必须包含与 PHP 脚本的路径匹配的前缀。
如果 fastcgi_split_path_info 指令指定使用换行敏感的正则表达式分割脚本路径(例如,许多示例建议使用“^(.+?\.php)(/.*)$”),那么攻击者可以确保空值被写入 PATH_INFO 环境变量。 在这种情况下,进一步执行 将path_info[0]写入零并调用FCGI_PUTENV。

通过请求以某种方式格式化的URL,攻击者可以实现将path_info指针移动到“_fcgi_data_seg”结构的第一个字节,并且向该字节写入零将导致“char* pos”的移动指向先前定位的内存区域的指针。 接下来调用的 FCGI_PUTENV 会用攻击者可以控制的值覆盖此内存中的数据。 指定的内存还存储其他FastCGI变量的值,通过写入它们的数据,攻击者可以创建一个虚构的PHP_VALUE变量并实现其代码的执行。

来源: opennet.ru

添加评论