通过升级nginx完美修复nginx相关漏洞

目录

  • 前言
  • 1 安全评估报告的漏洞信息
    • 1.1 nginx漏洞概况
    • 1.2 nginx漏洞详细信息
    • 1.3 安装的软件信息
  • 2 问题分析
  • 3 Nginx从1.18版本升级到1.26版本的步骤与说明
    • 3.1 查看现有Nginx配置参数
    • 3.2 下载新版本Nginx
    • 3.3 配置新版本Nginx
    • 3.4 编译新版本Nginx
    • 3.5 备份旧版本Nginx的二进制文件
    • 3.6 替换Nginx二进制文件
    • 3.7 测试新版本Nginx
    • 3.8 查看Nginx运行情况
    • 3.9 发送信号停止旧版本Nginx接受请求
    • 3.10 再次查看Nginx运行情况
    • 3.11 发送WINCH信号关闭旧的Nginx工作进程
    • 3.12 关闭旧的Nginx master进程
  • 结语

前言

在软件开发完成并交付给客户后,经过一段时间,客户的上级部门要求对服务器进行安全检测。通过漏洞扫描,发现了服务器存在安全漏洞,并要求在规定期限内完成漏洞修补。由于客户通常缺乏技术能力,他们会求助于软件开发公司来协助解决服务器的安全问题。作为软件开发人员,我们不仅会为客户开发软件,还会帮助他们解决服务器安全方面的难题,确保其系统的安全性和稳定性。

1 安全评估报告的漏洞信息

1.1 nginx漏洞概况

首先看一下安全评估报告,报告中对服务器的漏洞,漏洞概况是一个所有漏洞的列表。此处只针对nginx的漏洞进行展示和处理。

端口协议服务漏洞
ICMPICMP timestamp请求响应漏洞
80TCPhttpnginx 安全漏洞(CVE-2021-23017)
nginx 缓冲区错误漏洞(CVE-2022-41741)
nginx 越界写入漏洞(CVE-2022-41742)
Nginx 信任管理问题漏洞(CVE-2021-3618)
通过HTTP获取远端WWW服务信息

1.2 nginx漏洞详细信息

然后针对每个漏洞的说明,如nginx漏洞,以下是几个典型的nginx严重漏洞详细信息。

