【Redis升级---修复代码注入漏洞、缓冲区错误漏洞】

【Redis升级---修复代码注入漏洞、缓冲区错误漏洞】

  • 一、漏洞组件详情
      • 1.1 ⛳ 组件名称----`Redis`
      • 1.2 ⛳ 组件版本----`V4.0.8`
      • 1.3 ⛳ 是否合规----`否`
      • 1.4 ⛳ 漏洞类型----`中间件漏洞`
      • 1.5 ⛳ 漏洞类型----`涉及漏洞编号`
      • 1.6 ⛳ 受影响版本区间
      • 1.7 ⛳ 漏洞简介
  • 二、Redis版本升级(redis-4.0.8升级至redis-7.0.9)
      • 2.1 ⛳ Redis当前版本查看、gcc版本查看
      • 2.2 ⛳ 旧版本数据及配置文件备份
        • 2.2.1 插入数据以便做升级测试
        • 2.2.2 旧版本数据及配置文件备份(有备无患)-升级说明
      • 2.3 ⛳ 编译安装新版`redis-7.0.9`
        • 2.3.1 上传解压`redis-7.0.9.tar.gz`
        • 2.3.2 编译`redis-7.0.9`
        • 2.3.3 make test
        • 2.3.4 安装升级`redis-7.0.9`有关报错解决
        • 2.3.5 再次安装redis-7.0.9
        • 2.3.6 将redis-7.0.9启动脚本复制一份放到/etc/init.d目录下(开机自启)
      • 2.4 ⛳ 启动新版`redis-7.0.9`测试
        • 2.4.1 检查版本及数据
  • 总结—温故知新


【上一篇】
The Begin 点点关注,收藏不迷路
【下一篇】

一、漏洞组件详情

1.1 ⛳ 组件名称----Redis

1.2 ⛳ 组件版本----V4.0.8

1.3 ⛳ 是否合规----

1.4 ⛳ 漏洞类型----中间件漏洞

1.5 ⛳ 漏洞类型----涉及漏洞编号

CVE编号:CVE-2022-0543
CNNVD编号:CNNVD-202202-1622
----Redis 代码注入漏洞

CVE编号:CVE-2022-24735
CNNVD编号:CNNVD-202204-4527
----Redis Labs Redis 代码注入漏洞

CVE编号:CVE-2022-31144
CNNVD编号: CNNVD-202207-1675
----Redis Labs Redis 缓冲区错误漏洞

1.6 ⛳ 受影响版本区间

  • 版本<6.2.7
  • 7.0.0≤版本<7.0.4

1.7 ⛳ 漏洞简介

  • Redis 代码注入漏洞:

Redis Labs Redis是美国Redis Labs公司的一套开源的使用ANSI C编写、支持网络、可基于内存亦可持久化的日志型、键值(Key-Value)存储数据库,并提供多种语言的API。

Redis 存在代码注入漏洞,攻击者可利用该漏洞远程执行代码。

  • Redis Labs Redis 代码注入漏洞 :

Redis 6.2.7 和 7.0.0 之前版本存在代码注入漏洞,该漏洞源于Lua 脚本执行环境存在问题。攻击者利用该漏洞可以实现以另一个Redis用户的权限执行脚本。

  • Redis Labs Redis 缓冲区错误漏洞:

Redis 7.0.4 之前版本存在安全漏洞,该漏洞源于针对特定状态的流键的特制 XAUTOCLAIM 命令可能导致堆溢出,并可能导致远程代码执行。

二、Redis版本升级(redis-4.0.8升级至redis-7.0.9)

注:本次升级环境为CentOS Linux release 7.9.2009 (Core)

2.1 ⛳ Redis当前版本查看、gcc版本查看

[root@zyl-docker ~]# redis-cli -v
redis-cli 4.0.8
[root@zyl-docker ~]#

[root@zyl-docker ~]# gcc --version
gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44)
Copyright © 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Redis 7.0.9 安装要求的gcc版本比较高,升级gcc版本见【linux离线升级gcc版本—gcc4.8.5–>gcc12.2.0】

2.2 ⛳ 旧版本数据及配置文件备份

2.2.1 插入数据以便做升级测试

