Nginx/OpenResty 特殊配置下内存泄漏
漏洞描述
阿里云应急响应中心监测到国外安全研究者公开了Nginx/OpenResty在特殊配置下存在内存泄漏或目录穿越漏洞详情。
Nginx是一个高性能的HTTP和反向代理web服务器,OpenResty是一个基于 Nginx 与 Lua 的高性能Web平台。近日国外安全研究者公开了Nginx/OpenResty在特殊配置下存在内存泄漏或目录穿越漏洞详情。由于Nginx在rewrite功能实现上存在缺陷,以及OpenResty在ngx.req.set_uri()实现上存在缺陷,如果Nginx配置文件中使用了rewrite或者ngx.req.set_uri(),则攻击者可能可以通过构造恶意请求,从而造成内存泄漏或者目录穿越漏洞。阿里云应急响应中心提醒Nginx/OpenResty用户尽快采取安全措施阻止漏洞攻击。
影响版本
nginx <= v1.17.7
openresty <= v1.15.8.2
安全建议
-
Nginx更新至安全版本>=v1.17.9
-
以下是存在漏洞的配置片段,建议用户自检查配置文件,并禁用相关危险配置。
location ~ /memleak {
rewrite_by_lua_block {
ngx.req.read_body();
local args, err = ngx.req.get_post_args();
ngx.req.set_uri( args["url"], true );
}
}
location ~ /rewrite {
rewrite ^.*$ $arg_x;
}
平滑升级nginx到最新版
一、升级前准备
1、对nginx的配置文件nginx.conf做备份;
2、新建目录/root/nginx,将安装包和脚本上传到该目录下;
3、下载最新稳定版本1.18.0,更多nginx 自动版本更新配置见“lnmp环境搭建篇”
wget http://nginx.org/download/nginx-1.18.0.tar.gz
二、平滑升级nginx
1、开始编译新版本的nginx
cd /root/nginx
tar -zxvf nginx-1.18.0.tar.gz
cd nginx-1.18.0
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module&&make
2、开始重命名旧版本nginx的可执行文件,替换新版本nginx的可执行文件
cd /usr/local/nginx/sbin
mv nginx nginx.old
cp -r /root/nginx/nginx-1.18.0/objs/nginx .
3、检查nginx配置文件的正确性
/usr/local/nginx/sbin/nginx -t
4、开始升级新版nginx
kill -USR2 `cat /usr/local/nginx/logs/nginx.pid`
5、旧版本nginx的pid变成nginx.pid.oldbin
cd /usr/local/nginx/logs
ls -lrt nginx.pid.oldbin
6、关闭旧版本nginx
kill -QUIT `cat /usr/local/nginx/logs/nginx.pid.oldbin`
7、查看新版nginx的版本号
/usr/local/nginx/sbin/nginx -v
更多nginx 常见问题及LNMP集成环境搭建请移步“如何简单的在阿里云centos7.6 64位操作系统上手动搭建LNMP环境(Nginx1.14.2+PHP7.x+mysql5.7)”查看