漏洞名称nginx 安全漏洞(CVE-2021-23017)
详细描述Nginx是美国Nginx公司的一款轻量级Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。 nginx存在安全漏洞,该漏洞源于一个离一错误在该漏洞允许远程攻击者可利用该漏洞在目标系统上执行任意代码。 受影响版本:0.6.18-1.20.0
解决办法厂商补丁: 目前厂商已发布升级补丁以修复漏洞,补丁获取链接: https://www.nginx.com/blog/updating-nginx-dns-resolver-vulnerability-cve-2021-23017/
威胁分值7.7
危险插件
发现日期2021-05-25
CVE编号CVE-2021-23017
CNNVD编号CNNVD-202105-1581
CNCVE编号CNCVE-202123017
CVSS评分6.8
漏洞名称nginx 缓冲区错误漏洞(CVE-2022-41741)
详细描述此插件基于版本检测,有可能误报,未开启 MP4 模块的nginx属于误报,请忽略该漏洞。 Nginx是美国Nginx公司的一款轻量级Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。 Nginx在 ngx_http_mp4_module 中存在漏洞,这可能允许攻击者激发 worker 进程的崩溃,或者通过使用特制的 mp4 文件致使 worker 进程出现内存泄露。该问题仅影响启用了 ngx_http_mp4_module 模块(默认不启用)并在配置文件中使用 .mp4 指令的 NGINX。此外,只有当攻击者能够触发使用 ngx_http_mp4_module 对特制 mp4 文件的进行处理时,攻击才有可能成功。 https://mailman.nginx.org/pipermail/nginx-announce/2022/RBRRON6PYBJJM2XIAPQBFBVLR4Q6IHRA.html
解决办法缓解措施:只允许受信用户发布音频和视频文件,或者在 NGINX 配置中禁用 MP4 模块,直到升级至修复版本。 厂商补丁: 目前厂商已发布升级补丁以修复漏洞,补丁获取链接: http://nginx.org/download/patch.2022.mp4.txt
威胁分值7.8
危险插件
发现日期2022-10-19
CVE编号CVE-2022-41741
CNNVD编号CNNVD-202210-1419
CNCVE编号CNCVE-202241741
漏洞名称nginx 越界写入漏洞(CVE-2022-41742)
详细描述此插件基于版本检测,有可能误报。 Nginx是美国Nginx公司的一款轻量级Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。 Nginx Plus 的模块 ngx_http_hls_module 中存在一个漏洞,该漏洞可能允许本地攻击者破坏 NGINX 的工作进程内存,从而导致其崩溃或在使用特制的音频或视频文件时产生其他潜在的影响。只有当配置文件中使用 hls 指令时,该问题才会影响 Nginx Plus。 此外,只有当攻击者可以触发使用模块 ngx_http_hls_module 对特制音频或视频文件进行 处理时,攻击才有可能成功。一次成功的利用可能允许一个本地攻击者破坏 NGINX 的 worker 进程,导致其中止或其他潜在的影响。 https://mailman.nginx.org/pipermail/nginx-announce/2022/RBRRON6PYBJJM2XIAPQBFBVLR4Q6IHRA.html
解决办法缓解措施:只允许受信用户发布音频和视频文件。或者在 NGINX 配置中禁用 HLS 模块,直到升级至修复版本,可缓解此风险。 厂商补丁: 目前厂商已发布升级补丁以修复漏洞,补丁获取链接: http://nginx.org/download/patch.2022.mp4.txt
威胁分值7.1
危险插件
发现日期2022-12-08
CVE编号CVE-2022-41742
CNNVD编号CNNVD-202210-1409
CNCVE编号CNCVE-202241742
漏洞名称Nginx 信任管理问题漏洞(CVE-2021-3618)
详细描述此插件基于nginx版本检测,有可能误报。 Nginx是美国F5公司的一款轻量级Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like协议下发行。 Nginx存在信任管理问题漏洞,该漏洞源于存在 ALPACA(应用层协议内容混淆)攻击,这会破坏TLS的身份验证,并且可能会发生跨协议攻击。
解决办法厂商升级: Nginx ----- 目前厂商已经发布了新版本以修复这个安全问题,请到厂商的主页下载: 下载链接:http://nginx.org/en/download.html
威胁分值7.4
危险插件
发现日期2022-03-23
CVE编号CVE-2021-3618
CNNVD编号CNNVD-202107-216
CNCVE编号CNCVE-20213618
CVSS评分5.8

1.3 安装的软件信息

软件名称版本号
nginx1.18.0

2 问题分析

查看漏洞信息的详细说明,里面有解决办法一项,我们可以看一下解决办法。

漏洞名称解决办法
nginx 安全漏洞(CVE-2021-23017)缓解措施:只允许受信用户发布音频和视频文件,或者在 NGINX 配置中禁用 MP4 模块,直到升级至修复版本。 厂商补丁: 目前厂商已发布升级补丁以修复漏洞,补丁获取链接: http://nginx.org/download/patch.2022.mp4.txt
nginx 缓冲区错误漏洞(CVE-2022-41741)缓解措施:只允许受信用户发布音频和视频文件,或者在 NGINX 配置中禁用 MP4 模块,直到升级至修复版本。 厂商补丁: 目前厂商已发布升级补丁以修复漏洞,补丁获取链接: http://nginx.org/download/patch.2022.mp4.txt
nginx 越界写入漏洞(CVE-2022-41742)缓解措施:只允许受信用户发布音频和视频文件。或者在 NGINX 配置中禁用 HLS 模块,直到升级至修复版本,可缓解此风险。 厂商补丁: 目前厂商已发布升级补丁以修复漏洞,补丁获取链接: http://nginx.org/download/patch.2022.mp4.txt
Nginx 信任管理问题漏洞(CVE-2021-3618)厂商升级: Nginx ----- 目前厂商已经发布了新版本以修复这个安全问题,请到厂商的主页下载: 下载链接:http://nginx.org/en/download.html

