迅速修复nginx fcgi方式配置漏洞
2010年5月20日,80后爆nginx 0day漏洞,上传图片可入侵100万服务器。目前已经有好几个大型互联网公司被入侵了,公司类型包括电子商务、游戏、SNS等。
现在看来,这个漏洞不属于Nginx的漏洞. 是配置的问题, 现在到处都在说是Nginx的Bug,关闭fix_pathinfo(默认是开启的).就可以解决
临时修复方法如下,可3选其一。
1、设置php.ini的cgi.fix_pathinfo为0,重启php。最方便,但修改设置的影响需要自己评估。
2、给nginx的vhost配置添加如下内容,重启nginx。vhost较少的情况下也很方便。
if ( $fastcgi_script_name ~ \..*\/.*php ) {
return 403;
}
3、禁止上传目录解释PHP程序。不需要动webserver,如果vhost和服务器较多,短期内难度急剧上升;建议在vhost和服务器较少的情况下采用。
njava使用了方法2来修复njava的nginx 0day漏洞
bear@njava:~$ vi /etc/nginx/sites-available/njava
location ~ \.php$ {
fastcgi_pass unix:/data/tmp/php-cgi.sock;
fastcgi_index index.php;
set $path_info "/";
//对$fastcgi_script_name的格式做正则判断,如果是 a.jpg/xxx.jpg这样的类型就返回403
if ( $fastcgi_script_name ~ \..*\/.*php ) {
return 403;
}
set $real_script_name $fastcgi_script_name;
if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {
set $real_script_name $1;
set $path_info $2;
}
fastcgi_param SCRIPT_FILENAME /var/www/njava/$real_script_name;
fastcgi_param script_name $real_script_name;
fastcgi_param path_info $path_info;
include /etc/nginx/fastcgi_params;
}