对线上生产环境服务器进行漏洞扫描, 发现有两台前置机器存在Nginx range filter模块数字错误漏洞, 当使用nginx标准模块时,攻击者可以通过发送包含恶意构造range域的header 请求,来获取响应中的缓存文件头部信息。该漏洞存在于Nginx 1.13.3以下版本中, 只要Ningx开启了缓存功能, 攻击者即可发送恶意请求进行远程攻击造成信息泄露。也就是说当Nginx服务器使用代理缓存的情况下, 缓存文件头可能包含后端服务器的真实IP地址或其它敏感信息,攻击者就可以利用该漏洞拿到这些敏感信息,从而导致信息泄露。故此漏洞存在安全隐患, 需要尽快修复.

该漏洞修复方案一:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
找到nginx的源码解压包, 在nginx的源码包中找到ngx_http_range_filter_module.c
[root@dtin ~]# cd /data/software/nginx-1.12.2
[root@dtin nginx-1.12.2]# vim ./src/http/modules/ngx_http_range_filter_module.c
.......
        if (suffix) {
            start = content_length - end;
            end = content_length - 1;
        }
.......
 
将上面ngx_http_range_filter_module.c源码文件中的"start = content_length - end;"改为“start = (end < content_length) ? content_length - end : 0;"
即改为:
[root@dtin nginx-1.12.2]# vim ./src/http/modules/ngx_http_range_filter_module.c
.......
        if (suffix) {
            start = (end < content_length) ? content_length - end : 0;
            end = content_length - 1;
        }
.......
 
接着重新编译nginx,并进行替换即可。

该漏洞修复方案一 (推荐这一种)

由于是生产环境, 线上业务不能停, 故需要进行Nginx平滑升级, 升级过程中服务不能中断. Nginx平滑升级原理如下介绍:
多进程模式下的请求分配方式
Nginx默认工作在多进程模式下,即主进程(master
process)启动后完成配置加载和端口绑定等动作,fork出指定数量的工作进程(worker
process),这些子进程会持有监听端口的文件描述符(fd),并通过在该描述符上添加监听事件来接受连接(accept)。

信号的接收和处理
Nginx主进程在启动完成后会进入等待状态,负责响应各类系统消息,如SIGCHLD、SIGHUP、SIGUSR2等。

Nginx信号
主进程支持的信号
- TERM, INT: 立刻退出
- QUIT: 等待工作进程结束后再退出
- KILL: 强制终止进程
- HUP: 重新加载配置文件,使用新的配置启动工作进程,并逐步关闭旧进程。
- USR1: 重新打开日志文件
- USR2: 启动新的主进程,实现热升级
- WINCH: 逐步关闭工作进程

工作进程支持的信号
- TERM, INT: 立刻退出
- QUIT: 等待请求处理结束后再退出
- USR1: 重新打开日志文件

=================nginx平滑升级操作记录====================

备份之前安装的nginx (其实主要备份的是sbin/nginx  和 conf配置目录, 这里我全部备份)

