目录
- 前言
- 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的漏洞进行展示和处理。
端口 | 协议 | 服务 | 漏洞 |
---|---|---|---|
– | ICMP | – | ICMP timestamp请求响应漏洞 |
80 | TCP | http | nginx 安全漏洞(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 安装的软件信息
软件名称 | 版本号 |
---|---|
nginx | 1.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
命令时,注意正确发送信号以实现平滑过渡,避免服务中断。尤其在发送USR2
、WINCH
和QUIT
信号时,需确认进程ID正确无误。最后,升级后仔细测试新版本Nginx的运行情况,确保其正常工作并能满足业务需求。通过上述步骤和注意事项,可以有效地完成Nginx的升级任务。