上面四个nginx的漏洞,解决办法都有说明通过升级可以修复漏洞。所以我们修复漏洞的方法就是升级nginx。

服务器的nginx版本是1.18,nginx的稳定版本都是偶数,也就是1.20,1.22,1.24,1.26等,通过查阅nginx官网,可以看到nginx偶数版本的最新版本,就是1.26,所以我们选用1.26做为升级后的版本。

在这里插入图片描述

3 Nginx从1.18版本升级到1.26版本的步骤与说明

3.1 查看现有Nginx配置参数

首先,使用以下命令查看当前Nginx的编译配置参数:

/usr/local/nginx/sbin/nginx -V

说明:这一步可以获取当前Nginx版本的编译配置参数,这些参数将在配置新版本时使用,确保新旧版本的配置一致性。

3.2 下载新版本Nginx

从Nginx官网或使用wget下载最新版本的Nginx:

wget http://nginx.org/download/nginx-1.26.0.tar.gz

解压下载的压缩包:

tar -zxvf nginx-1.26.0.tar.gz
cd nginx-1.26.0

说明:这一步下载并解压最新版本的Nginx源码,准备进行配置和编译。

3.3 配置新版本Nginx

在新版本Nginx的根目录下,使用从第1步获取的配置参数进行配置:

./configure <configuration arguments from nginx -V>

说明:这一步通过./configure命令使用旧版本的配置参数对新版本进行配置,以确保新版本Nginx的配置和旧版本一致。

3.4 编译新版本Nginx

执行以下命令进行编译:

make

说明make命令将源码编译为二进制文件。编译过程根据配置参数生成符合需求的Nginx可执行文件。

3.5 备份旧版本Nginx的二进制文件

备份当前正在使用的Nginx二进制文件:

cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak

说明:这一步是为了安全起见,备份旧版本的Nginx可执行文件。如果新版本出现问题,可以快速恢复旧版本。

3.6 替换Nginx二进制文件

将新编译的Nginx二进制文件拷贝到原来的Nginx二进制文件位置:

cp objs/nginx /usr/local/nginx/sbin/nginx

说明:这一步将新版本的Nginx二进制文件替换旧版本文件,以便使用新版本Nginx。

3.7 测试新版本Nginx

测试新版本Nginx是否正确编译和安装:

/usr/local/nginx/sbin/nginx -V

说明:确认新版本Nginx的编译配置参数是否正确,以确保新版本已经成功安装且配置无误。

3.8 查看Nginx运行情况

查看当前Nginx的运行情况:

ps -ef | grep nginx

说明:检查Nginx进程的运行情况,获取Nginx主进程(master)和工作进程(worker)的进程ID。

3.9 发送信号停止旧版本Nginx接受请求

发送USR2信号给旧版本Nginx的master进程(假设PID为4148):

kill -USR2 4148

说明kill -USR2 <PID>命令会通知Nginx启动新的master进程和worker进程,继续接受新的请求,而旧的master进程和worker进程则完成现有请求后停止工作。

3.10 再次查看Nginx运行情况

确认新的Nginx进程是否已启动:

ps -ef | grep nginx

说明:再次检查Nginx进程的运行情况,确保新的master和worker进程已经启动。

3.11 发送WINCH信号关闭旧的Nginx工作进程

发送WINCH信号关闭旧的Nginx工作进程(假设旧的master进程PID为4118):

kill -WINCH 4118

说明kill -WINCH <PID>命令会通知旧的master进程关闭其管理的worker进程,旧的worker进程将优雅地停止接受新请求,完成处理中的请求后退出。

3.12 关闭旧的Nginx master进程

发送QUIT信号关闭旧的Nginx master进程(假设PID为4148):

kill -QUIT 4148

说明kill -QUIT <PID>命令会通知旧的master进程优雅地关闭,即完成所有正在处理的请求后退出。至此,旧的Nginx版本已完全停止工作,新版本Nginx开始处理所有请求。

结语

