PHP-FPM远程代码执行漏洞(CVE-2019-11043)

admin 2023年7月24日10:10:00评论24 views字数 1242阅读4分8秒阅读模式

0x00 简介

在长亭科技举办的 Real World CTF 中,国外安全研究员 Andrew Danau 在解决一道 CTF 题目时发现,向目标服务器 URL 发送 %0a 符号时,服务返回异常,疑似存在漏洞。

在使用一些有错误的Nginx配置的情况下,通过恶意构造的数据包,即可让PHP-FPM执行任意代码。

但由于是配置文件的开放性。还请使用 nginx+php-fpm 的服务管理员/运维人员及时做好自查自检工作。

0x01 漏洞详情

由于n(%0a)的传入导致nginx传递给php-fpm的PATH_INFO为空。

进而导致可以通过FCGI_PUTENV与PHP_VALUE相结合,修改当前的php-fpm进程中的php配置。在特殊构造的配置生效的情况下可以触发任意代码执行。

注:完全复制Nginx官方给出的php-fpm示例配置的用户受到此漏洞影响

示例配置如下:

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

0x02 漏洞复现

在vulhub上已经更新了相应的靶场环境:

https://github.com/vulhub/vulhub/tree/master/php/CVE-2019-11043

拉取镜像环境:
PHP-FPM远程代码执行漏洞(CVE-2019-11043)

环境启动后,访问http://your-ip:8080/index.php即可查看到一个默认页面。

使用https://github.com/neex/phuip-fpizdam中给出的工具,发送数据包:
(前提本机拥有正常的golang环境)
PHP-FPM远程代码执行漏洞(CVE-2019-11043)

可见,这里已经执行成功。

我们访问http://your-ip:8080/index.php?a=id,即可查看到命令已成功执行:

PHP-FPM远程代码执行漏洞(CVE-2019-11043)

注意,因为php-fpm会启动多个子进程,在访问/index.php?a=id时需要多访问几次,以访问到被污染的进程。

0x03 修复建议

1.修改 nginx 配配置文件中fastcgi_split_path_info的正则表达式,不允许.php之后传入不可显字符
2.暂停使用 nginx+php-fpm 服务
3.删除如下配置

fastcgi_split_path_info ^(.+?.php)(/.*)$;
fastcgi_param PATH_INFO $fastcgi_path_info;

0x04 参考链接

https://www.anquanke.com/post/id/189415
https://github.com/vulhub/vulhub/blob/master/php/CVE-2019-11043/README.zh-cn.md
https://mp.weixin.qq.com/s/XPFIEiNvNorfgQHein_NGw


原文始发于微信公众号(菜鸟小新):PHP-FPM远程代码执行漏洞(CVE-2019-11043)

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年7月24日10:10:00
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   PHP-FPM远程代码执行漏洞(CVE-2019-11043)https://cn-sec.com/archives/1901712.html

发表评论

匿名网友 填写信息