[app@web-node01 ~]# /data/nginx/sbin/nginx -v
nginx version: nginx/1.12.2
[app@web-node01 ~]# cp -r /data/nginx /data/nginx.old
[app@web-node01 ~]# ll /data/
total
drwxr-xr-x app app Sep : nginx
drwxr-xr-x app app Nov : nginx.old 下载nginx1..1的安装包, 解压并进行编译安装. 安装路径需与旧版一致
[app@web-node01 software]# ll nginx-1.14..tar.gz
-rw-rw-r-- app app Nov : nginx-1.14..tar.gz
[app@web-node01 software]# tar -zvxf nginx-1.14..tar.gz
[app@web-node01 software]# cd nginx-1.14./
[app@web-node01 nginx-1.14.]# ./configure --prefix=/data/nginx --user=app --group=app --with-http_ssl_module --with-http_flv_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream
[app@web-node01 nginx-1.14.]# make && make install 发送USR2信号
向主进程发送USR2信号,Nginx会启动一个新版本的master进程和工作进程,和旧版一起处理请求
[app@web-node01 nginx-1.14.]# ps -ef|grep nginx
app : pts/ :: grep --color=auto nginx
app Sep21 ? :: nginx: worker process
app Sep21 ? :: nginx: worker process
app Sep21 ? :: nginx: worker process
app Sep21 ? :: nginx: worker process
app Sep21 ? :: nginx: worker process
app Sep21 ? :: nginx: worker process
app Sep21 ? :: nginx: worker process
app Sep21 ? :: nginx: worker process
app Sep21 ? :: nginx: cache manager process
root Sep15 ? :: nginx: master process /data/nginx/sbin/nginx [app@web-node01 nginx-1.14.]# kill -USR2 [app@web-node01 nginx-1.14.]# ps -ef|grep nginx
root : ? :: nginx: master process /data/nginx/sbin/nginx
app : ? :: nginx: worker process
app : ? :: nginx: worker process
app : ? :: nginx: worker process
app : ? :: nginx: worker process
app : ? :: nginx: worker process
app : ? :: nginx: worker process
app : ? :: nginx: worker process
app : ? :: nginx: worker process
app : ? :: nginx: cache manager process
app : ? :: nginx: cache loader process
app : pts/ :: grep --color=auto nginx
app Sep21 ? :: nginx: worker process
app Sep21 ? :: nginx: worker process
app Sep21 ? :: nginx: worker process
app Sep21 ? :: nginx: worker process
app Sep21 ? :: nginx: worker process
app Sep21 ? :: nginx: worker process
app Sep21 ? :: nginx: worker process
app Sep21 ? :: nginx: worker process
app Sep21 ? :: nginx: cache manager process
root Sep15 ? :: nginx: master process /data/nginx/sbin/nginx 发送WITCH信号
向原Nginx主进程发送WINCH信号,它会逐步关闭其下的工作进程(主进程不退出),这时所有请求都会由新版Nginx处理.
[app@web-node01 nginx-1.14.]# kill -WITCH //如果这个命令报错,则可以忽略, 在最后一步直接kill掉原来Nginx主进程的pid即可. 发送HUP信号 (特别注意: 这一步是回退, 如果不回退, 则直接忽略这一步即可)
如果这时需要回退,可向原Nginx主进程发送HUP信号,它会重新启动工作进程, 仍使用旧版配置文件 。
然后可以将新版Nginx进程杀死(使用QUIT、TERM、或者KILL)
[app@web-node01 nginx-1.14.]# kill -HUP 升级完毕
如果不需要回滚,可以将原Nginx主进程杀死(使用QUIT、TERM、或者KILL),至此完成热升级。 [app@web-node01 nginx-1.14.]# ps -ef|grep nginx
root : ? :: nginx: master process /data/nginx/sbin/nginx
app : ? :: nginx: worker process
app : ? :: nginx: worker process
app : ? :: nginx: worker process
app : ? :: nginx: worker process
app : ? :: nginx: worker process
app : ? :: nginx: worker process
app : ? :: nginx: worker process
app : ? :: nginx: worker process
app : ? :: nginx: cache manager process
app : pts/ :: grep --color=auto nginx
app Sep21 ? :: nginx: worker process
app Sep21 ? :: nginx: worker process
app Sep21 ? :: nginx: worker process
app Sep21 ? :: nginx: worker process
app Sep21 ? :: nginx: worker process
app Sep21 ? :: nginx: worker process
app Sep21 ? :: nginx: worker process
app Sep21 ? :: nginx: worker process
app Sep21 ? :: nginx: cache manager process
root Sep15 ? :: nginx: master process /data/nginx/sbin/nginx [app@web-node01 nginx-1.14.]# sudo kill - [app@web-node01 nginx-1.14.]# ps -ef|grep nginx
root : ? :: nginx: master process /data/nginx/sbin/nginx
app : ? :: nginx: worker process
app : ? :: nginx: worker process
app : ? :: nginx: worker process
app : ? :: nginx: worker process
app : ? :: nginx: worker process
app : ? :: nginx: worker process
app : ? :: nginx: worker process
app : ? :: nginx: worker process
app : ? :: nginx: cache manager process
app : pts/ :: grep --color=auto nginx [app@web-node01 ~]# /data/nginx/sbin/nginx -v
nginx version: nginx/1.14.
***************当你发现自己的才华撑不起野心时,就请安静下来学习吧***************

转自

Nginx range filter模块数字错误漏洞修复 (Nginx平滑升级) - 运维笔记 - 散尽浮华 - 博客园 https://www.cnblogs.com/kevingrace/p/9963278.html