升级Nginx是修复nginx漏洞的关键方法,需要仔细规划和执行以确保服务不中断。首先,确保备份旧版本的二进制文件和配置文件,以便在新版本出现问题时能够快速恢复。其次,在配置和编译新版本时,确保使用与旧版本相同的编译参数,保持配置一致性。使用kill命令时,注意正确发送信号以实现平滑过渡,避免服务中断。尤其在发送USR2WINCHQUIT信号时,需确认进程ID正确无误。最后,升级后仔细测试新版本Nginx的运行情况,确保其正常工作并能满足业务需求。通过上述步骤和注意事项,可以有效地完成Nginx的升级任务。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/40454.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

github 设置中文,亲测有效

点进去 安装 选上面第二个&#xff0c;不行再选第一个 GitHub - maboloshi/github-chinese: GitHub 汉化插件&#xff0c;GitHub 中文化界面。 (GitHub Translation To Chinese)

常见网络攻击方式及防御方法

1. DDOS攻击&#xff08;分布式拒绝服务攻击&#xff09; 概念&#xff1a;借助于C/S&#xff08;客户端/服务器&#xff09;技术&#xff0c;将多个计算机联合起来作为攻击平台&#xff0c;对一个或多个目标发动DDOS攻击&#xff0c;从而成倍地提高拒绝服务攻击的威力。防护方…

springboot 配置加密,jasypt加解密命令

位置&#xff1a;Maven仓库中\org\jasypt\jasypt\1.9.3 java -cp jasypt-1.9.3.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input123456 passwordmysalt algorithmPBEWithMD5andDES ----ENVIRONMENT----------------- Runtime: Oracle Corporation Java HotSpot™…

sideloadly 苹果自签和sidestore手机续签ipa记录

sideloadly 地址&#xff1a;https://sideloadly.io/#download 直接安装对应系统软件&#xff0c;然后吧ipa 拖到里面续签&#xff0c;缺点每7天需要电脑续签 如果续签保留数据需要对应的位置开启 enable file sharing 勾选 和 bundle id 修改 注意的地方需要电脑和手机appi…

气象观测站:时刻注视着天空的变化

在广袤无垠的地球上&#xff0c;气象观测站时刻注视着天空的变化&#xff0c;记录着大自然的脉动。它们是我们理解和应对气候变化、极端天气事件的重要工具。 一、气象观测站的基本构成 气象观测站包括一系列的气象仪器和设备&#xff0c;用于测量和记录各种气象参数。这些参数…

软考《信息系统运行管理员》-2.5信息系统运维管理系统与专用工具

2.5信息系统运维管理系统与专用工具 信息系统运维管理系统功能框架 信息系统运维管理系统是站在运维管理的整体视角&#xff0c;基于运维流程&#xff0c;以服务为导向的业务 服务管理和运维管理支撑平台&#xff0c;提供统一管理门户&#xff0c;最终帮助运维对象实现信息系…

【AI原理解析】-AI native模型微调

目录 一、模型微调的定义与重要性 二、模型微调的步骤 三、模型微调的优势与挑战 四、模型微调的应用场景 五、模型微调的未来发展方向 一、模型微调的定义与重要性 定义&#xff1a;模型微调是指在预训练模型的基础上&#xff0c;使用特定任务的数据对模型进行再训练&am…

Zabbix 配置SNMP监控

Zabbix SNMP监控介绍 Zabbix提供了强大的SNMP监控功能&#xff0c;可以用于监控网络设备、服务器和其他支持SNMP协议的设备。SNMP&#xff08;Simple Network Management Protocol&#xff0c;简单网络管理协议&#xff09;是一种广泛用于网络管理的协议。它用于监控网络设备&…

CVPR 2024最佳论文分享:打破刚性的超分辨率图像处理GNN

CVPR 2024最佳论文分享&#xff1a;打破刚性的超分辨率图像处理GNN CVPR&#xff08;Conference on Computer Vision and Pattern Recognition&#xff09;是计算机视觉领域最有影响力的会议之一&#xff0c;主要方向包括图像和视频处理、目标检测与识别、三维视觉等。近期&am…

分布式数据库HBase:从零开始了解列式存储

