安全研究

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

发布日期:2010-05-20
更新日期:2010-05-21

受影响系统:
Igor Sysoev nginx 0.8.x
Igor Sysoev nginx 0.7.x
Igor Sysoev nginx 0.6.x
描述:
BUGTRAQ  ID: 40420

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

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

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

<*来源:80sec
  
  链接:http://www.80sec.com/nginx-securit.html
*>

测试方法:

警 告

以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!

访问一个nginx来支持php的站点,在一个任何资源的文件如robots.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的变化说明了后端负责解析的变化,该站点就可能存在漏洞。

http://localhost/%5c%2e%2e%5c%2e%2e%5c%2e%2e%5c%2e%2e%5c%2e%2e%5c%2e%2e%5c%2e%2e%5cwindows%5csystem.ini

建议:
临时解决方法:

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

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

    修改为:
    cgi.fix_pathinfo=0
    
    重启nginx服务器。

厂商补丁:

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

http://nginx.net/

浏览次数:24491
严重程度:0(网友投票)
本安全漏洞由绿盟科技翻译整理,版权所有,未经许可,不得转载
绿盟科技给您安全的保障