Nginx range filter模块数字错误漏洞修复 (Nginx平滑升级) 【转】的更多相关文章

  1. Nginx range filter模块数字错误漏洞修复 (Nginx平滑升级)

    对线上生产环境服务器进行漏洞扫描, 发现有两台前置机器存在Nginx range filter模块数字错误漏洞, 当使用nginx标准模块时,攻击者可以通过发送包含恶意构造range域的header ...

  2. Linux kernel ‘lbs_debugfs_write’函数数字错误漏洞

    漏洞名称: Linux kernel ‘lbs_debugfs_write’函数数字错误漏洞 CNNVD编号: CNNVD-201311-421 发布时间: 2013-11-29 更新时间: 2013 ...

  3. Linux kernel get_prng_bytes函数数字错误漏洞

    漏洞名称: Linux kernel get_prng_bytes函数数字错误漏洞 CNNVD编号: CNNVD-201310-142 发布时间: 2013-10-11 更新时间: 2013-10-1 ...

  4. 高性能Web服务器Nginx的配置与部署研究(14)平滑升级你的Nginx

    1.概述(可以直接跳过看第2部分) Nginx方便地帮助我们实现了平滑升级.其原理简单概括,就是: (1)在不停掉老进程的情况下,启动新进程. (2)老进程负责处理仍然没有处理完的请求,但不再接受处理 ...

  5. CVE-2013-2729 Adobe Reader和Acrobat 数字错误漏洞

    这个洞是在论坛里看到的,感觉很有意思,来学习一下.个人感觉IE或者说是浏览器的洞和Adobe洞都是比较难调的,主要是有大量的类难以摸清之间的关系. 这个洞是一个整数溢出的洞,这个不是重点.重点是利用的 ...

  6. nginx gzip filter模块分析

    API:http://refspecs.linuxbase.org/LSB_3.1.1/LSB-Core-generic/LSB-Core-generic/zlib-deflateinit2.html ...

  7. Web安全常见漏洞修复建议

    转载地址:https://security.pingan.com/blog/17.html SQL注入 在服务器端要对所有的输入数据验证有效性. 在处理输入之前,验证所有客户端提供的数据,包括所有的参 ...

  8. nginx 增加 lua模块

    Nginx中的stub_status模块主要用于查看Nginx的一些状态信息. 本模块默认是不会编译进Nginx的,如果你要使用该模块,则要在编译安装Nginx时指定: ./configure –wi ...

  9. PrestaShop 网站漏洞修复如何修复

    PrestaShop网站的漏洞越来越多,该网站系统是很多外贸网站在使用的一个开源系统,从之前的1.0初始版本到现在的1.7版本,经历了多次的升级,系统使用的人也越来越多,国内使用该系统的外贸公司也很多 ...

随机推荐

  1. puppeteer,新款headless chrome

    puppeteer puppeteer是一种谷歌开发的Headless Chrome,因为puppeteer的出现,业内许多自动化测试库停止维护,比如PhantomJS,Selenium IDE fo ...

  2. 2017-12-14python全栈9期第一天第一节之太白自我介绍和内容大纲

    1.计算机基础 2.python历史 3.python的环境 4.Python的发展 5.python的种类 6.变量 7.常量 8.注释 9.用户交互 10.基础类型初始 11.if 12.whil ...

  3. java版微信公众号支付(H5调微信内置API)

    最近需要做微信公众号支付,网上找了大堆的代码,大多都只说了个原理,自己踩了太多坑,所有的坑,都会再下面的文章中标注,代码我也贴上最全的(叫我雷锋)!!! 第一步:配置支付授权目录 你需要有将你公司的微 ...

  4. C#设计模式(1)——简单工厂模式

    1.什么是简单工厂 现实中的工厂负责生产产品,顾名思义,编程中的简单工厂就是一个生产对象的类,它的主要作用是创建具体的产品类实例.我们以一个生产鼠标为例来分析简单工厂的作用,鼠标有两种:戴尔鼠标和惠普 ...

  5. Centos6下安装中文字体

    先安装字体管理软件 [root@localhost ~]# yum install fontconfig 将需要安装的字体放到/usr/share/fonts/chinese/目录下 如果不存在这个目 ...

  6. ArcMap登录和ArcGIS online都是灰色,无法连接网络的解决方法

    此问题可能由多种原因造成,表现为系统托盘中的 ArcGIS Online 地球图标断开连接(显示红色×). 解决方法: 方法一: 在系统托盘中的 ArcGIS Online 地球图标右键单击此图标 & ...

  7. ArcGis Python脚本——根据字段内容拆分要素类(shp)为多个

    其实,这就是批量执行了ArcToolbox 分析工具-筛选 功能. 先上代码,后做解说: # in_feature:待拆分要素类 # out_folderpath:输出路径,注意最后加“/”以与字段名 ...

  8. JS创建对象之稳妥构造函数模式

    所谓稳妥对象,指的是没有公共属性,而且其方法也不引用this的对象 function Person(name, age, job) { // 创建要返回的对象 var o = new Object() ...

  9. mesg命令帮助文档(ubuntu 18.04)

    MESG() User Commands MESG() NAME mesg - display (or do not display) messages from other users SYNOPS ...

  10. AD软件使用心得

    1.在更新原理图之前一定要标记所有器件,否则无法生成PCB器件. 2.学会用sch list网表来批量修改器件名称 3.布线的面