当前位置:论坛首页 > Linux面板 > Linux面板教程

【漏洞预警】php+nginx远程代码执行漏洞(CVE-2019-11043)

发表在 Linux面板2019-10-23 22:21 [复制链接] 2 4530

在9 月 14 日至 18 举办的 Real World CTF 中,国外安全研究员 Andrew Danau 在解决一道 CTF 题目时发现,向目标服务器 URL 发送 %0a 符号时,服务返回异常,疑似存在漏洞。
9 月 26 日,PHP 官方发布漏洞通告,其中指出:使用 Nginx + php-fpm 的服务器,在部分配置下,存在远程代码执行漏洞(CVE-2019-11043)。并且该配置已被广泛使用,危害较大。
漏洞 PoC 在 10 月 22 日公开。

漏洞描述
Nginx 上 fastcgi_split_path_info 在处理带有 %0a 的请求时,会因为遇到换行符 \n 导致 PATH_INFO 为空。而 php-fpm 在处理 PATH_INFO 为空的情况下,存在逻辑缺陷。攻击者通过精心的构造和利用,可以导致远程代码执行。

影响范围
Nginx + php-fpm 的服务器,在使用如下配置的情况下,都可能存在远程代码执行漏洞。
  1. location ~ [^/]\.php(/|$) {
  2.     fastcgi_split_path_info ^(.+?\.php)(/.*)$;
  3.     fastcgi_param PATH_INFO       $fastcgi_path_info;
  4.     fastcgi_pass   php:9000;
  5.     ...
  6.   }
  7. }
复制代码

宝塔配置的nginx+php-fpm配置文件默认包含文件检查配置,不受此漏洞影响
宝塔的nginx+php配置如下:
  1. location ~ [^/]\.php(/|$)
  2. {
  3.     try_files $uri =404;
  4.     fastcgi_pass  unix:/tmp/php-cgi-72.sock;
  5.     fastcgi_index index.php;
  6.     include fastcgi.conf;
  7.     include pathinfo.conf;
  8. }

  9. >>pathinfo.conf code:
  10. set $real_script_name $fastcgi_script_name;
  11. if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {
  12.     set $real_script_name $1;
  13.     set $path_info $2;
  14. }
  15. fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;
  16. fastcgi_param SCRIPT_NAME $real_script_name;
  17. fastcgi_param PATH_INFO $path_info;
复制代码

解决方案(宝塔配置的nginx+php-fpm不受此漏洞影响)
增加一行文件检查配置:
  1. try_files $uri =404;
复制代码

参考资料
https://bugs.php.net/bug.php?id=78599
https://lab.wallarm.com/php-remo ... world-ctf-exercise/
https://github.com/neex/phuip-fpizdam


使用道具 举报 只看该作者 回复
发表于 2019-10-23 23:05:25 | 显示全部楼层
感谢提醒
使用道具 举报 回复
发表于 2019-10-24 08:46:16 | 显示全部楼层
使用道具 举报 回复 支持 反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

企业版年付运维跟进群

普通问题处理

论坛响应时间:72小时

问题处理方式:排队(仅解答)

工作时间:白班:9:00 - 18:00

紧急问题处理

论坛响应时间:10分钟

问题处理方式:1对1处理(优先)

工作时间:白班:9:00 - 18:00

工作时间:晚班:18:00 - 24:00

立即付费处理
快速回复 返回顶部 返回列表