[root@zyl-docker init.d]# redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> set k2 v2
OK
127.0.0.1:6379>

2.2.2 旧版本数据及配置文件备份(有备无患)-升级说明

旧版安装目录:/usr/local/bin

旧版配置文件(需备份):/etc/redis/6379.conf

旧版数据存储目录(需备份):/var/lib/redis

日志文件:
/var/log/redis/redis.log

   
###备份旧版配置文件
[root@zyl-docker ~]# cp /etc/redis/6379.conf /etc/redis/6379.conf_bak

###备份旧版数据文件 
[root@zyl-docker ~]# cp /var/lib/redis/dump.rdb /var/lib/redis/dump.rdb_bak
[root@zyl-docker ~]#

###备份旧版启动文件 
[root@zyl-docker src]# cd /etc/init.d/
[root@zyl-docker init.d]# mv redisd redisd_bak

2.3 ⛳ 编译安装新版redis-7.0.9

2.3.1 上传解压redis-7.0.9.tar.gz

###解压至/usr/local目录
[root@zyl-docker ~]# tar -zxvf redis-7.0.9.tar.gz -C /usr/local

2.3.2 编译redis-7.0.9

####cd 到新版redis-7.0.9解压目录
[root@zyl-docker ~]# cd /usr/local/redis-7.0.9/

###执行命令进行编译
[root@zyl-docker redis-4.0.8]# make MALLOC=libc

【Redis升级---修复代码注入漏洞、缓冲区错误漏洞】_第1张图片

2.3.3 make test

#####安装前检查
[root@zyl-docker redis-7.0.9]# make test

