nginx文件路径处理远程命令执行漏洞

基本字段

漏洞编号:
SSV-19666
披露/发现时间:
未知
提交时间:
2010-05-21
漏洞等级:
漏洞类别:
其他类型
影响组件:
Nginx
(0.8,0.7,0.6)
漏洞作者:
未知
提交者:
Knownsec
CVE-ID:
补充
CNNVD-ID:
补充
CNVD-ID:
补充
ZoomEye Dork:
补充

来源

漏洞详情

贡献者 Knownsec 共获得  0KB

nginx是多平台的HTTP服务器和邮件代理服务器。

nginx可以被配置为以CGI的方式支持PHP的运行,nginx在处理PHP脚本文件路径的解析时存在问题。如果网站允许上传文件,而且上传文件路径可得到,远程攻击者可以利用此漏洞上传包含恶意代码的文件并得到执行,实现以Web进程权限执行任意命令。

问题出现在nginx传递访问的URL和后续的脚本路径提取过程中,攻击者可以上传允许上传的文件类型,文件中包含恶意代码,得到上传文件通过Web可访问的URL后,在其后添加任意php后缀的文件名进行访问,存在漏洞的处理过程会把上传的文件作为CGI脚本执行。

nginx默认以cgi的方式支持php的运行,譬如在配置文件当中可以以

location ~ .php$ { root html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; include fastcgi_params; }

的方式支持对php的解析,location对请求进行选择的时候会使用URI环境变量进行选择,其中传递到后端Fastcgi的关键变量 SCRIPT_FILENAME由nginx生成的$fastcgi_script_name决定,而通过分析可以看到$fastcgi_script_name是直接由URI环境变量控制的,这里就是产生问题的点。而为了较好的支持PATH_INFO的提取,在PHP 的配置选项里存在cgi.fix_pathinfo选项,其目的是为了从SCRIPT_FILENAME里取出真正的脚本名。 那么假设存在一个http://www.80sec.com/80sec.jpg,我们以如下的方式去访问 http://www.80sec.com/80sec.jpg/80sec.php

将会得到一个URI

/80sec.jpg/80sec.php

经过location指令,该请求将会交给后端的fastcgi处理,nginx为其设置环境变量SCRIPT_FILENAME,内容为

/scripts/80sec.jpg/80sec.php

Igor Sysoev nginx 0.8.x Igor Sysoev nginx 0.7.x Igor Sysoev nginx 0.6.x 临时解决方法:

用户可以采用下面的临时解决方案来避免漏洞的威胁:

  • 修改运行配置

    修改配置文件PHP的配置文件php.ini,把默认的如下行: cgi.fix_pathinfo=1

    修改为: cgi.fix_pathinfo=0

    重启nginx服务器。

厂商补丁:

Igor Sysoev

目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:

http://nginx.net/

kalicc felyezzj 共 3  兑换了

PoC (非 pocsuite 插件)

贡献者 Knownsec 共获得   0.5KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
访nginxphprobots.txt/80sec.php
访http://www.80sec.com/robots.txt
HTTP/1.1 200 OK
Server: nginx/0.6.32
Date: Thu, 20 May 2010 10:05:30 GMT
Content-Type: text/plain
Content-Length: 18
Last-Modified: Thu, 20 May 2010 06:26:34 GMT
Connection: keep-alive
Keep-Alive: timeout=20
Accept-Ranges: bytes
访访http://www.80sec.com/robots.txt/80sec.php
HTTP/1.1 200 OK
Server: nginx/0.6.32
Date: Thu, 20 May 2010 10:06:49 GMT
Content-Type: text/html
Transfer-Encoding: chunked
Connection: keep-alive
Keep-Alive: timeout=20
X-Powered-By: PHP/5.2.6
Content-Type
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Brick713 共 4 兑换

参考链接

解决方案

临时解决方案

官方解决方案

升级到最新无漏洞版本

防护方案

人气 2363
评论前需绑定手机 现在绑定

暂无评论

※本站提供的任何内容、代码与服务仅供学习,请勿用于非法用途,否则后果自负