在接触过大量的传统关系型数据库后你可能会有一些新的问题: 无法整理成表格的海量数据该如何储存? 在数据非常稀疏的情况下也必须将数据存储成关系型数据库吗? 除了关系型数据库我们是否还有别的选择以应对Web2.0时代的海量数据? 如果你也曾经想到过这些问题, 那么HBase将是…

C++: 左值引用和右值引用

目录 概念&#xff1a; 理解&#xff1a; 左值引用&#xff0c;右值引用 左值引用能否给右值取别名&#xff1f; 右值引用能否给左值取别名&#xff1f; 引用的意义是什么&#xff1f; 左值和右值对自定义类型有什么区别吗&#xff1f; move的妙用&#xff01; 没有优化…

LLMs之CriticGPT:CriticGPT的简介、安装和使用方法、案例应用之详细攻略

LLMs之CriticGPT&#xff1a;CriticGPT的简介、安装和使用方法、案例应用之详细攻略 目录 CriticGPT的简介 1、简介 2、CriticGPT的方法 2.1、CriticGPT的训练方法 2.2、CriticGPT的批评生成方法 3、局限性 4、后续步骤 CriticGPT的安装和使用方法 CriticGPT的案例应用…

“proxy_pass“ directive is duplicate

后面发现是nginx.conf里面proxy pass这里有两个&#xff0c;注释其中一个并重新运行即可&#xff01;

AI并不是开发者的敌人,而是帮助他们实现更高效工作的得力助手。

AI是在帮助开发者还是取代他们&#xff1f; 在软件开发领域&#xff0c;生成式人工智能&#xff08;AIGC&#xff09;正在改变开发者的工作方式。无论是代码生成、错误检测还是自动化测试&#xff0c;AI工具正在成为开发者的得力助手。然而&#xff0c;这也引发了对开发者职业前…

基于主流SpringBoot进行JavaWeb开发的学习路线

目录 一、学习路线 &#xff08;1&#xff09;第一部分&#xff08;Web前端开发的技术栈&#xff09; &#xff08;2&#xff09;第二部分&#xff08;Web后端开发&#xff09; 二、学习之后必备的技能 三、学习Web开发的基础与未来的收获 学完这一类知识目标&#xff1a;…

Mybatis-01 原理

一. JDBC式编程 在 jdbc 编程中&#xff0c;我们最常用的是 PreparedStatement 式的编程&#xff0c;我们看下面这个例子&#xff1b; Connection conn null; PreparedStatement ps null; ResultSet rs null;try {// 1. 注册驱动Class.forName("com.mysql.jdbc.Drive…

Sping源码总览

源码地址&#xff1a;https://github.com/spring-projects/spring-framework 仓库地址&#xff1a;https://gitcode.net/qq_42665745/spring/-/tree/master 文章目录如下&#xff1a; 实现一个简单的Bean容器Bean 的定义、注册、获取Bean有参构造实例化Bean属性注入资源加载器…

C++11使用std::future和std::promise实现线程同步和异步通信

std::future 和 std::promise 是 C11 引入的标准库特性&#xff0c;用于实现线程间的异步通信和同步。它们提供了一种机制&#xff0c;使一个线程能够生成一个值或异常&#xff0c;并让另一个线程获取这个值或异常。 (线程A中设置结果) std::promise 用于设置异步操作的结果(线…

【Jupyter Notebook与Git完美融合】在Notebook中驾驭版本控制的艺术

标题&#xff1a;【Jupyter Notebook与Git完美融合】在Notebook中驾驭版本控制的艺术 Jupyter Notebook是一个流行的开源Web应用程序&#xff0c;允许用户创建和共享包含实时代码、方程、可视化和解释性文本的文档。而Git是一个广泛使用的分布式版本控制系统&#xff0c;用于跟…

关于C#在WPF中如何使用“抽屉”控件

关于C#在WPF中如何使用“抽屉”控件 1.前提准备2.XAML代码3.对应的C#代码4.显示效果1.前提准备 需要引用MaterialDesign控件库,关于如何引用,请参照文章——关于C#如何引用MaterialDesign控件库 2.XAML代码 <Window x:Class="MaterialDesign_Test.MainWindow"…