\o/ All tests passed without errors!
Cleanup: may take some time… OK
make[1]: Leaving directory `/usr/local/redis-7.0.9/src’
[root@zyl-docker redis-7.0.9]# make test

【Redis升级---修复代码注入漏洞、缓冲区错误漏洞】_第2张图片

可能会出现报错,tcl 版本过低原因,下载安装高版本tcl即可,可在【Redis编译安装】—redis-4.0.8篇—1.3.4小节 安装tcl-8.5 查看解决办法
   
报错:You need tcl 8.5 or newer in order to run the Redis test make: *** [test] Error 1

2.3.4 安装升级redis-7.0.9有关报错解决

####cd src 目录安装redis
[root@zyl-docker redis-7.0.9]# cd src && make install
报错:which: no python3 in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)

Hint: It’s a good idea to run ‘make test’ ; )
INSTALL redis-server
INSTALL redis-benchmark
INSTALL redis-cli
[root@zyl-docker src]#

【Redis升级---修复代码注入漏洞、缓冲区错误漏洞】_第3张图片

解决:查看Python版本和离线升级Python环境

###步骤一、查看本机Python版本,本机为Python 2.7.5,版本太低导致

[root@zyl-docker Python-3.6.5]# python --version
Python 2.7.5
[root@zyl-docker Python-3.6.5]#

###步骤二、 下载 Python-3.6.5.tgz ,并上传解压  
[root@zyl-docker ~]# tar -zxvf Python-3.6.5.tgz

###步骤三、配置、检查,指定安装到/usr/local/python3
[root@zyl-docker Python-3.6.5]# ./configure --prefix=/usr/local/python3
   
【Redis升级---修复代码注入漏洞、缓冲区错误漏洞】_第4张图片

###步骤四、安装Python-3.6.5,
[root@zyl-docker Python-3.6.5]# make && make install

再次报错:zipimport.ZipImportError: can't decompress data; zlib not available

在这里插入图片描述

【Redis升级---修复代码注入漏洞、缓冲区错误漏洞】_第5张图片

####查看zlib,大概率是少安装了一些依赖包,猜测和zlib有关的那就是zlib-devel,尝试安装zlib-devel
[root@zyl-docker Python-3.6.5]# rpm -qa|grep zlib
zlib-1.2.7-18.el7.x86_64
[root@zyl-docker Python-3.6.5]#

###—下载安装zlib-devel—####
zlib-devel-1.2.7-18.el7.x86_64.rpm 下载

[root@zyl-docker ~]# rpm -i zlib-devel-1.2.7-18.el7.x86_64.rpm
[root@zyl-docker ~]# rpm -qa|grep zlib-devel

###检查zlib-devel
zlib-devel-1.2.7-18.el7.x86_64
[root@zyl-docker ~]#

####再次执行 make && make install
【Redis升级---修复代码注入漏洞、缓冲区错误漏洞】_第6张图片

###步骤五、建立软连接

【Redis升级---修复代码注入漏洞、缓冲区错误漏洞】_第7张图片
####cd /usr/bin/python,查看旧版python
python是一个软链接,可以直接删除,不影响原文件。

【Redis升级---修复代码注入漏洞、缓冲区错误漏洞】_第8张图片

[root@zyl-docker bin]# pwd
/usr/bin
[root@zyl-docker bin]#  
[root@zyl-docker bin]# rm -rf python

#####建立python3.6软连接  
[root@zyl-docker python3.6]# ln -s /usr/local/python3/bin/ /usr/bin/python3

[root@zyl-docker python3.6]# ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3
[root@zyl-docker python3.6]#  
   
###步骤六、Python版本检查(已成功升级至Python-3.6.5)

[root@zyl-docker bin]# python --version
Python 3.6.5
[root@zyl-docker bin]#

2.3.5 再次安装redis-7.0.9

##cd /usr/local/redis-7.0.9 目录安装redis
[root@zyl-docker redis-7.0.9]# cd src && make install
[root@zyl-docker redis-7.0.9]# cd src && make install

Hint: It’s a good idea to run ‘make test’

INSTALL redis-server
INSTALL redis-benchmark
INSTALL redis-cli
[root@zyl-docker src]#

###redis版本检查(已成功升级至redis-cli 7.0.9)
[root@zyl-docker src]# redis-cli -v
redis-cli 7.0.9
[root@zyl-docker src]#

2.3.6 将redis-7.0.9启动脚本复制一份放到/etc/init.d目录下(开机自启)

[root@zyl-docker init.d]# cp /usr/local/redis-7.0.9/utils/redis_init_script /etc/init.d/redisd

【Redis升级---修复代码注入漏洞、缓冲区错误漏洞】_第9张图片

###执行开机自启命令###
[root@zyl-docker init.d]# chkconfig redisd on

2.4 ⛳ 启动新版redis-7.0.9测试

###启动redis
[root@zyl-docker init.d]# service redisd start
Starting Redis server…
[root@zyl-docker init.d]#

###redis进程查看
[root@zyl-docker init.d]# ps -ef | grep redis
root 21752 1 0 11:48 ? 00:00:00 /usr/local/bin/redis-server 127.0.0.1:6379
root 21789 1944 0 11:50 pts/0 00:00:00 grep --color=auto redis
[root@zyl-docker init.d]#  

###停止redis
[root@zyl-docker init.d]# service redisd stop
Stopping …
Redis stopped
[root@zyl-docker init.d]#

2.4.1 检查版本及数据

【Redis升级---修复代码注入漏洞、缓冲区错误漏洞】_第10张图片

###检查步骤2.2.1中插入的数据(k1,v1),(k2,v2)
[root@zyl-docker init.d]# redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> get k1
“v1”
127.0.0.1:6379> get k2
“v2”
127.0.0.1:6379>

###检查版本 
[root@zyl-docker ~]# redis-server -v
Redis server v=7.0.9 sha=00000000:0 malloc=libc bits=64 build=2f97593622c6128
[root@zyl-docker ~]#

[root@zyl-docker ~]# redis-cli -v
redis-cli 7.0.9
[root@zyl-docker ~]#

#######升级成功#######

总结—温故知新

❓ 本篇由实际工作中的问题延伸并解决,模拟生产环境而来
❓ redis代码注入漏洞了解
❓ 安装升级`redis-7.0.9`有关报错解决(Python3.6.5离线升级、zlib-devel-1.2.7-18.el7.x86_64 离线安装)
❓ redis有关目录详细了解和参数配置

【上一篇】
The End 点点关注,收藏不迷路
【下一篇】

你可能感兴趣的:(网络安全&运维,Linux,redis版本升级,redis7.0.9,代码注入漏洞,redis数据库,redis4.0.8)