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)”查看